From 7f9e2b38fe31cd0efe1c5e74ec9843d6bbcc56c6 Mon Sep 17 00:00:00 2001 From: Paul Czarkowski Date: Sun, 24 Mar 2013 22:10:05 -0500 Subject: [PATCH 1/5] added yum repo --- .gitignore | 1 + README.md | 9 ++- Vagrantfile | 40 +------------ Vagrantfile.centos63 | 39 +++++++++++++ Vagrantfile.precise64 | 39 +++++++++++++ provision/manifests/default.pp | 3 + provision/modules/repository/files/index.html | 9 +++ .../modules/repository/files/sandbox.repo | 5 ++ .../modules/repository/files/yum-repo.conf | 7 +++ .../repository/manifests/client-yum.pp | 13 +++++ .../modules/repository/manifests/client.pp | 17 ++++++ .../modules/repository/manifests/init.pp | 1 + .../repository/manifests/server-yum.pp | 58 +++++++++++++++++++ .../modules/repository/manifests/server.pp | 19 ++++++ .../repository/templates/index.html.erb | 9 +++ .../repository/templates/yum-repo.conf.erb | 7 +++ 16 files changed, 236 insertions(+), 40 deletions(-) mode change 100644 => 120000 Vagrantfile create mode 100644 Vagrantfile.centos63 create mode 100644 Vagrantfile.precise64 create mode 100644 provision/modules/repository/files/index.html create mode 100644 provision/modules/repository/files/sandbox.repo create mode 100644 provision/modules/repository/files/yum-repo.conf create mode 100644 provision/modules/repository/manifests/client-yum.pp create mode 100644 provision/modules/repository/manifests/client.pp create mode 100644 provision/modules/repository/manifests/init.pp create mode 100644 provision/modules/repository/manifests/server-yum.pp create mode 100644 provision/modules/repository/manifests/server.pp create mode 100644 provision/modules/repository/templates/index.html.erb create mode 100644 provision/modules/repository/templates/yum-repo.conf.erb diff --git a/.gitignore b/.gitignore index e9a7b8a..c1f9a24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ nodes.pp modules/* .vagrant +repository/yum/* diff --git a/README.md b/README.md index 10a6ec8..ad7986a 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ should be good to clone this repo and go: If you want a CentOS base box to work from, I highly recommend the boxes published by Jan Vansteenkiste: http://packages.vstone.eu/vagrant-boxes/ +The Vagrantfile is a symlink to either Vagrantfile.precise64 or Vagrantfile.centos63. + Initial Startup --------------- @@ -101,7 +103,7 @@ be picked up immediately. To have your module actually applied to one or more of the nodes, edit the `nodes.pp` file and include your classes...that's it! -Check Your Handiwork +Check Your Handywork -------------------- To log on to the virtual machines and see the result of your applied Puppet @@ -116,6 +118,11 @@ the agent daemon, you can easily force a manual run: [vagrant@client1 ~]$ sudo puppet agent --test +Package Repositories +-------------------- + +A local YUM repo `sandbox` is configured on the puppet server. Copy RPM files into `repository/yum` and then the next run of puppet will refresh the yum repository ... if the puppet VM is already up you can run `vagrant provision puppet` to refresh it. + License ======= diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index b42906f..0000000 --- a/Vagrantfile +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -domain = 'example.com' - -puppet_nodes = [ - {:hostname => 'puppet', :ip => '172.16.32.10', :box => 'precise64', :fwdhost => 8140, :fwdguest => 8140, :ram => 512}, - {:hostname => 'client1', :ip => '172.16.32.11', :box => 'precise64'}, - {:hostname => 'client2', :ip => '172.16.32.12', :box => 'precise64'}, -] - -Vagrant.configure("2") do |config| - puppet_nodes.each do |node| - config.vm.define node[:hostname] do |node_config| - node_config.vm.box = node[:box] - node_config.vm.box_url = 'http://files.vagrantup.com/' + node_config.vm.box + '.box' - node_config.vm.hostname = node[:hostname] + '.' + domain - node_config.vm.network :private_network, ip: node[:ip] - - if node[:fwdhost] - node_config.vm.network :forwarded_port, guest: node[:fwdguest], host: node[:fwdhost] - end - - memory = node[:ram] ? node[:ram] : 256; - node_config.vm.provider :virtualbox do |vb| - vb.customize [ - 'modifyvm', :id, - '--name', node[:hostname], - '--memory', memory.to_s - ] - end - - node_config.vm.provision :puppet do |puppet| - puppet.manifests_path = 'provision/manifests' - puppet.module_path = 'provision/modules' - end - end - end -end diff --git a/Vagrantfile b/Vagrantfile new file mode 120000 index 0000000..a4cdb05 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1 @@ +Vagrantfile.centos63 \ No newline at end of file diff --git a/Vagrantfile.centos63 b/Vagrantfile.centos63 new file mode 100644 index 0000000..438b687 --- /dev/null +++ b/Vagrantfile.centos63 @@ -0,0 +1,39 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +domain = 'example.com' + +puppet_nodes = [ + {:hostname => 'puppet', :ip => '172.16.32.10', :box => 'centos63', :fwdhost => 8140, :fwdguest => 8140, :ram => 512}, + {:hostname => 'client1', :ip => '172.16.32.11', :box => 'centos63'}, + {:hostname => 'client2', :ip => '172.16.32.12', :box => 'centos63'}, +] + +Vagrant.configure("2") do |config| + puppet_nodes.each do |node| + config.vm.define node[:hostname] do |node_config| + node_config.vm.box = node[:box] + node_config.vm.box_url = 'http://files.vagrantup.com/' + node_config.vm.box + '.box' + node_config.vm.hostname = node[:hostname] + '.' + domain + node_config.vm.network :private_network, ip: node[:ip] + + if node[:fwdhost] + node_config.vm.network :forwarded_port, guest: node[:fwdguest], host: node[:fwdhost] + end + + memory = node[:ram] ? node[:ram] : 256; + node_config.vm.provider :virtualbox do |vb| + vb.customize [ + 'modifyvm', :id, + '--name', node[:hostname], + '--memory', memory.to_s + ] + end + + node_config.vm.provision :puppet do |puppet| + puppet.manifests_path = 'provision/manifests' + puppet.module_path = 'provision/modules' + end + end + end +end diff --git a/Vagrantfile.precise64 b/Vagrantfile.precise64 new file mode 100644 index 0000000..b42906f --- /dev/null +++ b/Vagrantfile.precise64 @@ -0,0 +1,39 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +domain = 'example.com' + +puppet_nodes = [ + {:hostname => 'puppet', :ip => '172.16.32.10', :box => 'precise64', :fwdhost => 8140, :fwdguest => 8140, :ram => 512}, + {:hostname => 'client1', :ip => '172.16.32.11', :box => 'precise64'}, + {:hostname => 'client2', :ip => '172.16.32.12', :box => 'precise64'}, +] + +Vagrant.configure("2") do |config| + puppet_nodes.each do |node| + config.vm.define node[:hostname] do |node_config| + node_config.vm.box = node[:box] + node_config.vm.box_url = 'http://files.vagrantup.com/' + node_config.vm.box + '.box' + node_config.vm.hostname = node[:hostname] + '.' + domain + node_config.vm.network :private_network, ip: node[:ip] + + if node[:fwdhost] + node_config.vm.network :forwarded_port, guest: node[:fwdguest], host: node[:fwdhost] + end + + memory = node[:ram] ? node[:ram] : 256; + node_config.vm.provider :virtualbox do |vb| + vb.customize [ + 'modifyvm', :id, + '--name', node[:hostname], + '--memory', memory.to_s + ] + end + + node_config.vm.provision :puppet do |puppet| + puppet.manifests_path = 'provision/manifests' + puppet.module_path = 'provision/modules' + end + end + end +end diff --git a/provision/manifests/default.pp b/provision/manifests/default.pp index d820c12..c137255 100644 --- a/provision/manifests/default.pp +++ b/provision/manifests/default.pp @@ -12,4 +12,7 @@ if $hostname == 'puppet' { class { 'puppet::server': } + class { 'repository::server': } +} else { + class { 'repository::client': stage => 'pre' } } diff --git a/provision/modules/repository/files/index.html b/provision/modules/repository/files/index.html new file mode 100644 index 0000000..dd1a2cd --- /dev/null +++ b/provision/modules/repository/files/index.html @@ -0,0 +1,9 @@ + + + Sandbox YUM Repo + + + Sandbox YUM Repo + + + \ No newline at end of file diff --git a/provision/modules/repository/files/sandbox.repo b/provision/modules/repository/files/sandbox.repo new file mode 100644 index 0000000..a696c97 --- /dev/null +++ b/provision/modules/repository/files/sandbox.repo @@ -0,0 +1,5 @@ +[sandbox] +name=sandbox +baseurl=http://puppet/ +enabled=1 +gpgcheck=0 \ No newline at end of file diff --git a/provision/modules/repository/files/yum-repo.conf b/provision/modules/repository/files/yum-repo.conf new file mode 100644 index 0000000..987b73b --- /dev/null +++ b/provision/modules/repository/files/yum-repo.conf @@ -0,0 +1,7 @@ + + ServerAdmin webmaster@dummy-host.example.com + DocumentRoot /vagrant/repository/yum/ + ServerName dummy-host.example.com + ErrorLog logs/dummy-host.example.com-error_log + CustomLog logs/dummy-host.example.com-access_log common + diff --git a/provision/modules/repository/manifests/client-yum.pp b/provision/modules/repository/manifests/client-yum.pp new file mode 100644 index 0000000..e81669b --- /dev/null +++ b/provision/modules/repository/manifests/client-yum.pp @@ -0,0 +1,13 @@ +class repository::client-yum { + + file { 'sandbox.repo': + ensure => present, + path => '/etc/yum.repos.d/sandbox.repo', + owner => root, + group => root, + mode => '0644', + replace => true, + source => 'puppet:///modules/repository/sandbox.repo', + } + +} diff --git a/provision/modules/repository/manifests/client.pp b/provision/modules/repository/manifests/client.pp new file mode 100644 index 0000000..6814313 --- /dev/null +++ b/provision/modules/repository/manifests/client.pp @@ -0,0 +1,17 @@ +# class repository::client + +class repository::client { + + case $::osfamily { + 'redhat': { + class { 'repository::client-yum': } + } +## 'debian': { +## class { 'repository::client-apt': } +## } + default: { + fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") + } + } + +} \ No newline at end of file diff --git a/provision/modules/repository/manifests/init.pp b/provision/modules/repository/manifests/init.pp new file mode 100644 index 0000000..35cd5d2 --- /dev/null +++ b/provision/modules/repository/manifests/init.pp @@ -0,0 +1 @@ +class repository {} \ No newline at end of file diff --git a/provision/modules/repository/manifests/server-yum.pp b/provision/modules/repository/manifests/server-yum.pp new file mode 100644 index 0000000..ef98a2e --- /dev/null +++ b/provision/modules/repository/manifests/server-yum.pp @@ -0,0 +1,58 @@ +# == Class: repository::server::yum +# +# +class repository::server-yum { + +# Gimme some apache! + package { 'httpd': + ensure => 'present'; + } + + package { 'createrepo': + ensure => 'present', + notify => Exec["yum_createrepo"], + } + + file { 'yum-repo.conf': + ensure => present, + path => '/etc/httpd/conf.d/yum-repo.conf', + owner => root, + group => root, + mode => '0644', + replace => true, + source => 'puppet:///modules/repository/yum-repo.conf', + } + + + file { '/vagrant/repository/yum': + path => '/vagrant/repository/yum', + ensure => directory, + owner => root, + group => root, + mode => '0644', + recurse => true, + notify => Exec['yum_createrepo'], + } + + file { 'index.html': + ensure => present, + path => '/vagrant/repository/yum/index.html', + owner => root, + group => root, + mode => '0644', + replace => true, + source => 'puppet:///modules/repository/index.html', + } + + exec { 'yum_createrepo': + command => '/usr/bin/createrepo /vagrant/repository/yum', + refreshonly => true, + } + + service { "httpd": + ensure => "running", + subscribe => File["yum-repo.conf"], + } + +} + diff --git a/provision/modules/repository/manifests/server.pp b/provision/modules/repository/manifests/server.pp new file mode 100644 index 0000000..eca719f --- /dev/null +++ b/provision/modules/repository/manifests/server.pp @@ -0,0 +1,19 @@ +# class repository::server + +class repository::server { + + #include repository::server-yum + #include repository::server-apt + + case $::osfamily { + 'redhat': { + class { 'repository::server-yum': } + } +## 'debian': { +## class { 'repository::server::apt': } +## } + default: { + fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") + } + } +} \ No newline at end of file diff --git a/provision/modules/repository/templates/index.html.erb b/provision/modules/repository/templates/index.html.erb new file mode 100644 index 0000000..dd1a2cd --- /dev/null +++ b/provision/modules/repository/templates/index.html.erb @@ -0,0 +1,9 @@ + + + Sandbox YUM Repo + + + Sandbox YUM Repo + + + \ No newline at end of file diff --git a/provision/modules/repository/templates/yum-repo.conf.erb b/provision/modules/repository/templates/yum-repo.conf.erb new file mode 100644 index 0000000..987b73b --- /dev/null +++ b/provision/modules/repository/templates/yum-repo.conf.erb @@ -0,0 +1,7 @@ + + ServerAdmin webmaster@dummy-host.example.com + DocumentRoot /vagrant/repository/yum/ + ServerName dummy-host.example.com + ErrorLog logs/dummy-host.example.com-error_log + CustomLog logs/dummy-host.example.com-access_log common + From 19344f8fe0b125b2907a83c733efb858e0425f98 Mon Sep 17 00:00:00 2001 From: Paul Czarkowski Date: Sun, 24 Mar 2013 23:11:07 -0500 Subject: [PATCH 2/5] removed error message on ubuntu --- Vagrantfile | 2 +- provision/modules/repository/manifests/client.pp | 2 +- provision/modules/repository/manifests/server.pp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index a4cdb05..15e9028 120000 --- a/Vagrantfile +++ b/Vagrantfile @@ -1 +1 @@ -Vagrantfile.centos63 \ No newline at end of file +Vagrantfile.precise64 \ No newline at end of file diff --git a/provision/modules/repository/manifests/client.pp b/provision/modules/repository/manifests/client.pp index 6814313..73cda9d 100644 --- a/provision/modules/repository/manifests/client.pp +++ b/provision/modules/repository/manifests/client.pp @@ -10,7 +10,7 @@ ## class { 'repository::client-apt': } ## } default: { - fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") + #fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") } } diff --git a/provision/modules/repository/manifests/server.pp b/provision/modules/repository/manifests/server.pp index eca719f..50e4379 100644 --- a/provision/modules/repository/manifests/server.pp +++ b/provision/modules/repository/manifests/server.pp @@ -13,7 +13,7 @@ ## class { 'repository::server::apt': } ## } default: { - fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") + #fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") } } } \ No newline at end of file From 919b374e255719476b8e678076dcca274dfc4371 Mon Sep 17 00:00:00 2001 From: Paul Czarkowski Date: Thu, 28 Mar 2013 10:14:02 -0500 Subject: [PATCH 3/5] fixed .gitignore --- .gitignore | 1 + repository/yum/README.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 repository/yum/README.md diff --git a/.gitignore b/.gitignore index c1f9a24..ced1019 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ nodes.pp modules/* .vagrant repository/yum/* +!repository/yum/README.md diff --git a/repository/yum/README.md b/repository/yum/README.md new file mode 100644 index 0000000..08c3651 --- /dev/null +++ b/repository/yum/README.md @@ -0,0 +1 @@ +# RPMs go here From e597fff6cb4dfd1a9a63b30ef7f5c4d2a5e2ea9d Mon Sep 17 00:00:00 2001 From: Paul Czarkowski Date: Sun, 7 Apr 2013 16:45:30 -0500 Subject: [PATCH 4/5] added initial fpm server --- Vagrantfile | 2 +- Vagrantfile.centos63 | 1 + Vagrantfile.precise64 | 1 + provision/manifests/default.pp | 2 ++ provision/modules/fpm/manifests/centos.pp | 28 +++++++++++++++++++ provision/modules/fpm/manifests/debian.pp | 19 +++++++++++++ provision/modules/fpm/manifests/init.pp | 14 ++++++++++ .../modules/networking/templates/hosts.erb | 1 + 8 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 provision/modules/fpm/manifests/centos.pp create mode 100644 provision/modules/fpm/manifests/debian.pp create mode 100644 provision/modules/fpm/manifests/init.pp diff --git a/Vagrantfile b/Vagrantfile index 15e9028..a4cdb05 120000 --- a/Vagrantfile +++ b/Vagrantfile @@ -1 +1 @@ -Vagrantfile.precise64 \ No newline at end of file +Vagrantfile.centos63 \ No newline at end of file diff --git a/Vagrantfile.centos63 b/Vagrantfile.centos63 index 438b687..5a09393 100644 --- a/Vagrantfile.centos63 +++ b/Vagrantfile.centos63 @@ -4,6 +4,7 @@ domain = 'example.com' puppet_nodes = [ + {:hostname => 'fpm', :ip => '172.16.32.9', :box => 'centos63'}, {:hostname => 'puppet', :ip => '172.16.32.10', :box => 'centos63', :fwdhost => 8140, :fwdguest => 8140, :ram => 512}, {:hostname => 'client1', :ip => '172.16.32.11', :box => 'centos63'}, {:hostname => 'client2', :ip => '172.16.32.12', :box => 'centos63'}, diff --git a/Vagrantfile.precise64 b/Vagrantfile.precise64 index b42906f..1124cb8 100644 --- a/Vagrantfile.precise64 +++ b/Vagrantfile.precise64 @@ -4,6 +4,7 @@ domain = 'example.com' puppet_nodes = [ + {:hostname => 'fpm', :ip => '172.16.32.9', :box => 'precise64'}, {:hostname => 'puppet', :ip => '172.16.32.10', :box => 'precise64', :fwdhost => 8140, :fwdguest => 8140, :ram => 512}, {:hostname => 'client1', :ip => '172.16.32.11', :box => 'precise64'}, {:hostname => 'client2', :ip => '172.16.32.12', :box => 'precise64'}, diff --git a/provision/manifests/default.pp b/provision/manifests/default.pp index c137255..4ffda8e 100644 --- a/provision/manifests/default.pp +++ b/provision/manifests/default.pp @@ -13,6 +13,8 @@ if $hostname == 'puppet' { class { 'puppet::server': } class { 'repository::server': } +} elsif $hostname == 'fpm' { + class { 'fpm': } } else { class { 'repository::client': stage => 'pre' } } diff --git a/provision/modules/fpm/manifests/centos.pp b/provision/modules/fpm/manifests/centos.pp new file mode 100644 index 0000000..6bf7d97 --- /dev/null +++ b/provision/modules/fpm/manifests/centos.pp @@ -0,0 +1,28 @@ +#yum -y install ruby rubygems ruby-devel make gcc rpm-build git +# gem install fpm + +class fpm::centos { + package { 'ruby-devel': + ensure => 'present', + } + package { 'rubygems': + ensure => 'present', + } + package { 'make': + ensure => 'present', + } + package { 'gcc': + ensure => 'present', + } + package { 'rpm-build': + ensure => 'present', + } + package { 'git': + ensure => 'present', + } + package { 'fpm': + ensure => 'present', + provider => 'gem', + require => [ Package["rubygems"], Package["ruby-devel"] ], + } +} \ No newline at end of file diff --git a/provision/modules/fpm/manifests/debian.pp b/provision/modules/fpm/manifests/debian.pp new file mode 100644 index 0000000..18f14f8 --- /dev/null +++ b/provision/modules/fpm/manifests/debian.pp @@ -0,0 +1,19 @@ +class fpm::debian { + package { 'rubygems': + ensure => 'present', + } + package { 'make': + ensure => 'present', + } + package { 'gcc': + ensure => 'present', + } + package { 'git': + ensure => 'present', + } + package { 'fpm': + ensure => 'present', + provider => 'gem', + require => Package["rubygems"], + } +} \ No newline at end of file diff --git a/provision/modules/fpm/manifests/init.pp b/provision/modules/fpm/manifests/init.pp new file mode 100644 index 0000000..9a6b7d9 --- /dev/null +++ b/provision/modules/fpm/manifests/init.pp @@ -0,0 +1,14 @@ +class fpm { + case $::osfamily { + 'redhat': { + class { 'fpm::centos': } + } + 'debian': { + class { 'fpm::debian': } + } + default: { + #fail("Module '${module_name}' is not currently supported by Puppet Sandbox on ${::operatingsystem}") + } + } + +} \ No newline at end of file diff --git a/provision/modules/networking/templates/hosts.erb b/provision/modules/networking/templates/hosts.erb index d353e2c..ac9db6d 100644 --- a/provision/modules/networking/templates/hosts.erb +++ b/provision/modules/networking/templates/hosts.erb @@ -1,6 +1,7 @@ 127.0.0.1 localhost 127.0.1.1 <%= fqdn %> +172.16.32.9 fpm.<%= domain %> fpm 172.16.32.10 puppet.<%= domain %> puppet 172.16.32.11 client1.<%= domain %> client1 172.16.32.12 client2.<%= domain %> client2 From d6c9196f8703bbcd41a59bf7c063694d402da499 Mon Sep 17 00:00:00 2001 From: Paul Czarkowski Date: Sun, 7 Apr 2013 17:43:44 -0500 Subject: [PATCH 5/5] cleaned repository, added fpm example scripts, and updated README.md on usage --- .gitignore | 4 +- README.md | 36 ++++++++++- {repository/yum => packages/rpm}/README.md | 0 .../modules/fpm/files/elasticsearch-rpm.sh | 63 +++++++++++++++++++ provision/modules/fpm/files/redis-rpm.sh | 33 ++++++++++ provision/modules/fpm/manifests/centos.pp | 21 +++++++ .../modules/repository/files/yum-repo.conf | 2 +- .../repository/manifests/server-yum.pp | 16 ++--- 8 files changed, 161 insertions(+), 14 deletions(-) rename {repository/yum => packages/rpm}/README.md (100%) create mode 100755 provision/modules/fpm/files/elasticsearch-rpm.sh create mode 100755 provision/modules/fpm/files/redis-rpm.sh diff --git a/.gitignore b/.gitignore index ced1019..f9d66e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ nodes.pp modules/* .vagrant -repository/yum/* -!repository/yum/README.md +packages/rpm/* +!packages/rpm/README.md diff --git a/README.md b/README.md index ad7986a..e608503 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,10 @@ environment and tools. Puppet Sandbox will set up three separate virtual machines: -* _puppet.example.com_ - the Puppet master server +* _puppet.example.com_ - the Puppet master server * _client1.example.com_ - the first Puppet client machine * _client2.example.com_ - the second Puppet client machine +* _fpm.example.com_ - package building machine These VMs can be used in conjunction to segregate and test your modules based on node roles, Puppet environments, etc. You can even test modules @@ -53,6 +54,7 @@ should be good to clone this repo and go: If you want a CentOS base box to work from, I highly recommend the boxes published by Jan Vansteenkiste: http://packages.vstone.eu/vagrant-boxes/ +if using other CentOS boxes watch out for iptables being turned on by default. The Vagrantfile is a symlink to either Vagrantfile.precise64 or Vagrantfile.centos63. @@ -103,7 +105,7 @@ be picked up immediately. To have your module actually applied to one or more of the nodes, edit the `nodes.pp` file and include your classes...that's it! -Check Your Handywork +Check Your Handiwork -------------------- To log on to the virtual machines and see the result of your applied Puppet @@ -118,10 +120,38 @@ the agent daemon, you can easily force a manual run: [vagrant@client1 ~]$ sudo puppet agent --test + Package Repositories -------------------- -A local YUM repo `sandbox` is configured on the puppet server. Copy RPM files into `repository/yum` and then the next run of puppet will refresh the yum repository ... if the puppet VM is already up you can run `vagrant provision puppet` to refresh it. +A local YUM repo `sandbox` is configured on the puppet server. Copy RPM files into `/vagrant/packages/rpm` and then run `vagrant provision puppet` to refresh the repo. Currently only supports RPM/YUM but will add APT support some time soon. + +Building Packages +----------------- + +FPM is installed on the fpm host. This is an excellent tool for building OS packages where writing specfiles gets painful. FPM allows you to create RPM or APT packages from source, or from a directory with all the apps installed. Check the example redis or elasticsearch scripts on the FPM system under /tmp/ for examples of building packages using FPM. Saving the resultant RPM to `/vagrant/packages/rpm` and run `vagrant provision puppet` will make it immediately available to client1,client2 for installation. + +Example Package Building and Usage +---------------------------------- + + $ vagrant up puppet fpm client1 + $ vagrant ssh fpm + [vagrant@fpm ~]$ sudo /tmp/redis-rpm.sh + ... + ... + [vagrant@fpm ~]$ exit + $ vagrant provision puppet + $ vagrant ssh client1 + [vagrant@client1 ~]$ sudo yum clean all + [vagrant@client1 ~]$ sudo yum -y install redis + [vagrant@client1 ~]$ sudo service redis-server start + [vagrant@client1 ~]$ redis-cli ping + PONG + [vagrant@client1 ~]$ + + + + License ======= diff --git a/repository/yum/README.md b/packages/rpm/README.md similarity index 100% rename from repository/yum/README.md rename to packages/rpm/README.md diff --git a/provision/modules/fpm/files/elasticsearch-rpm.sh b/provision/modules/fpm/files/elasticsearch-rpm.sh new file mode 100755 index 0000000..e6282f5 --- /dev/null +++ b/provision/modules/fpm/files/elasticsearch-rpm.sh @@ -0,0 +1,63 @@ +#!/bin/bash -x + +#install pre-reqs +#yum -y install java-1.7.0-openjdk + +# ElasticSearch! +VERSION=0.20.5 +PREFIX=/opt +ES_DIR=$PREFIX/elasticsearch +ES_USER=elasticsearch +ULIMIT=80000 + +cd $PREFIX +curl -L -k https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-$VERSION.tar.gz | tar -xz +mv elasticsearch-$VERSION elasticsearch +cd elasticsearch/bin/ +curl -L -k http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz +mv *servicewrapper*/service $ES_DIR/bin/ +mkdir -p $ES_DIR/extras + +$ES_DIR/bin/plugin -install elasticsearch/elasticsearch-river-rabbitmq/1.4.0 +$ES_DIR/bin/plugin -install lukas-vlcek/bigdesk +$ES_DIR/bin/plugin -install karmi/elasticsearch-paramedic +$ES_DIR/bin/plugin -install mobz/elasticsearch-head + +#### GRRRR init script fails when launching as user other than root. too lazy to work out why right now. +#sed -i "s/^.*RUN_AS_USER=.*/RUN_AS_USER=$ES_USER/" /opt/elasticsearch/bin/service/elasticsearch +sed -i "s/^.*ULIMIT_N=.*/ULIMIT_N=$ULIMIT/" /opt/elasticsearch/bin/service/elasticsearch + +cat > $ES_DIR/extras/elasticsearch-post-install.sh << EOF +#!/bin/sh + +adduser $ES_USER +chown -R $ES_USER:$ES_USER $ES_DIR +$ES_DIR/bin/service/elasticsearch install +ln -s `readlink -f $ES_DIR/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch +EOF + +chmod 755 $ES_DIR/extras/elasticsearch-post-install.sh + +cat > $ES_DIR/extras/elasticsearch-pre-uninstall.sh << EOF +#!/bin/sh + +userdel elasticsearch +/opt/elasticsearch/bin/service/elasticsearch remove +rm -f /usr/local/bin/rcelasticsearch +EOF + +chmod 755 $ES_DIR/extras/elasticsearch-pre-uninstall.sh + +cd /vagrant/packages/rpm/ + +fpm -s dir -t rpm -d 'java-1.7.0-openjdk' --post-install "$ES_DIR/extras/elasticsearch-post-install.sh" \ + --pre-uninstall "$ES_DIR/extras/elasticsearch-pre-uninstall.sh" -n "elasticsearch" -v $VERSION $ES_DIR + +# echo ... lets fire it up and see if it works. +#adduser $ES_USER +#chown -R $ES_USER:$ES_USER $ES_DIR +#$ES_DIR/bin/service/elasticsearch install +#ln -s `readlink -f $ES_DIR/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch +#service elasticsearch start +#sleep 5 +#curl http://localhost:9200 diff --git a/provision/modules/fpm/files/redis-rpm.sh b/provision/modules/fpm/files/redis-rpm.sh new file mode 100755 index 0000000..4c8fb4a --- /dev/null +++ b/provision/modules/fpm/files/redis-rpm.sh @@ -0,0 +1,33 @@ +#!/bin/bash -x + +VERSION=2.6.11 +PREFIX=/ + +cd /tmp +curl -L -k http://redis.googlecode.com/files/redis-$VERSION.tar.gz| tar -xz +cd redis-$VERSION +make +# should probably run the test .... +#make test + +mkdir -p /tmp/build-redis-$VERSION/$PREFIX/usr/bin +mkdir -p /tmp/build-redis-$VERSION/$PREFIX/etc/init.d +mkdir -p /tmp/build-redis-$VERSION/$PREFIX/etc/redis + +cp src/{redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,redis-server} /tmp/build-redis-$VERSION/$PREFIX/usr/bin + +cp redis.conf /tmp/build-redis-$VERSION/$PREFIX/etc/redis/redis.conf + +sed -i "s/daemonize no/daemonize yes/" /tmp/build-redis-$VERSION/$PREFIX/etc/redis/redis.conf + +curl -L -k https://raw.github.com/gist/257849/9f1e627e0b7dbe68882fa2b7bdb1b2b263522004/redis-server > /tmp/build-redis-$VERSION/$PREFIX/etc/init.d/redis-server + +chmod 755 /tmp/build-redis-$VERSION/$PREFIX/etc/init.d/redis-server + +sed -i "s|/usr/local/sbin/redis-server|/usr/bin/redis-server|" /tmp/build-redis-$VERSION/$PREFIX/etc/init.d/redis-server + +cd /vagrant/packages/rpm/ + +fpm -s dir -t rpm -n redis -v $VERSION -C /tmp/build-redis-$VERSION/ . + + diff --git a/provision/modules/fpm/manifests/centos.pp b/provision/modules/fpm/manifests/centos.pp index 6bf7d97..9c7cdba 100644 --- a/provision/modules/fpm/manifests/centos.pp +++ b/provision/modules/fpm/manifests/centos.pp @@ -25,4 +25,25 @@ provider => 'gem', require => [ Package["rubygems"], Package["ruby-devel"] ], } + +file { 'redis-rpm.sh': + ensure => present, + path => '/tmp/redis-rpm.sh', + owner => vagrant, + group => vagrant, + mode => '0755', + replace => true, + source => 'puppet:///modules/fpm/redis-rpm.sh', + } +file { 'elasticsearch-rpm.sh': + ensure => present, + path => '/tmp/elasticsearch-rpm.sh', + owner => vagrant, + group => vagrant, + mode => '0755', + replace => true, + source => 'puppet:///modules/fpm/elasticsearch-rpm.sh', + } + + } \ No newline at end of file diff --git a/provision/modules/repository/files/yum-repo.conf b/provision/modules/repository/files/yum-repo.conf index 987b73b..17aba67 100644 --- a/provision/modules/repository/files/yum-repo.conf +++ b/provision/modules/repository/files/yum-repo.conf @@ -1,6 +1,6 @@ ServerAdmin webmaster@dummy-host.example.com - DocumentRoot /vagrant/repository/yum/ + DocumentRoot /vagrant/packages/rpm/ ServerName dummy-host.example.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common diff --git a/provision/modules/repository/manifests/server-yum.pp b/provision/modules/repository/manifests/server-yum.pp index ef98a2e..e458e48 100644 --- a/provision/modules/repository/manifests/server-yum.pp +++ b/provision/modules/repository/manifests/server-yum.pp @@ -24,11 +24,11 @@ } - file { '/vagrant/repository/yum': - path => '/vagrant/repository/yum', + file { '/vagrant/packages/rpm': + path => '/vagrant/packages/rpm', ensure => directory, - owner => root, - group => root, + owner => vagrant, + group => vagrant, mode => '0644', recurse => true, notify => Exec['yum_createrepo'], @@ -36,16 +36,16 @@ file { 'index.html': ensure => present, - path => '/vagrant/repository/yum/index.html', - owner => root, - group => root, + path => '/vagrant/packages/rpm/index.html', + owner => vagrant, + group => vagrant, mode => '0644', replace => true, source => 'puppet:///modules/repository/index.html', } exec { 'yum_createrepo': - command => '/usr/bin/createrepo /vagrant/repository/yum', + command => '/usr/bin/createrepo /vagrant/packages/rpm', refreshonly => true, }