Blame view
docs/modules.md
3.61 KB
3a47d364c Remove caches for... |
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 |
# Writing Puppet modules for Boxen Writing Puppet modules for Boxen is easy. ## Tooling * Always use Bundler * Always use librarian-puppet * Always use puppet-lint * Always use rspec-puppet ## Directory structure We follow Puppet's recommended structure very closely. Here's the directory structure from the boxen Puppet module: ``` ├── Gemfile ├── Gemfile.lock ├── README.md ├── files │ ├── README.md │ └── gemrc ├── lib │ ├── facter │ │ ├── boxen.rb │ │ └── root_encrypted.rb │ └── puppet │ ├── parser │ │ └── functions │ │ ├── file_exists.rb │ │ ├── include_all_projects.rb │ │ └── include_projects_from_boxen_cli.rb │ ├── provider │ │ ├── package │ │ │ ├── compressed_app.rb │ │ │ ├── hax.rb │ │ │ └── homebrew.rb │ │ ├── repository │ │ │ └── git.rb │ │ └── service │ │ └── ghlaunchd.rb │ └── type │ └── repository.rb ├── manifests │ ├── bin.pp │ ├── config.pp │ ├── development │ │ └── project.pp │ ├── development.pp │ ├── environment.pp │ ├── gemrc.pp │ ├── janitor.pp │ ├── osx_defaults.pp │ ├── personal.pp │ ├── profile.pp │ ├── project.pp │ ├── repo.pp │ ├── security.pp │ ├── sudoers.pp │ └── zipped_widget.pp ├── script │ ├── bootstrap │ ├── cibuild │ ├── lint │ ├── specs │ └── syntax ├── spec │ ├── classes │ │ ├── bin_spec.rb │ │ └── environment_spec.rb │ ├── fixtures │ │ ├── Puppetfile │ │ ├── Puppetfile.lock │ │ ├── manifests │ │ │ └── site.pp │ │ └── modules │ │ ├── boxen │ │ │ ├── files -> ../../../../files │ │ │ ├── lib -> ../../../../lib │ │ │ ├── manifests -> ../../../../manifests │ │ │ └── templates -> ../../../../templates │ │ └── projects │ │ └── manifests │ │ └── test.pp │ ├── spec_helper.rb │ └── unit │ └── puppet │ └── type │ └── repository_spec.rb └── templates ├── config.sh.erb ├── env.sh.erb └── gh_creds.sh.erb ``` Of note, we do not use things like `rake` to drive specs. Instead, we bias towards simple, portable shell scripts that can be consumed by other shell scripts. ## Facts and variables The core boxen module provides [a number of variables to use](https://github.com/boxen/puppet-boxen/blob/master/manifests/config.pp#L8-L21). In addition to these, you may always assume the presence of a `boxen_user` fact, which is the local user running Boxen. Other modules may provide their own globally available variables. The recommendation is to put any variables that might be consumed by multiple classes/manifests in a scoped config class (e.g. `modules/boxen/manifests/config.pp`). |