pupcap 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README ADDED
@@ -0,0 +1 @@
1
+ Integrate puppet and capistrano
data/lib/pupcap/action.rb CHANGED
@@ -16,9 +16,9 @@ module Pupcap::Action
16
16
  end
17
17
  end
18
18
 
19
- def check_role!
20
- unless parsed_options[:role]
21
- $stderr.puts "Please specify role"
19
+ def check_tasks!
20
+ if parsed_options[:tasks].empty?
21
+ $stderr.puts "Please specify tasks"
22
22
  exit 1
23
23
  end
24
24
  end
@@ -28,6 +28,9 @@ module Pupcap::Action
28
28
  cap.logger.level = Capistrano::Logger::DEBUG
29
29
  set_cap_vars!(cap, file)
30
30
  cap.load file
31
+ parsed_options[:tasks].each do |task|
32
+ cap.find_and_execute_task(task)
33
+ end
31
34
  cap
32
35
  end
33
36
 
@@ -36,7 +39,6 @@ module Pupcap::Action
36
39
  end
37
40
 
38
41
  def cap_load_and_run_task(cap, task)
39
- cap.set :pupcap_options, parsed_options
40
42
  cap.load "#{lib_root}/#{task}/Capfile"
41
43
  cap.trigger(:load)
42
44
  cap.find_and_execute_task(task, :before => :start, :after => :finish)
@@ -48,10 +50,12 @@ module Pupcap::Action
48
50
  def set_cap_vars!(cap, file)
49
51
  app = ENV['app'] || File.basename(File.dirname(file))
50
52
  cap.set :application, app
51
- cap.set :local_root, File.dirname(file)
53
+ cap.set :local_root, File.dirname(file)
54
+ cap.set :pupcap_root, File.dirname(File.expand_path __FILE__)
52
55
  cap.set :provision_key, "#{cap.local_root}/.keys/provision"
53
56
  cap.set :provision_key_pub, "#{cap.local_root}/.keys/provision.pub"
54
57
  cap.set :deploy_to, "/tmp/puppet"
58
+ cap.set :pupcap_options, parsed_options
55
59
  cap.ssh_options[:keys] = cap.provision_key
56
60
  cap.ssh_options[:forward_agent] = true
57
61
  cap.default_run_options[:pty] = true
@@ -3,9 +3,7 @@ require 'pupcap/command'
3
3
 
4
4
  class Pupcap::Action::Cook < Pupcap::Action::Base
5
5
  def initialize
6
- check_role!
7
6
  check_puppetfile!
8
- ENV["ROLES"] = parsed_options[:role]
9
7
  end
10
8
 
11
9
  def start
@@ -36,7 +34,7 @@ class Pupcap::Action::Cook < Pupcap::Action::Base
36
34
  options[:noop] = true
37
35
  end
38
36
  end.parse!
39
- options[:role] = ARGV.first
37
+ options[:tasks] = ARGV
40
38
  @parsed_options = options
41
39
  end
42
40
  @parsed_options
@@ -1,3 +1,5 @@
1
+ require 'erb'
2
+
1
3
  namespace :cook do
2
4
  task :default do
3
5
  rsync
@@ -11,17 +13,26 @@ namespace :cook do
11
13
  host = Pupcap::Command.server_host(self, server)
12
14
  ssh_cmd = "-e \"ssh -p #{port} -i #{provision_key}\""
13
15
  rsync_options = "-p --chmod=o+r,g+r -az"
14
- cmd = "rsync #{rsync_options} #{ssh_cmd} #{local_root}/ #{host}:#{deploy_to}"
16
+ cmd = "rsync #{rsync_options} #{ssh_cmd} #{local_root}/puppet/ #{host}:#{deploy_to}"
15
17
  logger.important(cmd)
16
18
  system(cmd)
17
19
  end
18
20
  end
19
21
 
20
22
  task :apply do
23
+ remote_command = "#{deploy_to}/apply.sh"
24
+
25
+ puppet = "/usr/local/bin/puppet"
21
26
  modules = "--modulepath=#{deploy_to}/modules:#{deploy_to}/manifests"
