diff --git a/.fixtures.yml b/.fixtures.yml new file mode 100644 index 000000000..6cc7d98f2 --- /dev/null +++ b/.fixtures.yml @@ -0,0 +1,6 @@ +fixtures: + repositories: + apt: git://github.com/puppetlabs/puppetlabs-apt.git + stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git + symlinks: + docker: "#{source_dir}" diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..12c29e7d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +pkg +spec/fixtures diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..c725b57f9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,11 @@ +--- +language: ruby +rvm: +- 1.9.2 +- 1.9.3 +- 1.8.7 +script: bundle exec rake spec +env: + matrix: + - PUPPET_VERSION=2.7.18 + - PUPPET_VERSION=3.1.0 diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..f8155d36a --- /dev/null +++ b/Gemfile @@ -0,0 +1,15 @@ +source "http://rubygems.org" + +if ENV.key?('PUPPET_VERSION') + puppetversion = "= #{ENV['PUPPET_VERSION']}" +else + puppetversion = ['~> 2.7'] +end + +gem "rake" +gem "puppet", puppetversion +gem "puppet-lint" +gem "rspec-puppet" +gem "puppetlabs_spec_helper" +gem "travis" +gem "travis-lint" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..206361f37 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,80 @@ +GEM + remote: http://rubygems.org/ + specs: + addressable (2.3.3) + backports (2.8.2) + coderay (1.0.9) + diff-lcs (1.2.1) + facter (1.6.18) + faraday (0.8.7) + multipart-post (~> 1.1) + faraday_middleware (0.9.0) + faraday (>= 0.7.4, < 0.9) + gh (0.9.1) + addressable + backports (~> 2.3) + faraday (~> 0.8) + multi_json (~> 1.0) + net-http-persistent (>= 2.7) + net-http-pipeline + hashr (0.0.22) + highline (1.6.16) + launchy (2.2.0) + addressable (~> 2.3) + metaclass (0.0.1) + method_source (0.8.1) + mocha (0.13.3) + metaclass (~> 0.0.1) + multi_json (1.7.2) + multipart-post (1.2.0) + net-http-persistent (2.8) + net-http-pipeline (1.0.1) + netrc (0.7.7) + pry (0.9.12) + coderay (~> 1.0.5) + method_source (~> 0.8) + slop (~> 3.4) + puppet (2.7.21) + facter (~> 1.5) + puppet-lint (0.3.2) + puppetlabs_spec_helper (0.4.1) + mocha (>= 0.10.5) + rake + rspec (>= 2.9.0) + rspec-puppet (>= 0.1.1) + rake (10.0.4) + rspec (2.13.0) + rspec-core (~> 2.13.0) + rspec-expectations (~> 2.13.0) + rspec-mocks (~> 2.13.0) + rspec-core (2.13.1) + rspec-expectations (2.13.0) + diff-lcs (>= 1.1.3, < 2.0) + rspec-mocks (2.13.0) + rspec-puppet (0.1.6) + rspec + slop (3.4.4) + travis (1.2.0) + backports (~> 2.6) + faraday (~> 0.8) + faraday_middleware (~> 0.9) + gh (~> 0.9) + highline (~> 1.6) + launchy (~> 2.1) + net-http-persistent (~> 2.8) + netrc (~> 0.7) + pry (~> 0.9) + travis-lint (1.6.0) + hashr (~> 0.0.22) + +PLATFORMS + ruby + +DEPENDENCIES + puppet (~> 2.7) + puppet-lint + puppetlabs_spec_helper + rake + rspec-puppet + travis + travis-lint diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..bf023233a --- /dev/null +++ b/LICENSE @@ -0,0 +1,207 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, and + distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by the + copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all other + entities that control, are controlled by, or are under common control with + that entity. For the purposes of this definition, "control" means (i) the + power, direct or indirect, to cause the direction or management of such + entity, whether by contract or otherwise, or (ii) ownership of + fifty percent (50%) or more of the outstanding shares, or (iii) beneficial + ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity exercising + permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation source, + and configuration files. + + "Object" form shall mean any form resulting from mechanical transformation + or translation of a Source form, including but not limited to compiled + object code, generated documentation, and conversions to + other media types. + + "Work" shall mean the work of authorship, whether in Source or Object + form, made available under the License, as indicated by a copyright notice + that is included in or attached to the work (an example is provided in the + Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object form, + that is based on (or derived from) the Work and for which the editorial + revisions, annotations, elaborations, or other modifications represent, + as a whole, an original work of authorship. For the purposes of this + License, Derivative Works shall not include works that remain separable + from, or merely link (or bind by name) to the interfaces of, the Work and + Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including the original + version of the Work and any modifications or additions to that Work or + Derivative Works thereof, that is intentionally submitted to Licensor for + inclusion in the Work by the copyright owner or by an individual or + Legal Entity authorized to submit on behalf of the copyright owner. + For the purposes of this definition, "submitted" means any form of + electronic, verbal, or written communication sent to the Licensor or its + representatives, including but not limited to communication on electronic + mailing lists, source code control systems, and issue tracking systems + that are managed by, or on behalf of, the Licensor for the purpose of + discussing and improving the Work, but excluding communication that is + conspicuously marked or otherwise designated in writing by the copyright + owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity on + behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. + + Subject to the terms and conditions of this License, each Contributor + hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable copyright license to reproduce, prepare + Derivative Works of, publicly display, publicly perform, sublicense, + and distribute the Work and such Derivative Works in + Source or Object form. + +3. Grant of Patent License. + + Subject to the terms and conditions of this License, each Contributor + hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable (except as stated in this section) patent + license to make, have made, use, offer to sell, sell, import, and + otherwise transfer the Work, where such license applies only to those + patent claims licensable by such Contributor that are necessarily + infringed by their Contribution(s) alone or by combination of their + Contribution(s) with the Work to which such Contribution(s) was submitted. + If You institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work or a + Contribution incorporated within the Work constitutes direct or + contributory patent infringement, then any patent licenses granted to + You under this License for that Work shall terminate as of the date such + litigation is filed. + +4. Redistribution. + + You may reproduce and distribute copies of the Work or Derivative Works + thereof in any medium, with or without modifications, and in Source or + Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a + copy of this License; and + + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + + 3. You must retain, in the Source form of any Derivative Works that You + distribute, all copyright, patent, trademark, and attribution notices from + the Source form of the Work, excluding those notices that do not pertain + to any part of the Derivative Works; and + + 4. If the Work includes a "NOTICE" text file as part of its distribution, + then any Derivative Works that You distribute must include a readable copy + of the attribution notices contained within such NOTICE file, excluding + those notices that do not pertain to any part of the Derivative Works, + in at least one of the following places: within a NOTICE text file + distributed as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, within a + display generated by the Derivative Works, if and wherever such + third-party notices normally appear. The contents of the NOTICE file are + for informational purposes only and do not modify the License. + You may add Your own attribution notices within Derivative Works that You + distribute, alongside or as an addendum to the NOTICE text from the Work, + provided that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and may + provide additional or different license terms and conditions for use, + reproduction, or distribution of Your modifications, or for any such + Derivative Works as a whole, provided Your use, reproduction, and + distribution of the Work otherwise complies with the conditions + stated in this License. + +5. Submission of Contributions. + + Unless You explicitly state otherwise, any Contribution intentionally + submitted for inclusion in the Work by You to the Licensor shall be under + the terms and conditions of this License, without any additional + terms or conditions. Notwithstanding the above, nothing herein shall + supersede or modify the terms of any separate license agreement you may + have executed with Licensor regarding such Contributions. + +6. Trademarks. + + This License does not grant permission to use the trade names, trademarks, + service marks, or product names of the Licensor, except as required for + reasonable and customary use in describing the origin of the Work and + reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + + Unless required by applicable law or agreed to in writing, Licensor + provides the Work (and each Contributor provides its Contributions) + on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied, including, without limitation, any warranties + or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS + FOR A PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any risks + associated with Your exercise of permissions under this License. + +8. Limitation of Liability. + + In no event and under no legal theory, whether in tort + (including negligence), contract, or otherwise, unless required by + applicable law (such as deliberate and grossly negligent acts) or agreed + to in writing, shall any Contributor be liable to You for damages, + including any direct, indirect, special, incidental, or consequential + damages of any character arising as a result of this License or out of + the use or inability to use the Work (including but not limited to damages + for loss of goodwill, work stoppage, computer failure or malfunction, + or any and all other commercial damages or losses), even if such + Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + + While redistributing the Work or Derivative Works thereof, You may choose + to offer, and charge a fee for, acceptance of support, warranty, + indemnity, or other liability obligations and/or rights consistent with + this License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf of any + other Contributor, and only if You agree to indemnify, defend, and hold + each Contributor harmless for any liability incurred by, or claims + asserted against, such Contributor by reason of your accepting any such + warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + + To apply the Apache License to your work, attach the following boilerplate + notice, with the fields enclosed by brackets "[]" replaced with your own + identifying information. (Don't include the brackets!) The text should be + enclosed in the appropriate comment syntax for the file format. We also + recommend that a file or class name and description of purpose be included + on the same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2013 Gareth Rushgrove + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + or implied. See the License for the specific language governing + permissions and limitations under the License. diff --git a/Modulefile b/Modulefile new file mode 100644 index 000000000..ed0ee7128 --- /dev/null +++ b/Modulefile @@ -0,0 +1,10 @@ +name 'garethr-docker' +version '0.0.1' +source 'git://github.com/garethr/garethr-docker.git' +author 'Gareth Rushgrove' +summary 'Module for installing docker from official ppa' +description 'Install the official docker packages' +license 'Apache License, Version 2.0' + +dependency 'puppetlabs/apt', '>= 1.1.0' +dependency 'puppetlabs/stdlib', '>=3.2.0' diff --git a/README.md b/README.md new file mode 100644 index 000000000..75116c15d --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +Puppet module for installing +[Docker](https://github.com/dotcloud/docker) from the [official PPA](https://launchpad.net/~dotcloud/+archive/lxc-docker). + +This module is also available on the [Puppet +Forge](https://forge.puppetlabs.com/garethr/docker) + +[![Build +Status](https://secure.travis-ci.org/garethr/garethr-docker.png)](http://travis-ci.org/garethr/garethr-docker) + +## Usage + +The module includes a single class: + + include 'docker' + +By default this sets up the PPA and installs the lxc-docker package. diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..bb968be71 --- /dev/null +++ b/Rakefile @@ -0,0 +1,5 @@ +require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet-lint/tasks/puppet-lint' + +PuppetLint.configuration.send("disable_80chars") +PuppetLint.configuration.log_format = "%{path}:%{linenumber}:%{check}:%{KIND}:%{message}" diff --git a/manifests/init.pp b/manifests/init.pp new file mode 100644 index 000000000..86e5defe6 --- /dev/null +++ b/manifests/init.pp @@ -0,0 +1,25 @@ +# == Class: docker +# +# Module to install an up-to-date version of Docker from the +# official PPA. The use of the PPA means this only works +# on Ubuntu. +# +# === Parameters +# [*version*] +# The package version to install, passed to ensure. +# Defaults to present. +# +class docker( + $version = 'present', +) { + include apt + validate_string($version) + validate_re($::osfamily, '^Debian$', 'This module uses PPA repos and only works with Debian based distros') + + apt::ppa { 'ppa:dotcloud/lxc-docker': } + + package { 'lxc-docker': + ensure => $version, + require => Apt::Ppa['ppa:dotcloud/docker'], + } +} diff --git a/spec/classes/docker_spec.rb b/spec/classes/docker_spec.rb new file mode 100644 index 000000000..4a45e2ba4 --- /dev/null +++ b/spec/classes/docker_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe 'docker', :type => :class do + let(:facts) { {:osfamily => 'Debian', :lsbdistcodename => 'precise'} } + + context 'with no parameters' do + it { should include_class('apt') } + it { should contain_package('lxc-docker').with_ensure('present') } + it { should contain_apt__ppa('ppa:dotcloud/lxc-docker') } + end + + context 'with a custom version' do + let(:params) { {'version' => 'absent' } } + it { should contain_package('lxc-docker').with_ensure('absent') } + end + + context 'with an invalid distro name' do + let(:facts) { {:osfamily => 'RedHat'} } + it do + expect { + should contain_package('lxc-docker') + }.to raise_error(Puppet::Error, /This module uses PPA repos/) + end + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 000000000..2c6f56649 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1 @@ +require 'puppetlabs_spec_helper/module_spec_helper' diff --git a/tests/base.pp b/tests/base.pp new file mode 100644 index 000000000..92ee30d57 --- /dev/null +++ b/tests/base.pp @@ -0,0 +1 @@ +include 'docker'