mccloud 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. data/.gitignore +13 -8
  2. data/.rvmrc +2 -0
  3. data/Gemfile +10 -1
  4. data/Guardfile +10 -0
  5. data/README.md +453 -89
  6. data/Rakefile +29 -2
  7. data/bin/mccloud +17 -116
  8. data/bin/mccloud_old +159 -0
  9. data/doc/old-README.md +81 -0
  10. data/lib/mccloud/cli.rb +55 -0
  11. data/lib/mccloud/command/balance.rb +21 -0
  12. data/lib/mccloud/command/base.rb +106 -0
  13. data/lib/mccloud/command/bootstrap.rb +12 -24
  14. data/lib/mccloud/command/define.rb +18 -0
  15. data/lib/mccloud/command/destroy.rb +12 -13
  16. data/lib/mccloud/command/forward.rb +29 -0
  17. data/lib/mccloud/command/group_base.rb +107 -0
  18. data/lib/mccloud/command/halt.rb +11 -13
  19. data/lib/mccloud/command/helpers.rb +13 -0
  20. data/lib/mccloud/command/image.rb +37 -0
  21. data/lib/mccloud/command/init.rb +8 -504
  22. data/lib/mccloud/command/init_vagrant.rb +14 -0
  23. data/lib/mccloud/command/ip.rb +32 -0
  24. data/lib/mccloud/command/ips.rb +22 -0
  25. data/lib/mccloud/command/keypair.rb +27 -0
  26. data/lib/mccloud/command/keystore.rb +29 -0
  27. data/lib/mccloud/command/lb.rb +38 -0
  28. data/lib/mccloud/command/named_base.rb +14 -0
  29. data/lib/mccloud/command/package.rb +17 -0
  30. data/lib/mccloud/command/provider.rb +30 -0
  31. data/lib/mccloud/command/provision.rb +10 -24
  32. data/lib/mccloud/command/reload.rb +12 -6
  33. data/lib/mccloud/command/sorry.rb +20 -0
  34. data/lib/mccloud/command/ssh.rb +11 -45
  35. data/lib/mccloud/command/status.rb +14 -35
  36. data/lib/mccloud/command/template.rb +16 -0
  37. data/lib/mccloud/command/undefine.rb +23 -0
  38. data/lib/mccloud/command/up.rb +8 -62
  39. data/lib/mccloud/command/version.rb +14 -0
  40. data/lib/mccloud/command/vm.rb +27 -0
  41. data/lib/mccloud/command.rb +36 -0
  42. data/lib/mccloud/config/collection.rb +107 -0
  43. data/lib/mccloud/config/component.rb +20 -0
  44. data/lib/mccloud/config/definition.rb +35 -0
  45. data/lib/mccloud/config/keypair.rb +36 -0
  46. data/lib/mccloud/config/mccloud.rb +39 -0
  47. data/lib/mccloud/config/provider.rb +55 -0
  48. data/lib/mccloud/config/template.rb +35 -0
  49. data/lib/mccloud/config.rb +128 -41
  50. data/lib/mccloud/definition.rb +104 -0
  51. data/lib/mccloud/definitions.rb +91 -0
  52. data/lib/mccloud/environment.rb +222 -0
  53. data/lib/mccloud/error.rb +20 -0
  54. data/lib/mccloud/generator.rb +49 -0
  55. data/lib/mccloud/keypair.rb +48 -0
  56. data/lib/mccloud/mccloudfile.rb +78 -0
  57. data/lib/mccloud/provider/aws/image.rb +107 -0
  58. data/lib/mccloud/provider/aws/ip/associate.rb +33 -0
  59. data/lib/mccloud/provider/aws/ip.rb +31 -0
  60. data/lib/mccloud/provider/aws/keystore.rb +21 -0
  61. data/lib/mccloud/provider/aws/lb/associate.rb +53 -0
  62. data/lib/mccloud/provider/aws/lb/sorry.rb +14 -0
  63. data/lib/mccloud/provider/aws/lb.rb +37 -0
  64. data/lib/mccloud/provider/aws/provider/image_destroy.rb +27 -0
  65. data/lib/mccloud/provider/aws/provider/image_list.rb +19 -0
  66. data/lib/mccloud/provider/aws/provider/ip_list.rb +17 -0
  67. data/lib/mccloud/provider/aws/provider/keystore_list.rb +22 -0
  68. data/lib/mccloud/provider/aws/provider/keystore_sync.rb +62 -0
  69. data/lib/mccloud/provider/aws/provider/lb_list.rb +21 -0
  70. data/lib/mccloud/provider/aws/provider/old_deregister.rb +39 -0
  71. data/lib/mccloud/provider/aws/provider/old_flavors.rb +18 -0
  72. data/lib/mccloud/provider/aws/provider/old_ips.rb +42 -0
  73. data/lib/mccloud/provider/aws/provider/old_loadbalance.rb +46 -0
  74. data/lib/mccloud/provider/aws/provider/old_package.rb +75 -0
  75. data/lib/mccloud/provider/aws/provider/old_sorry.rb +51 -0
  76. data/lib/mccloud/provider/aws/provider/old_status.rb +119 -0
  77. data/lib/mccloud/provider/aws/provider/old_validate.rb +51 -0
  78. data/lib/mccloud/provider/aws/provider/status.rb +58 -0
  79. data/lib/mccloud/provider/aws/provider.rb +219 -0
  80. data/lib/mccloud/provider/aws/stack/old_destroy.rb +43 -0
  81. data/lib/mccloud/provider/aws/stack/old_up.rb +59 -0
  82. data/lib/mccloud/provider/aws/stack/old_vm.rb +98 -0
  83. data/lib/mccloud/provider/aws/stack.rb +243 -0
  84. data/lib/mccloud/provider/aws/vm/bootstrap.rb +13 -0
  85. data/lib/mccloud/provider/aws/vm/destroy.rb +21 -0
  86. data/lib/mccloud/provider/aws/vm/forward.rb +17 -0
  87. data/lib/mccloud/provider/aws/vm/halt.rb +24 -0
  88. data/lib/mccloud/provider/aws/vm/package.rb +63 -0
  89. data/lib/mccloud/provider/aws/vm/provision.rb +25 -0
  90. data/lib/mccloud/provider/aws/vm/reload.rb +13 -0
  91. data/lib/mccloud/provider/aws/vm/resume.rb +0 -0
  92. data/lib/mccloud/provider/aws/vm/rsync.rb +11 -0
  93. data/lib/mccloud/provider/aws/vm/scp.rb +21 -0
  94. data/lib/mccloud/provider/aws/vm/ssh.rb +11 -0
  95. data/lib/mccloud/provider/aws/vm/suspend.rb +0 -0
  96. data/lib/mccloud/provider/aws/vm/up.rb +133 -0
  97. data/lib/mccloud/provider/aws/vm.rb +123 -0
  98. data/lib/mccloud/{type → provider/core}/forwarding.rb +6 -3
  99. data/lib/mccloud/provider/core/ip.rb +24 -0
  100. data/lib/mccloud/provider/core/keystore.rb +23 -0
  101. data/lib/mccloud/provider/core/lb.rb +23 -0
  102. data/lib/mccloud/provider/core/provider.rb +99 -0
  103. data/lib/mccloud/provider/core/vm/old_halt.rb +19 -0
  104. data/lib/mccloud/{generators.rb → provider/core/vm/old_init.rb} +0 -0
  105. data/lib/mccloud/provider/core/vm/old_multi.rb +60 -0
  106. data/lib/mccloud/provider/core/vm/old_reload.rb +11 -0
  107. data/lib/mccloud/{command/server.rb → provider/core/vm/old_server.rb} +2 -2
  108. data/lib/mccloud/provider/core/vm/old_ssh_command.rb +21 -0
  109. data/lib/mccloud/{command/suspend.rb → provider/core/vm/old_suspend.rb} +2 -2
  110. data/lib/mccloud/provider/core/vm/old_wizard.rb +511 -0
  111. data/lib/mccloud/provider/core/vm/rsync.rb +67 -0
  112. data/lib/mccloud/provider/core/vm/ssh.rb +137 -0
  113. data/lib/mccloud/provider/core/vm/ssh_bootstrap.rb +62 -0
  114. data/lib/mccloud/provider/core/vm/ssh_forward.rb +47 -0
  115. data/lib/mccloud/provider/core/vm.rb +121 -0
  116. data/lib/mccloud/provider/fog/fogconfig.rb +44 -0
  117. data/lib/mccloud/provider/fog/provider.rb +46 -0
  118. data/lib/mccloud/provider/host/provider/status.rb +12 -0
  119. data/lib/mccloud/provider/host/provider.rb +85 -0
  120. data/lib/mccloud/provider/host/vm/bootstrap.rb +11 -0
  121. data/lib/mccloud/provider/host/vm/forward.rb +12 -0
  122. data/lib/mccloud/provider/host/vm/provision.rb +19 -0
  123. data/lib/mccloud/provider/host/vm/scp.rb +35 -0
  124. data/lib/mccloud/provider/host/vm/ssh.rb +11 -0
  125. data/lib/mccloud/provider/host/vm.rb +28 -0
  126. data/lib/mccloud/provider/libvirt/provider/status.rb +43 -0
  127. data/lib/mccloud/provider/libvirt/provider.rb +96 -0
  128. data/lib/mccloud/provider/libvirt/vm/bootstrap.rb +17 -0
  129. data/lib/mccloud/provider/libvirt/vm/destroy.rb +33 -0
  130. data/lib/mccloud/provider/libvirt/vm/forward.rb +12 -0
  131. data/lib/mccloud/provider/libvirt/vm/halt.rb +20 -0
  132. data/lib/mccloud/provider/libvirt/vm/provision.rb +25 -0
  133. data/lib/mccloud/provider/libvirt/vm/reload.rb +13 -0
  134. data/lib/mccloud/provider/libvirt/vm/rsync.rb +11 -0
  135. data/lib/mccloud/provider/libvirt/vm/scp.rb +15 -0
  136. data/lib/mccloud/provider/libvirt/vm/ssh.rb +11 -0
  137. data/lib/mccloud/provider/libvirt/vm/up.rb +65 -0
  138. data/lib/mccloud/provider/libvirt/vm.rb +67 -0
  139. data/lib/mccloud/provider/script/provider/status.rb +12 -0
  140. data/lib/mccloud/provider/script/provider.rb +125 -0
  141. data/lib/mccloud/provider/script/vm.rb +13 -0
  142. data/lib/mccloud/provider/vagrant/provider/status.rb +14 -0
  143. data/lib/mccloud/provider/vagrant/provider.rb +135 -0
  144. data/lib/mccloud/provider/vagrant/vm/destroy.rb +11 -0
  145. data/lib/mccloud/provider/vagrant/vm/forward.rb +12 -0
  146. data/lib/mccloud/provider/vagrant/vm/halt.rb +11 -0
  147. data/lib/mccloud/provider/vagrant/vm/provision.rb +11 -0
  148. data/lib/mccloud/provider/vagrant/vm/reload.rb +11 -0
  149. data/lib/mccloud/provider/vagrant/vm/resume.rb +11 -0
  150. data/lib/mccloud/provider/vagrant/vm/ssh.rb +11 -0
  151. data/lib/mccloud/provider/vagrant/vm/suspend.rb +11 -0
  152. data/lib/mccloud/provider/vagrant/vm/up.rb +11 -0
  153. data/lib/mccloud/provider/vagrant/vm.rb +46 -0
  154. data/lib/mccloud/provider/vmfusion/provider/status.rb +24 -0
  155. data/lib/mccloud/provider/vmfusion/provider.rb +98 -0
  156. data/lib/mccloud/provider/vmfusion/vm/forward.rb +12 -0
  157. data/lib/mccloud/provider/vmfusion/vm/halt.rb +11 -0
  158. data/lib/mccloud/provider/vmfusion/vm/resume.rb +11 -0
  159. data/lib/mccloud/provider/vmfusion/vm/suspend.rb +11 -0
  160. data/lib/mccloud/provider/vmfusion/vm/up.rb +11 -0
  161. data/lib/mccloud/provider/vmfusion/vm.rb +47 -0
  162. data/lib/mccloud/provisioner/chef_solo.rb +193 -79
  163. data/lib/mccloud/provisioner/puppet.rb +205 -32
  164. data/lib/mccloud/provisioner/shell.rb +48 -0
  165. data/lib/mccloud/template.rb +74 -0
  166. data/lib/mccloud/templates/Mccloudfile.erb +212 -39
  167. data/lib/mccloud/templates/{bootstrap-centos-rubysource-1.8.7.sh → bootstrap/bootstrap-centos-rubysource-1.8.7.sh} +0 -0
  168. data/lib/mccloud/templates/{bootstrap-centos-rvm-1.8.7.sh → bootstrap/bootstrap-centos-rvm-1.8.7.sh} +0 -0
  169. data/lib/mccloud/templates/{bootstrap-centos-rvm-1.9.2.sh → bootstrap/bootstrap-centos-rvm-1.9.2.sh} +0 -0
  170. data/lib/mccloud/templates/{bootstrap-centos-rvm-ree-1.8.7.sh → bootstrap/bootstrap-centos-rvm-ree-1.8.7.sh} +0 -0
  171. data/lib/mccloud/templates/bootstrap/bootstrap-chef-omnibus.sh +8 -0
  172. data/lib/mccloud/templates/{bootstrap-custom.sh → bootstrap/bootstrap-custom.sh} +0 -0
  173. data/lib/mccloud/templates/{bootstrap-ubuntu-rvm-1.8.7.sh → bootstrap/bootstrap-ubuntu-rvm-1.8.7.sh} +0 -0
  174. data/lib/mccloud/templates/{bootstrap-ubuntu-system.sh → bootstrap/bootstrap-ubuntu-system.sh} +0 -0
  175. data/lib/mccloud/templates/locales/en.yml +30 -0
  176. data/lib/mccloud/templates/vm.erb +9 -0
  177. data/lib/mccloud/templates.rb +35 -0
  178. data/lib/mccloud/ui.rb +82 -0
  179. data/lib/mccloud/util/rostruct.rb +24 -0
  180. data/lib/mccloud/util/rsync.rb +12 -8
  181. data/lib/mccloud/util/ssh.rb +18 -12
  182. data/lib/mccloud/util/sshkey.rb +3 -2
  183. data/lib/mccloud/version.rb +4 -1
  184. data/lib/mccloud/vm.rb +62 -0
  185. data/lib/mccloud/vms.rb +60 -0
  186. data/lib/mccloud.rb +24 -1
  187. data/mccloud.gemspec +12 -3
  188. data/samples/Mccloudfile +117 -0
  189. data/samples/bitnami_drupal_cloud.json +102 -0
  190. data/samples/bootstrap-ubuntu-system.sh +16 -0
  191. data/samples/mcollective_cloud.json +198 -0
  192. data/samples/stack_cloud.json +93 -0
  193. data/samples/stacks.txt +5 -0
  194. data/spec/commands/define_spec.rb +96 -0
  195. data/spec/commands/init_spec.rb +30 -0
  196. data/spec/environment/environment_spec.rb +26 -0
  197. data/spec/generator_spec.rb +30 -0
  198. data/spec/keypair_spec.rb +38 -0
  199. data/spec/provider/aws/credentials_spec.rb +37 -0
  200. data/spec/provisioner/puppet/Mccloud-puppet-test +32 -0
  201. data/spec/provisioner/puppet/puppet_spec.rb +110 -0
  202. data/spec/spec_helper.rb +0 -0
  203. data/templates/ubuntu-10.10-server-amd64/aws.json +3 -0
  204. data/templates/ubuntu-10.10-server-amd64/bootstrap.sh +16 -0
  205. data/templates/ubuntu-10.10-server-amd64/definition.old +51 -0
  206. data/templates/ubuntu-10.10-server-amd64/mccloud.erb +6 -0
  207. metadata +293 -67
  208. data/Gemfile.lock +0 -53
  209. data/lib/mccloud/command/boot.rb +0 -12
  210. data/lib/mccloud/command/command.rb +0 -21
  211. data/lib/mccloud/command/multi.rb +0 -60
  212. data/lib/mccloud/configurator/lb.rb +0 -26
  213. data/lib/mccloud/configurator/mccloud.rb +0 -33
  214. data/lib/mccloud/configurator/vm.rb +0 -37
  215. data/lib/mccloud/provisioner/vagrant/base.rb +0 -63
  216. data/lib/mccloud/provisioner/vagrant/chef.rb +0 -130
  217. data/lib/mccloud/provisioner/vagrant/chef_server.rb +0 -103
  218. data/lib/mccloud/provisioner/vagrant/chef_solo.rb +0 -142
  219. data/lib/mccloud/provisioner/vagrant/puppet.rb +0 -137
  220. data/lib/mccloud/provisioner/vagrant/puppet_server.rb +0 -55
  221. data/lib/mccloud/provisioner/vagrant/shell.rb +0 -52
  222. data/lib/mccloud/session.rb +0 -206
  223. data/lib/mccloud/type/lb.rb +0 -34
  224. data/lib/mccloud/type/vm.rb +0 -47
  225. data/lib/mccloud/util/iterator.rb +0 -20