22
- nook = pupcap_options[:noop] ? "--noop" : ""
23
- debug = pupcap_options[:debug] ? "--debug" : ""
24
- sudo("/usr/local/bin/puppet apply --detailed-exitcodes #{nook} #{debug} #{modules} #{deploy_to}/manifests/#{ENV["ROLES"]}.pp || true")
27
+ nook = pupcap_options[:noop] ? " --noop" : ""
28
+ debug = pupcap_options[:debug] ? " --debug --verbose" : ""
29
+
30
+ erb = ERB.new(File.read("#{pupcap_root}/action/cook/apply.sh.erb"))
31
+ rs = erb.result(binding)
32
+
33
+ put(rs, remote_command)
34
+ run("chmod +x #{remote_command}")
35
+ sudo("#{remote_command} \"$CAPISTRANO:HOSTROLES$\"")
25
36
  end
26
37
 
27
38
  task :cleanup do
@@ -0,0 +1,8 @@
1
+ set -e
2
+
3
+ for role in $(echo "${1}" | tr "," "\n")
4
+ do
5
+ echo "*** ${role} ***"
6
+ <%= puppet %> apply <%= nook + debug %> --detailed-exitcodes <%= modules %> <%= deploy_to %>/manifests/${role}.pp || true
7
+ done
8
+
@@ -0,0 +1,101 @@
1
+ require 'pupcap/action'
2
+ require 'pupcap/command'
3
+ require 'fileutils'
4
+ require 'erb'
5
+
6
+ class Pupcap::Action::Init < Pupcap::Action::Base
7
+ def initialize
8
+ end
9
+
10
+ def start
11
+ create_directories
12
+ create_vagrantfile
13
+ create_puppetfile
14
+ create_pp
15
+ end
16
+
17
+ def create_vagrantfile
18
+ out = "#{work_dir}/Vagrantfile"
19
+ if !File.exists?(out) || force?
20
+ erb = ERB.new(File.read("#{lib_root}/init/Vagrantfile.erb"))
21
+ rs = erb.result(binding)
22
+ File.open(out, "w+"){ |io| io.write rs }
23
+ else
24
+ puts "Skip file #{out}"
25
+ end
26
+ end
27
+
28
+ def create_puppetfile
29
+ out = "#{work_dir}/Puppetfile"
30
+ if !File.exists?(out) || force?
31
+ erb = ERB.new(File.read("#{lib_root}/init/Puppetfile.erb"))
32
+ rs = erb.result(binding)
33
+ File.open(out, "w+"){ |io| io.write rs }
34
+ else
35
+ puts "Skip file #{out}"
36
+ end
37
+ end
38
+
39
+ def create_pp
40
+ out = "#{work_dir}/puppet/manifests/default.pp"
41
+ if !File.exists?(out) || force?
42
+ erb = ERB.new(File.read("#{lib_root}/init/default.pp.erb"))
43
+ rs = erb.result(binding)
44
+ File.open(out, "w+"){ |io| io.write rs }
45
+ else
46
+ puts "Skip file #{out}"
47
+ end
48
+ end
49
+
50
+ def create_directories
51
+ FileUtils.mkdir_p("#{work_dir}/puppet/modules")
52
+ FileUtils.mkdir_p("#{work_dir}/puppet/manifests")
53
+ system("touch #{work_dir}/puppet/modules/.gitkeep")
54
+ system("touch #{work_dir}/puppet/manifests/.gitkeep")
55
+ end
56
+
57
+ def work_dir
58
+ parsed_options[:directory]
59
+ end
60
+
61
+ def ip
62
+ parsed_options[:ip]
63
+ end
64
+
65
+ def force?
66
+ parsed_options[:force]
67
+ end
68
+
69
+ def parsed_options
70
+ unless @parsed_options
71
+ options = default_options.dup
72
+ OptionParser.new do |opts|
73
+ opts.banner = "Usage: #{File.basename($0)} init [options] <directory>"
74
+ opts.on("-h", "--help", "Displays this help info") do
75
+ puts opts
76
+ exit 0
77
+ end
78
+ opts.on("-i", "--ip IP", "Address for vagrant host, default 192.168.44.10") do |ip|
79
+ options[:ip] = ip
80
+ end
81
+ opts.on("-f", "--force", "Always create a Vagrantfile and Puppetfile") do
82
+ options[:force] = true
83
+ end
84
+ end.parse!
85
+ options[:directory] = ARGV[0]
86
+ unless options[:directory]
87
+ $stderr.puts "You must specify a directory"
88
+ exit 1
89
+ end
90
+ @parsed_options = options
91
+ end
92
+ @parsed_options
93
+ end
94
+
95
+ def default_options
96
+ {
97
+ :ip => "192.168.44.10",
98
+ :force => false
99
+ }
100
+ end
101
+ end
@@ -0,0 +1,3 @@
1
+ task :vagrant do
2
+ role :vagrant, "<%= ip %>", :user => "vagrant", :port => 22
3
+ end
@@ -0,0 +1,99 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant::Config.run do |config|
5
+ # All Vagrant configuration is done here. The most common configuration
6
+ # options are documented and commented below. For a complete reference,
7
+ # please see the online documentation at vagrantup.com.
8
+
9
+ # Every Vagrant virtual environment requires a box to build off of.
10
+ config.vm.box = "precise64"
11
+
12
+ # The url from where the 'config.vm.box' box will be fetched if it
13
+ # doesn't already exist on the user's system.
14
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
15
+
16
+ # Boot with a GUI so you can see the screen. (Default is headless)
17
+ # config.vm.boot_mode = :gui
18
+
19
+ # Assign this VM to a host-only network IP, allowing you to access it
20
+ # via the IP. Host-only networks can talk to the host machine as well as
21
+ # any other machines on the same network, but cannot be accessed (through this
22
+ # network interface) by any external networks.
23
+ config.vm.network :hostonly, "<%= ip %>"
24
+
25
+ # Assign this VM to a bridged network, allowing you to connect directly to a
26
+ # network using the host's network device. This makes the VM appear as another
27
+ # physical device on your network.
28
+ # config.vm.network :bridged
29
+
30
+ # Forward a port from the guest to the host, which allows for outside
31
+ # computers to access the VM, whereas host only networking does not.
32
+ # config.vm.forward_port 80, 8080
33
+
34
+ # Share an additional folder to the guest VM. The first argument is
35
+ # an identifier, the second is the path on the guest to mount the
36
+ # folder, and the third is the path on the host to the actual folder.
37
+ config.vm.share_folder("v-root", "/vagrant", ".", :disabled => true)
38
+
39
+ # Enable provisioning with Puppet stand alone. Puppet manifests
40
+ # are contained in a directory path relative to this Vagrantfile.
41
+ # You will need to create the manifests directory and a manifest in
42
+ # the file base.pp in the manifests_path directory.
43
+ #
44
+ # An example Puppet manifest to provision the message of the day:
45
+ #
46
+ # # group { "puppet":
47
+ # # ensure => "present",
48
+ # # }
49
+ # #
50
+ # # File { owner => 0, group => 0, mode => 0644 }
51
+ # #
52
+ # # file { '/etc/motd':
53
+ # # content => "Welcome to your Vagrant-built virtual machine!
54
+ # # Managed by Puppet.\n"
55
+ # # }
56
+ #
57
+ # config.vm.provision :puppet do |puppet|
58
+ # puppet.manifests_path = "manifests"
59
+ # puppet.manifest_file = "base.pp"
60
+ # end
61
+
62
+ # Enable provisioning with chef solo, specifying a cookbooks path, roles
63
+ # path, and data_bags path (all relative to this Vagrantfile), and adding
64
+ # some recipes and/or roles.
65
+ #
66
+ # config.vm.provision :chef_solo do |chef|
67
+ # chef.cookbooks_path = "../my-recipes/cookbooks"
68
+ # chef.roles_path = "../my-recipes/roles"
69
+ # chef.data_bags_path = "../my-recipes/data_bags"
70
+ # chef.add_recipe "mysql"
71
+ # chef.add_role "web"
72
+ #
73
+ # # You may also specify custom JSON attributes:
74
+ # chef.json = { :mysql_password => "foo" }
75
+ # end
76
+
77
+ # Enable provisioning with chef server, specifying the chef server URL,
78
+ # and the path to the validation key (relative to this Vagrantfile).
79
+ #
80
+ # The Opscode Platform uses HTTPS. Substitute your organization for
81
+ # ORGNAME in the URL and validation key.
82
+ #
83
+ # If you have your own Chef Server, use the appropriate URL, which may be
84
+ # HTTP instead of HTTPS depending on your configuration. Also change the
85
+ # validation key to validation.pem.
86
+ #
87
+ # config.vm.provision :chef_client do |chef|
88
+ # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
89
+ # chef.validation_key_path = "ORGNAME-validator.pem"
90
+ # end
91
+ #
92
+ # If you're using the Opscode platform, your validator client is
93
+ # ORGNAME-validator, replacing ORGNAME with your organization name.
94
+ #
95
+ # IF you have your own Chef Server, the default validation client name is
96
+ # chef-validator, unless you changed the configuration.
97
+ #
98
+ # chef.validation_client_name = "ORGNAME-validator"
99
+ end
@@ -0,0 +1,2 @@
1
+ node default {
2
+ }
@@ -1,20 +1,17 @@
1
1
  require 'pupcap/action'
