1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# Add a new transport
Starting with PDK 1.12.0 there is the `pdk new transport` command, that you can use to create the base files for your new transport:
Next, we'll active a few future defaults. In the `hue_workshop` directory, create a file called `.sync.yml` and paste the following:
```
# .sync.yml
---
Gemfile:
optional:
':development':
- gem: 'puppet-resource_api'
- gem: 'faraday'
- gem: 'rspec-json_expectations'
spec/spec_helper.rb:
mock_with: ':rspec'
```
Run `pdk update` in the module's directory to deploy the changes in the module:
```
david@davids:~/tmp/hue_workshop$ pdk update --force
pdk (INFO): Updating david-hue_workshop using the default template, from 1.10.0 to 1.10.0
----------Files to be modified----------
Gemfile
spec/spec_helper.rb
----------------------------------------
You can find a report of differences in update_report.txt.
Do you want to continue and make these changes to your module? Yes
------------Update completed------------
2 files modified.
david@davids:~/tmp/hue_workshop$
```
Then, create the actual transport:
```
david@davids:~/tmp/hue$ pdk new transport hue
pdk (INFO): Creating '/home/david/tmp/hue/lib/puppet/transport/hue.rb' from template.
pdk (INFO): Creating '/home/david/tmp/hue/lib/puppet/transport/schema/hue.rb' from template.
pdk (INFO): Creating '/home/david/tmp/hue/lib/puppet/util/network_device/hue/device.rb' from template.
pdk (INFO): Creating '/home/david/tmp/hue/spec/unit/puppet/transport/hue_spec.rb' from template.
pdk (INFO): Creating '/home/david/tmp/hue/spec/unit/puppet/transport/schema/hue_spec.rb' from template.
david@davids:~/tmp/hue$
```
## Checkpoint
To validate your new module and transport, run `pdk validate --parallel` and `pdk test unit`:
```
david@davids:~/tmp/hue$ pdk validate --parallel
pdk (INFO): Running all available validators...
pdk (INFO): Using Ruby 2.5.5
pdk (INFO): Using Puppet 6.4.2
┌ [✔] Validating module using 5 threads ┌
├──[✔] Checking metadata syntax (metadat├──son tasks/*.json).
├──[✔] Checking task names (tasks/**/*).├──
└──[✔] Checking YAML syntax (["**/*.yaml├──"*.yaml", "**/*.yml", "*.yml"]).
└──[/] Checking module metadata style (metadata.json).
└──[✔] Checking module metadata style (metadata.json).
info: puppet-syntax: ./: Target does not contain any files to validate (**/*.pp).
info: task-metadata-lint: ./: Target does not contain any files to validate (tasks/*.json).
info: puppet-lint: ./: Target does not contain any files to validate (**/*.pp).
david@davids:~/tmp/hue$ pdk test unit
pdk (INFO): Using Ruby 2.5.5
pdk (INFO): Using Puppet 6.4.2
[✔] Preparing to run the unit tests.
[✔] Running unit tests in parallel.
Run options: exclude {:bolt=>true}
Evaluated 6 tests in 2.405066937 seconds: 0 failures, 0 pending.
david@davids:~/tmp/hue$
```
If you're working with a version control system, now would be a good time to make your first commit and store the boilerplate code, and then you can revisit the changes you made later. For example:
```
david@davids:~/tmp/hue$ git init
Initialized empty Git repository in ~/tmp/hue/.git/
david@davids:~/tmp/hue$ git add -A
david@davids:~/tmp/hue$ git commit -m 'initial commit'
[main (root-commit) 67951dd] initial commit
26 files changed, 887 insertions(+)
create mode 100644 .fixtures.yml
create mode 100644 .gitattributes
create mode 100644 .gitignore
create mode 100644 .gitlab-ci.yml
create mode 100644 .pdkignore
create mode 100644 .puppet-lint.rc
create mode 100644 .rspec
create mode 100644 .rubocop.yml
create mode 100644 .sync.yml
create mode 100644 .travis.yml
create mode 100644 .yardopts
create mode 100644 CHANGELOG.md
create mode 100644 Gemfile
create mode 100644 README.md
create mode 100644 Rakefile
create mode 100644 appveyor.yml
create mode 100644 data/common.yaml
create mode 100644 hiera.yaml
create mode 100644 lib/puppet/transport/hue.rb
create mode 100644 lib/puppet/transport/schema/hue.rb
create mode 100644 lib/puppet/util/network_device/hue/device.rb
create mode 100644 metadata.json
create mode 100644 spec/default_facts.yml
create mode 100644 spec/spec_helper.rb
create mode 100644 spec/unit/puppet/transport/hue_spec.rb
create mode 100644 spec/unit/puppet/transport/schema/hue_spec.rb
david@davids:~/tmp/hue$
```
## Next up
Now that you have everything ready, you'll [implement the transport](./05-implementing-the-transport.md).
|