@@ -1,33 +0,0 @@
1
- module Mccloud
2
- module Configurator
3
- class MccloudConfigurator
4
- attr_accessor :prefix
5
- attr_accessor :environment
6
-
7
- attr_accessor :identity
8
- attr_accessor :loglevel
9
-
10
- def initialize()
11
- @prefix="mccloud"
12
- @environment=""
13
- @identity=""
14
- @loglevel=:info
15
- end
16
-
17
- def filter()
18
- mcfilter=Array.new
19
- if !@prefix.nil?
20
- mcfilter << @prefix
21
- end
22
- if @environment!=""
23
- mcfilter << @environment
24
- end
25
- if @identity!=""
26
- mcfilter << @identity
27
- end
28
- return mcfilter.join(" - ")
29
- end
30
-
31
- end
32
- end
33
- end
@@ -1,37 +0,0 @@
1
- require 'mccloud/provisioner/chef_solo'
2
- require 'mccloud/provisioner/puppet'
3
-
4
- require 'mccloud/type/vm'
5
-
6
- module Mccloud
7
- module Configurator
8
-
9
- class VmConfigurator
10
-
11
- attr_accessor :vm
12
-
13
- def initialize()
14
- end
15
-
16
- def define(name)
17
- @vm=Mccloud::Type::Vm.new
18
- vmconfig=self
19
- yield vmconfig
20
- @vm.name=name
21
- Mccloud.session.config.vms[name.to_s]=@vm
22
- end
23
- def provision(type)
24
- case type
25
- when :chef_solo
26
- @provisioner=Mccloud::Provisioner::ChefSolo.new
27
- when :puppet
28
- @provisioner=Mccloud::Provisioner::Puppet.new
29
- else
30
- end
31
- yield @provisioner
32
- Mccloud.session.config.provisioners[type.to_s]=@provisioner
33
- end
34
- end
35
-
36
- end
37
- end #Module Mccloud
@@ -1,63 +0,0 @@
1
- module Vagrant
2
- module Provisioners
3
- # The base class for a "provisioner." A provisioner is responsible for
4
- # provisioning a Vagrant system. This has been abstracted out to provide
5
- # support for multiple solutions such as Chef Solo, Chef Client, and
6
- # Puppet.
7
- class Base
8
- include Vagrant::Util
9
-
10
- # The environment which provisioner is running in. This is a
11
- # {Vagrant::Action::Environment}
12
- attr_reader :action_env
13
-
14
- # The configuration for this provisioner. This will be an instance of
15
- # the `Config` class which is part of the provisioner.
16
- attr_reader :config
17
-
18
- # Registers a provisioner with a given shortcut. This allows that provisioner
19
- # to be referenced with the shortcut.
20
- #
21
- # @param [Symbol] shortcut
22
- def self.register(shortcut)
23
- registered[shortcut] = self
24
- end
25
-
26
- # Returns the provisioner associated with the given shortcut.
27
- def self.registered
28
- @@registered ||= {}
29
- end
30
-
31
- def initialize(env, config)
32
- @action_env = env
33
- @config = config
34
- end
35
-
36
- # Returns the actual {Vagrant::Environment} which this provisioner
37
- # represents.
38
- #
39
- # @return [Vagrant::Environment]
40
- def env
41
- action_env.env
42
- end
43
-
44
- # Returns the VM which this provisioner is working on.
45
- #
46
- # @return [Vagrant::VM]
47
- def vm
48
- env.vm
49
- end
50
-
51
- # This is the method called to "prepare" the provisioner. This is called
52
- # before any actions are run by the action runner (see {Vagrant::Actions::Runner}).
53
- # This can be used to setup shared folders, forward ports, etc. Whatever is
54
- # necessary on a "meta" level.
55
- def prepare; end
56
-
57
- # This is the method called to provision the system. This method
58
- # is expected to do whatever necessary to provision the system (create files,
59
- # SSH, etc.)
60
- def provision!; end
61
- end
62
- end
63
- end
@@ -1,130 +0,0 @@
1
- module Vagrant
2
- module Provisioners
3
- # This class is a base class where the common functionality shared between
4
- # chef-solo and chef-client provisioning are stored. This is **not an actual
5
- # provisioner**. Instead, {ChefSolo} or {ChefServer} should be used.
6
- class Chef < Base
7
- def prepare
8
- raise ChefError, :invalid_provisioner
9
- end
10
-
11
- def verify_binary(binary)
12
- vm.ssh.execute do |ssh|
13
- # Checks for the existence of chef binary and error if it
14
- # doesn't exist.
15
- ssh.sudo!("which #{binary}", :error_class => ChefError, :_key => :chef_not_detected, :binary => binary)
16
- end
17
- end
18
-
19
- def chown_provisioning_folder
20
- vm.ssh.execute do |ssh|
21
- ssh.sudo!("mkdir -p #{config.provisioning_path}")
22
- ssh.sudo!("chown #{env.config.ssh.username} #{config.provisioning_path}")
23
- end
24
- end
25
-
26
- def setup_config(template, filename, template_vars)
27
- config_file = TemplateRenderer.render(template, {
28
- :log_level => config.log_level.to_sym,
29
- :http_proxy => config.http_proxy,
30
- :http_proxy_user => config.http_proxy_user,
31
- :http_proxy_pass => config.http_proxy_pass,
32
- :https_proxy => config.https_proxy,
33
- :https_proxy_user => config.https_proxy_user,
34
- :https_proxy_pass => config.https_proxy_pass,
35
- :no_proxy => config.no_proxy
36
- }.merge(template_vars))
37
-
38
- vm.ssh.upload!(StringIO.new(config_file), File.join(config.provisioning_path, filename))
39
- end
40
-
41
- def setup_json
42
- env.ui.info I18n.t("vagrant.provisioners.chef.json")
43
-
44
- # Set up initial configuration
45
- data = {
46
- :config => env.config.to_hash,
47
- :directory => env.config.vm.shared_folders["v-root"][:guestpath],
48
- }
49
-
50
- # And wrap it under the "vagrant" namespace
51
- data = { :vagrant => data }
52
-
53
- # Merge with the "extra data" which isn't put under the
54
- # vagrant namespace by default
55
- data.merge!(config.json)
56
-
57
- json = data.to_json
58
-
59
- vm.ssh.upload!(StringIO.new(json), File.join(config.provisioning_path, "dna.json"))
60
- end
61
- end
62
-
63
- class Chef < Base
64
- class ChefError < Errors::VagrantError
65
- error_namespace("vagrant.provisioners.chef")
66
- end
67
- end
68
-
69
- class Chef < Base
70
- # This is the configuration which is available through `config.chef`
71
- class Config < Vagrant::Config::Base
72
- # Shared config
73
- attr_accessor :node_name
74
- attr_accessor :provisioning_path
75
- attr_accessor :log_level
76
- attr_accessor :json
77
- attr_accessor :http_proxy
78
- attr_accessor :http_proxy_user
79
- attr_accessor :http_proxy_pass
80
- attr_accessor :https_proxy
81
- attr_accessor :https_proxy_user
82
- attr_accessor :https_proxy_pass
83
- attr_accessor :no_proxy
84
-
85
- def initialize
86
- @provisioning_path = "/tmp/vagrant-chef"
87
- @log_level = :info
88
- @json = { :instance_role => "vagrant" }
89
- @http_proxy = nil
90
- @http_proxy_user = nil
91
- @http_proxy_pass = nil
92
- @https_proxy = nil
93
- @https_proxy_user = nil
94
- @https_proxy_pass = nil
95
- @no_proxy = nil
96
- end
97
-
98
- # Returns the run list for the provisioning
99
- def run_list
100
- json[:run_list] ||= []
101
- end
102
-
103
- # Sets the run list to the specified value
104
- def run_list=(value)
105
- json[:run_list] = value
106
- end
107
-
108
- # Adds a recipe to the run list
109
- def add_recipe(name)
110
- name = "recipe[#{name}]" unless name =~ /^recipe\[(.+?)\]$/
111
- run_list << name
112
- end
113
-
114
- # Adds a role to the run list
115
- def add_role(name)
116
- name = "role[#{name}]" unless name =~ /^role\[(.+?)\]$/
117
- run_list << name
118
- end
119
-
120
- def instance_variables_hash
121
- # Overridden so that the 'json' key could be removed, since its just
122
- # merged into the config anyways
123
- result = super
124
- result.delete("json")
125
- result
126
- end
127
- end
128
- end
129
- end
130
- end
@@ -1,103 +0,0 @@
1
- require 'pathname'
2
-
3
- module Vagrant
4
- module Provisioners
5
- # This class implements provisioning via chef-client, allowing provisioning
6
- # with a chef server.
7
- class ChefServer < Chef
8
- register :chef_server
9
-
10
- class Config < Chef::Config
11
- attr_accessor :chef_server_url
12
- attr_accessor :validation_key_path
13
- attr_accessor :validation_client_name
14
- attr_accessor :client_key_path
15
- attr_accessor :file_cache_path
16
- attr_accessor :file_backup_path
17
-
18
- def initialize
19
- super
20
-
21
- @validation_client_name = "chef-validator"
22
- @client_key_path = "/etc/chef/client.pem"
23
- @file_cache_path = "/srv/chef/file_store"
24
- @file_backup_path = "/srv/chef/cache"
25
- end
26
-
27
- def validate(errors)
28
- super
29
-
30
- errors.add(I18n.t("vagrant.config.chef.server_url_empty")) if !chef_server_url || chef_server_url.strip == ""
31
- errors.add(I18n.t("vagrant.config.chef.validation_key_path")) if !validation_key_path
32
- errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if json[:run_list] && run_list.empty?
33
- end
34
- end
35
-
36
- def prepare
37
- raise ChefError, :server_validation_key_required if config.validation_key_path.nil?
38
- raise ChefError, :server_validation_key_doesnt_exist if !File.file?(validation_key_path)
39
- raise ChefError, :server_url_required if config.chef_server_url.nil?
40
- end
41
-
42
- def provision!
43
- verify_binary("chef-client")
44
- chown_provisioning_folder
45
- create_client_key_folder
46
- upload_validation_key
47
- setup_json
48
- setup_server_config
49
- run_chef_client
50
- end
51
-
52
- def create_client_key_folder
53
- env.ui.info I18n.t("vagrant.provisioners.chef.client_key_folder")
54
- path = Pathname.new(config.client_key_path)
55
-
56
- vm.ssh.execute do |ssh|
57
- ssh.sudo!("mkdir -p #{path.dirname}")
58
- end
59
- end
60
-
61
- def upload_validation_key
62
- env.ui.info I18n.t("vagrant.provisioners.chef.upload_validation_key")
63
- vm.ssh.upload!(validation_key_path, guest_validation_key_path)
64
- end
65
-
66
- def setup_server_config
67
- setup_config("chef_server_client", "client.rb", {
68
- :node_name => config.node_name,
69
- :chef_server_url => config.chef_server_url,
70
- :validation_client_name => config.validation_client_name,
71
- :validation_key => guest_validation_key_path,
72
- :client_key => config.client_key_path,
73
- :file_cache_path => config.file_cache_path,
74
- :file_backup_path => config.file_backup_path
75
- })
76
- end
77
-
78
- def run_chef_client
79
- commands = ["cd #{config.provisioning_path}",
80
- "chef-client -c client.rb -j dna.json"]
81
-
82
- env.ui.info I18n.t("vagrant.provisioners.chef.running_client")
83
- vm.ssh.execute do |ssh|
84
- ssh.sudo!(commands) do |channel, type, data|
85
- if type == :exit_status
86
- ssh.check_exit_status(data, commands)
87
- else
88
- env.ui.info("#{data}: #{type}")
89
- end
90
- end
91
- end
92
- end
93
-
94
- def validation_key_path
95
- File.expand_path(config.validation_key_path, env.root_path)
96
- end
97
-
98
- def guest_validation_key_path
99
- File.join(config.provisioning_path, "validation.pem")
100
- end
101
- end
102
- end
103
- end
@@ -1,142 +0,0 @@
1
- module Vagrant
2
- module Provisioners
3
- # This class implements provisioning via chef-solo.
4
- class ChefSolo < Chef
5
- register :chef_solo
6
-
7
- class Config < Chef::Config
8
- attr_accessor :cookbooks_path
9
- attr_accessor :roles_path
10
- attr_accessor :recipe_url
11
-
12
- def initialize
13
- super
14
-
15
- @cookbooks_path = ["cookbooks", [:vm, "cookbooks"]]
16
- @roles_path = []
17
- end
18
-
19
- def validate(errors)
20
- super
21
-
22
- errors.add(I18n.t("vagrant.config.chef.cookbooks_path_empty")) if !cookbooks_path || [cookbooks_path].flatten.empty?
23
- errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if !json[:run_list] || run_list.empty?
24
- end
25
- end
26
-
27
- def prepare
28
- share_cookbook_folders
29
- share_role_folders
30
- end
31
-
32
- def provision!
33
- verify_binary("chef-solo")
34
- chown_provisioning_folder
35
- setup_json
36
- setup_solo_config
37
- run_chef_solo
38
- end
39
-
40
- def share_cookbook_folders
41
- host_cookbook_paths.each_with_index do |cookbook, i|
42
- env.config.vm.share_folder("v-csc-#{i}", cookbook_path(i), cookbook)
43
- end
44
- end
45
-
46
- def share_role_folders
47
- host_role_paths.each_with_index do |role, i|
48
- env.config.vm.share_folder("v-csr-#{i}", role_path(i), role)
49
- end
50
- end
51
-
52
- def setup_solo_config
53
- setup_config("chef_solo_solo", "solo.rb", {
54
- :node_name => config.node_name,
55
- :provisioning_path => config.provisioning_path,
56
- :cookbooks_path => cookbooks_path,
57
- :recipe_url => config.recipe_url,
58
- :roles_path => roles_path,
59
- })
60
- end
61
-
62
- def run_chef_solo
63
- commands = ["cd #{config.provisioning_path}", "chef-solo -c solo.rb -j dna.json"]
64
-
65
- env.ui.info I18n.t("vagrant.provisioners.chef.running_solo")
66
- vm.ssh.execute do |ssh|
67
- ssh.sudo!(commands) do |channel, type, data|
68
- if type == :exit_status
69
- ssh.check_exit_status(data, commands)
70
- else
71
- env.ui.info("#{data}: #{type}")
72
- end
73
- end
74
- end
75
- end
76
-
77
- def host_folder_paths(paths)
78
- # Convert single cookbook paths such as "cookbooks" or [:vm, "cookbooks"]
79
- # into a proper array representation.
80
- paths = [paths] if paths.is_a?(String) || paths.first.is_a?(Symbol)
81
-
82
- paths.inject([]) do |acc, path|
83
- path = [:host, path] if !path.is_a?(Array)
84
- type, path = path
85
-
86
- acc << File.expand_path(path, env.root_path) if type == :host
87
- acc
88
- end
89
- end
90
-
91
- def folder_path(*args)
92
- File.join(config.provisioning_path, args.join("-"))
93
- end
94
-
95
- def folders_path(folders, folder)
96
- # Convert single cookbook paths such as "cookbooks" or [:vm, "cookbooks"]
97
- # into a proper array representation.
98
- folders = [folders] if folders.is_a?(String) || folders.first.is_a?(Symbol)
99
-
100
- # Convert each path to the proper absolute path depending on if the path
101
- # is a host path or a VM path
102
- result = []
103
- folders.each_with_index do |path, i|
104
- path = [:host, path] if !path.is_a?(Array)
105
- type, path = path
106
-
107
- result << folder_path(folder, i) if type == :host
108
- result << folder_path(path) if type == :vm
109
- end
110
-
111
- # We're lucky that ruby's string and array syntax for strings is the
112
- # same as JSON, so we can just convert to JSON here and use that
113
- result = result[0].to_s if result.length == 1
114
- result
115
- end
116
-
117
- def host_cookbook_paths
118
- host_folder_paths(config.cookbooks_path)
119
- end
120
-
121
- def host_role_paths
122
- host_folder_paths(config.roles_path)
123
- end
124
-
125
- def cookbook_path(i)
126
- folder_path("cookbooks", i)
127
- end
128
-
129
- def role_path(i)
130
- folder_path("roles", i)
131
- end
132
-
133
- def cookbooks_path
134
- folders_path(config.cookbooks_path, "cookbooks").to_json
135
- end
136
-
137
- def roles_path
138
- folders_path(config.roles_path, "roles").to_json
139
- end
140
- end
141
- end
142
- end
@@ -1,137 +0,0 @@
1
- module Vagrant
2
- module Provisioners
3
- class PuppetError < Vagrant::Errors::VagrantError
4
- error_namespace("vagrant.provisioners.puppet")
5
- end
6
-
7
- class Puppet < Base
8
- register :puppet
9
-
10
- class Config < Vagrant::Config::Base
11
- attr_accessor :manifest_file
12
- attr_accessor :manifests_path
13
- attr_accessor :module_path
14
- attr_accessor :pp_path
15
- attr_accessor :options
16
-
17
- def initialize
18
- @manifest_file = nil
19
- @manifests_path = "manifests"
20
- @module_path = nil
21
- @pp_path = "/tmp/vagrant-puppet"
22
- @options = []
23
- end
24
-
25
- # Returns the manifests path expanded relative to the root path of the
26
- # environment.
27
- def expanded_manifests_path
28
- Pathname.new(manifests_path).expand_path(env.root_path)
29
- end
30
-
31
- # Returns the manifest file if set otherwise returns the box name pp file
32
- # which may or may not exist.
33
- def computed_manifest_file
34
- manifest_file || "#{top.vm.box}.pp"
35
- end
36
-
37
- # Returns the module paths as an array of paths expanded relative to the
38
- # root path.
39
- def expanded_module_paths
40
- return [] if !module_path
41
-
42
- # Get all the paths and expand them relative to the root path, returning
43
- # the array of expanded paths
44
- paths = module_path
45
- paths = [paths] if !paths.is_a?(Array)
46
- paths.map do |path|
47
- Pathname.new(path).expand_path(env.root_path)
48
- end
49
- end
50
-
51
- def validate(errors)
52
- super
53
-
54
- # Manifests path/file validation
55
- if !expanded_manifests_path.directory?
56
- errors.add(I18n.t("vagrant.provisioners.puppet.manifests_path_missing", :path => expanded_manifests_path))
57
- else
58
- if !expanded_manifests_path.join(computed_manifest_file).file?
59
- errors.add(I18n.t("vagrant.provisioners.puppet.manifest_missing", :manifest => computed_manifest_file))
60
- end
61
- end
62
-
63
- # Module paths validation
64
- expanded_module_paths.each do |path|
65
- if !path.directory?
66
- errors.add(I18n.t("vagrant.provisioners.puppet.module_path_missing", :path => path))
67
- end
68
- end
69
- end
70
- end
71
-
72
- def prepare
73
- set_module_paths
74
- share_manifests
75
- share_module_paths
76
- end
77
-
78
- def provision!
79
- verify_binary("puppet")
80
- run_puppet_client
81
- end
82
-
83
- def share_manifests
84
- env.config.vm.share_folder("manifests", manifests_guest_path, config.expanded_manifests_path)
85
- end
86
-
87
- def share_module_paths
88
- count = 0
89
- @module_paths.each do |from, to|
90
- # Sorry for the cryptic key here, but VirtualBox has a strange limit on
91
- # maximum size for it and its something small (around 10)
92
- env.config.vm.share_folder("v-pp-m#{count}", to, from)
93
- count += 1
94
- end
95
- end
96
-
97
- def set_module_paths
98
- @module_paths = {}
99
- config.expanded_module_paths.each_with_index do |path, i|
100
- @module_paths[path] = File.join(config.pp_path, "modules-#{i}")
101
- end
102
- end
103
-
104
- def manifests_guest_path
105
- File.join(config.pp_path, "manifests")
106
- end
107
-
108
- def verify_binary(binary)
109
- vm.ssh.execute do |ssh|
110
- ssh.sudo!("which #{binary}", :error_class => PuppetError, :_key => :puppet_not_detected, :binary => binary)
111
- end
112
- end
113
-
114
- def run_puppet_client
115
- options = [config.options].flatten
116
- options << "--modulepath '#{@module_paths.values.join(':')}'" if !@module_paths.empty?
117
- options << config.computed_manifest_file
118
- options = options.join(" ")
119
-
120
- commands = ["cd #{manifests_guest_path}",
121
- "puppet #{options}"]
122
-
123
- env.ui.info I18n.t("vagrant.provisioners.puppet.running_puppet", :manifest => config.computed_manifest_file)
124
-
125
- vm.ssh.execute do |ssh|
126
- ssh.sudo! commands do |ch, type, data|
127
- if type == :exit_status
128
- ssh.check_exit_status(data, commands)
129
- else
130
- env.ui.info(data)
131
- end
132
- end
133
- end
134
- end
135
- end
136
- end
137
- end
@@ -1,55 +0,0 @@
1
- module Vagrant
2
- module Provisioners
3
- class PuppetServerError < Vagrant::Errors::VagrantError
4
- error_namespace("vagrant.provisioners.puppet_server")
5
- end
6
-
7
- class PuppetServer < Base
8
- register :puppet_server
9
-
10
- class Config < Vagrant::Config::Base
11
- attr_accessor :puppet_server
12
- attr_accessor :puppet_node
13
- attr_accessor :options
14
-
15
- def initialize
16
- @puppet_server = "puppet"
17
- @puppet_node = "puppet_node"
18
- @options = []
19
- end
20
- end
21
-
22
- def provision!
23
- verify_binary("puppetd")
24
- run_puppetd_client
25
- end
26
-
27
- def verify_binary(binary)
28
- vm.ssh.execute do |ssh|
29
- ssh.sudo!("which #{binary}", :error_class => PuppetServerError, :_key => :puppetd_not_detected, :binary => binary)
30
- end
31
- end
32
-
33
- def run_puppetd_client
34
- options = config.options
35
- options = options.join(" ") if options.is_a?(Array)
36
- if config.puppet_node
37
- cn = config.puppet_node
38
- else
39
- cn = env.config.vm.box
40
- end
41
-
42
- commands = "puppetd #{options} --server #{config.puppet_server} --certname #{cn}"
43
-
44
- env.ui.info I18n.t("vagrant.provisioners.puppet_server.running_puppetd")
45
-
46
- vm.ssh.execute do |ssh|
47
- ssh.sudo!(commands) do |channel, type, data|
48
- ssh.check_exit_status(data, commands) if type == :exit_status
49
- env.ui.info(data) if type != :exit_status
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end