2
+ require 'pupcap/command'
2
3
  require 'pupcap/lsb_release'
3
4
 
4
5
  class Pupcap::Action::Prepare < Pupcap::Action::Base
5
6
  def initialize
6
- check_role!
7
7
  check_puppetfile!
8
- ENV["ROLES"] = parsed_options[:role]
9
8
  end
10
9
 
11
10
  def start
12
11
  cap = create_cap_for(parsed_options[:file])
13
12
  lsb = Pupcap::LsbRelease.new(cap)
14
- prepare_script = "#{lib_root}/prepare/#{lsb.name.downcase}/#{lsb.codename.downcase}.sh"
15
- if File.exists?(prepare_script)
16
- cap.set :pupcap_prepare_script, prepare_script
17
- end
13
+ prepare_proc = lambda{ "#{lib_root}/prepare/#{lsb.name.downcase}/#{lsb.codename.downcase}.sh" }
14
+ cap.set :pupcap_prepare_command, prepare_proc
18
15
  cap_load_and_run_task(cap, "prepare")
19
16
  end
20
17
 
@@ -22,7 +19,7 @@ class Pupcap::Action::Prepare < Pupcap::Action::Base
22
19
  unless @parsed_options
23
20
  options = default_options.dup
24
21
  OptionParser.new do |opts|
