README.md in librarian-puppet-0.0.1.pre2 vs README.md in librarian-puppet-0.9.0

- old
+ new

@@ -1,166 +1,333 @@ \ No newline at end of file +# Librarian-puppet + +## Introduction + +Librarian-puppet is a bundler for your puppet infrastructure. You can use +librarian-puppet to manage the puppet modules your infrastructure depends on. +It is based on [Librarian](https://github.com/applicationsonline/librarian), a +framework for writing bundlers, which are tools that resolve, fetch, install, +and isolate a project's dependencies. + +Librarian-puppet manages your `modules/` directory for you based on your +`Puppetfile`. Your `Puppetfile` becomes the authoritative source for what +modules you require and at what version, tag or branch. + +Once using Librarian-puppet you should not modify the contents of your `modules` +directory. The individual modules' repos should be updated, tagged with a new +release and the version bumped in your Puppetfile. + +## The Puppetfile + +Every Puppet repository that uses Librarian-puppet will have a file named +`Puppetfile` in the root directory of that repository. The full specification +for which modules your puppet infrastructure repository depends goes in here. + +### Example Puppetfile + + forge "http://forge.puppetlabs.com" + + mod "puppetlabs/razor" + mod "puppetlabs/ntp", "0.0.3" + + mod "apt", + :git => "git://github.com/puppetlabs/puppetlabs-apt.git" + + mod "stdlib", + :git => "git://github.com/puppetlabs/puppetlabs-stdlib.git" + +*See [jenkins-appliance](https://github.com/aussielunix/jenkins-appliance) for +a puppet repo already setup to use librarian-puppet.* + +### Puppetfile Breakdown + + forge "http://forge.puppetlabs.com" + +This declares that we want to use the official Puppet Labs Forge as our default +source when pulling down modules. If you run your own local forge, you may +want to change this. + + mod "puppetlabs/razor" + +Pull in the latest version of the Puppet Labs Razor module from the default +source. + + mod "puppetlabs/ntp", "0.0.3" + +Pull in version 0.0.3 of the Puppet Labs NTP module from the default source. + + mod "apt", + :git => "git://github.com/puppetlabs/puppetlabs-apt.git" + +Our puppet infrastructure repository depends on the `apt` module from the +Puppet Labs GitHub repos and checks out the `master` branch. + + mod "apt", + :git => "git://github.com/puppetlabs/puppetlabs-apt.git" + :ref => '0.0.3' + +Our puppet infrastructure repository depends on the `apt` module from the +Puppet Labs GitHub repos and checks out a tag of `0.0.3`. + + mod "apt", + :git => "git://github.com/puppetlabs/puppetlabs-apt.git" + :ref => 'feature/master/dans_refactor' + +Our puppet infrastructure repository depends on the `apt` module from the +Puppet Labs GitHub repos and checks out the `dans_refactor` branch. + +When using a Git source, we do not have to use a `:ref =>`. +If we do not, then librarian-puppet will assume we meant the `master` branch. + +If we use a `:ref =>`, we can use anything that Git will recognize as a ref. +This includes any branch name, tag name, SHA, or SHA unique prefix. If we use a +branch, we can later ask Librarian-pupet to update the modulek by fetching the +most recent version of the module from that same branch. + +The Git source also supports a `:path =>` option. If we use the path option, +Librarian-puppet will navigate down into the Git repository and only use the +specified subdirectory. Some people have the habit of having a single repository +with many modules in it. If we need a module from such a repository, we can +use the `:path =>` option here to help Librarian-puppet drill down and find the +module subdirectory. + + mod "apt", + :git => "git://github.com/fake/puppet-modules.git" + :path => "modules/apt" + +Our puppet infrastructure repository depends on the `apt` module, which we have +stored as a directory under our `puppet-modules` git repos. + +## How to Use + +Install librarian-puppet: + + $ gem install --pre librarian-puppet + +Prepare your puppet infrastructure repository: + + $ cd ~/path/to/puppet-inf-repos + $ (git) rm -rf modules + $ librarian-puppet init + +Librarian-puppet takes over your `modules/` directory, and will always +reinstall (if missing) the modules listed the `Puppetfile.lock` into your +`modules/` directory, therefore you do not need your `modules/` directory to be +tracked in Git. + +Librarian-puppet uses a `.tmp/` directory for tempfiles and caches. You should +not track this directory in Git. + +Running `librarian-puppet init` will create a skeleton Puppetfile for you as +well as adding `tmp/` and `modules/` to your `.gitignore`. + + $ librarian-puppet install [--clean] [--verbose] + +This command looks at each `mod` declaration and fetches the module from the +source specified. This command writes the complete resolution into +`Puppetfile.lock` and then copies all of the fetched modules into your +`modules/` directory, overwriting whatever was there before. + +Get an overview of your `Puppetfile.lock` with: + + $ librarian-puppet show + +Inspect the details of specific resolved dependencies with: + + $ librarian-puppet show NAME1 [NAME2, ...] + +Find out which dependencies are outdated and may be updated: + + $ librarian-puppet outdated [--verbose] + +Update the version of a dependency: + + $ librarian-puppet update apt [--verbose] + $ git diff Puppetfile.lock + $ git add Puppetfile.lock + $ git commit -m "bumped the version of apt up to 0.0.4." + +## How to Contribute + + * Pull requests please. + * Bonus points for feature branches. + +## Reporting Issues + +Bug reports to the github issue tracker please. +Please include: + + * relevant `Puppetfile` and `Puppetfile.lock` files. + * version of ruby, librarian-puppet + * What distro + * Please run the `librarian-puppet` commands in verbose mode by using the + `--verbose` flag, and include the verbose output in the bug report as well. + +## License +Please see the [LICENSE](https://github.com/rodjek/librarian-puppet/blob/master/LICENSE) +file.