25
- opts.banner = "Usage: #{File.basename($0)} prepare [options] <role>"
22
+ opts.banner = "Usage: #{File.basename($0)} prepare [options] <tasks>"
26
23
 
27
24
  opts.on("-h", "--help", "Displays this help info") do
28
25
  puts opts
@@ -36,8 +33,12 @@ class Pupcap::Action::Prepare < Pupcap::Action::Base
36
33
  opts.on("-f", "--file FILE", "A recipe file to load") do |file|
37
34
  options[:file] = File.expand_path(file)
38
35
  end
36
+
37
+ opts.on("-n", "--hostname NAME", "Set hostname") do |name|
38
+ options[:hostname] = name
39
+ end
39
40
  end.parse!
40
- options[:role] = ARGV.first
41
+ options[:tasks] = ARGV
41
42
  @parsed_options = options
42
43
  end
43
44
  @parsed_options
@@ -1,10 +1,22 @@
1
+ require 'net/ssh/multi'
2
+
1
3
  namespace :prepare do
2
4
  task :default do
3
5
  generate_keys
4
- ssh_copy_id
6
+ try_ssh_copy_id
5
7
  run_script
6
8
  end
7
9
 
10
+ task :try_ssh_copy_id do
11
+ begin
12
+ run("true")
13
+ rescue Capistrano::ConnectionError => e
14
+ pass = Capistrano::CLI.password_prompt("SSH Password: ")
15
+ set :password, pass
16
+ ssh_copy_id
17
+ end
18
+ end
19
+
8
20
  task :ssh_copy_id do
9
21
  remote_key_path = "/tmp/#{application}_id.pub.#{Time.now.to_i}"
10
22
  upload(provision_key_pub, remote_key_path)
@@ -24,12 +36,15 @@ namespace :prepare do
24
36
  end
25
37
 
26
38
  task :run_script do
27
- if exists?(:pupcap_prepare_script)
39
+ prepare_script = fetch(:pupcap_prepare_command)
40
+ set :use_sudo, true
41
+ if File.exists?(prepare_script)
28
42
  remote_script_name = "/tmp/pupcap_prepare.#{Time.now.to_i}.sh"
29
- upload(pupcap_prepare_script, remote_script_name)
43
+ upload(prepare_script, remote_script_name)
30
44
  run("chmod 0755 #{remote_script_name}")
31
45
  force = pupcap_options[:force] ? "1" : "0"
32
- sudo("env PUPCAP_FORCE=#{force} #{remote_script_name}")
46
+ hostname = pupcap_options[:hostname] ? " PUPCAP_HOSTNAME=#{pupcap_options[:hostname]}" : ""
47
+ sudo("env PUPCAP_FORCE=#{force}#{hostname} #{remote_script_name}")
33
48
  run("rm #{remote_script_name}")
34
49
  end
35
50
  end
@@ -1,16 +1,30 @@
1
1
  set -e
2
+ set -v
2
3
 
3
- test -e /root/.pupcap_prepare_ok -a ${PUPCAP_FORCE} = "0" && exit 0
4
+ if test -e /root/.pupcap_prepare_ok -a "x${PUPCAP_FORCE}" = "x0"
5
+ then
6
+ exit 0
7
+ fi
8
+
9
+ if test ! -e /root/.pupcap_prepare_locale_ok -o "x${PUPCAP_FORCE}" = "x1"
10
+ then
11
+ locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 && touch /root/pupcap_prepare_locale_ok
12
+ fi
4
13
 
5
- if [ ! -e /root/.pupcap_prepare_locale_ok -o ${PUPCAP_FORCE} = "1" ]; then
6
- locale-gen && update-locale LANG=en_US.UTF8 && touch /root/pupcap_prepare_locale_ok
14
+ if test -n "${PUPCAP_HOSTNAME}"
15
+ then
16
+ echo ${PUPCAP_HOSTNAME} > /etc/hostname
17
+ cat /etc/hosts | grep ${PUPCAP_HOSTNAME} || echo "127.0.0.1 ${PUPCAP_HOSTNAME}" >> /etc/hosts && /usr/sbin/service hostname start
7
18
  fi
8
19
 
9
20
  SOURCES_LIST=/etc/apt/sources.list
10
21
 
11
22
  SOURCES_LIST_MD5=`md5sum ${SOURCES_LIST} | awk '{ print $1 }'`
12
23
 
13
- if [ "$SOURCES_LIST_MD5" != "0af83b87b34bcdebf8a81a7ccc523e26" -o ${PUPCAP_FORCE} = "1" ]; then
24
+ if test "$SOURCES_LIST_MD5" != "14846cd43a3ef58b204b0807fa4856f8" -o "x${PUPCAP_FORCE}" = "x1"
25
+ then
26
+
27
+ cp -f ${SOURCES_LIST} ${SOURCES_LIST}.pupcap_back
14
28
 
15
29
  cat <<EOF > ${SOURCES_LIST}
16
30
  #############################################################
@@ -18,14 +32,14 @@ if [ "$SOURCES_LIST_MD5" != "0af83b87b34bcdebf8a81a7ccc523e26" -o ${PUPCAP_FORCE
18
32
  #############################################################
19
33
 
20
34
  ###### Ubuntu Main Repos
21
- deb mirror://mirrors.ubuntu.com/mirrors.txt precise main
22
- deb-src mirror://mirrors.ubuntu.com/mirrors.txt precise main
35
+ deb http://us.archive.ubuntu.com/ubuntu/ precise main
36
+ deb-src http://us.archive.ubuntu.com/ubuntu/ precise main
23
37
 
24
38
  ###### Ubuntu Update Repos
25
- deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main
26
- deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main
27
- deb-src mirror://mirrors.ubuntu.com/mirrors.txt precise-security main
28
- deb-src mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main
39
+ deb http://us.archive.ubuntu.com/ubuntu/ precise-security main
40
+ deb http://us.archive.ubuntu.com/ubuntu/ precise-updates main
41
+ deb-src http://us.archive.ubuntu.com/ubuntu/ precise-security main
42
+ deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates main
29
43
  EOF
30
44
  echo >> ${SOURCES_LIST} # new line
31
45
 
@@ -38,5 +52,7 @@ apt-get install -qy rsync wget rubygems vim git-core build-essential > /dev/null
38
52
  apt-get -qy clean
39
53
 
40
54
  /usr/bin/gem install -q --no-ri --no-rdoc --version '~> 2.7.1' puppet
55
+ /usr/sbin/groupadd -f puppet
56
+
41
57
  touch /root/.pupcap_prepare_ok
42
58
 
@@ -3,9 +3,7 @@ require 'pupcap/command'
3
3
 
4
4
  class Pupcap::Action::Ssh < Pupcap::Action::Base
5
5
  def initialize
6
- check_role!
7
6
  check_puppetfile!
8
- ENV["ROLES"] = parsed_options[:role]
9
7
  end
10
8
 
11
9
  def start
@@ -28,7 +26,7 @@ class Pupcap::Action::Ssh < Pupcap::Action::Base
28
26
  exit 0
29
27
  end
30
28
  end.parse!
31
- options[:role] = ARGV.first
29
+ options[:tasks] = ARGV
32
30
  @parsed_options = options
33
31
  end
34
32
  @parsed_options
data/lib/pupcap/cli.rb CHANGED
@@ -17,7 +17,7 @@ class Pupcap::CLI
17
17
  end
18
18
 
19
19
  def valid_actions
20
- %w{ prepare cook ssh }
20
+ %w{ prepare cook ssh init }
21
21
  end
22
22
  end
23
23
  end
@@ -5,7 +5,7 @@ module Pupcap
5
5
 
6
6
  MAJOR = 0
7
7
  MINOR = 0
8
- PATCH = 3
8
+ PATCH = 4
9
9
 
10
10
  def self.to_s
11
11
  "#{MAJOR}.#{MINOR}.#{PATCH}"
data/pupcap.gemspec CHANGED
@@ -21,10 +21,13 @@ Gem::Specification.new do |s|
21
21
  s.specification_version = 3
22
22
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
23
23
  s.add_runtime_dependency(%q<capistrano>, [">= 2.12.0"])
24
+ s.add_runtime_dependency(%q<vagrant>, [">= 1.0.0"])
24
25
  else
25
26
  s.add_dependency(%q<capistrano>, [">= 2.12.0"])
27
+ s.add_dependency(%q<vagrant>, [">= 1.0.0"])
26
28
  end
27
29
  else
28
30
  s.add_dependency(%q<capistrano>, [">= 2.12.0"])
31
+ s.add_dependency(%q<vagrant>, [">= 1.0.0"])
29
32
  end
30
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pupcap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: 2.12.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: vagrant
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
30
46
  description: under development description
31
47
  email:
32
48
  - dima.exe@gmail.com
@@ -37,13 +53,18 @@ extra_rdoc_files: []
37
53
  files:
38
54
  - .gitignore
39
55
  - Gemfile
56
+ - README
40
57
  - Rakefile
41
58
  - bin/pupcap
42
59
  - lib/pupcap.rb
43
60
  - lib/pupcap/action.rb
44
- - lib/pupcap/action/.prepare.rb.swp
45
61
  - lib/pupcap/action/cook.rb
46
62
  - lib/pupcap/action/cook/Capfile
63
+ - lib/pupcap/action/cook/apply.sh.erb
64
+ - lib/pupcap/action/init.rb
65
+ - lib/pupcap/action/init/Puppetfile.erb
66
+ - lib/pupcap/action/init/Vagrantfile.erb
67
+ - lib/pupcap/action/init/default.pp.erb
47
68
  - lib/pupcap/action/prepare.rb
48
69
  - lib/pupcap/action/prepare/Capfile
49
70
  - lib/pupcap/action/prepare/ubuntu/precise.sh