mccloud 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +13 -8
- data/.rvmrc +2 -0
- data/Gemfile +10 -1
- data/Guardfile +10 -0
- data/README.md +453 -89
- data/Rakefile +29 -2
- data/bin/mccloud +17 -116
- data/bin/mccloud_old +159 -0
- data/doc/old-README.md +81 -0
- data/lib/mccloud/cli.rb +55 -0
- data/lib/mccloud/command/balance.rb +21 -0
- data/lib/mccloud/command/base.rb +106 -0
- data/lib/mccloud/command/bootstrap.rb +12 -24
- data/lib/mccloud/command/define.rb +18 -0
- data/lib/mccloud/command/destroy.rb +12 -13
- data/lib/mccloud/command/forward.rb +29 -0
- data/lib/mccloud/command/group_base.rb +107 -0
- data/lib/mccloud/command/halt.rb +11 -13
- data/lib/mccloud/command/helpers.rb +13 -0
- data/lib/mccloud/command/image.rb +37 -0
- data/lib/mccloud/command/init.rb +8 -504
- data/lib/mccloud/command/init_vagrant.rb +14 -0
- data/lib/mccloud/command/ip.rb +32 -0
- data/lib/mccloud/command/ips.rb +22 -0
- data/lib/mccloud/command/keypair.rb +27 -0
- data/lib/mccloud/command/keystore.rb +29 -0
- data/lib/mccloud/command/lb.rb +38 -0
- data/lib/mccloud/command/named_base.rb +14 -0
- data/lib/mccloud/command/package.rb +17 -0
- data/lib/mccloud/command/provider.rb +30 -0
- data/lib/mccloud/command/provision.rb +10 -24
- data/lib/mccloud/command/reload.rb +12 -6
- data/lib/mccloud/command/sorry.rb +20 -0
- data/lib/mccloud/command/ssh.rb +11 -45
- data/lib/mccloud/command/status.rb +14 -35
- data/lib/mccloud/command/template.rb +16 -0
- data/lib/mccloud/command/undefine.rb +23 -0
- data/lib/mccloud/command/up.rb +8 -62
- data/lib/mccloud/command/version.rb +14 -0
- data/lib/mccloud/command/vm.rb +27 -0
- data/lib/mccloud/command.rb +36 -0
- data/lib/mccloud/config/collection.rb +107 -0
- data/lib/mccloud/config/component.rb +20 -0
- data/lib/mccloud/config/definition.rb +35 -0
- data/lib/mccloud/config/keypair.rb +36 -0
- data/lib/mccloud/config/mccloud.rb +39 -0
- data/lib/mccloud/config/provider.rb +55 -0
- data/lib/mccloud/config/template.rb +35 -0
- data/lib/mccloud/config.rb +128 -41
- data/lib/mccloud/definition.rb +104 -0
- data/lib/mccloud/definitions.rb +91 -0
- data/lib/mccloud/environment.rb +222 -0
- data/lib/mccloud/error.rb +20 -0
- data/lib/mccloud/generator.rb +49 -0
- data/lib/mccloud/keypair.rb +48 -0
- data/lib/mccloud/mccloudfile.rb +78 -0
- data/lib/mccloud/provider/aws/image.rb +107 -0
- data/lib/mccloud/provider/aws/ip/associate.rb +33 -0
- data/lib/mccloud/provider/aws/ip.rb +31 -0
- data/lib/mccloud/provider/aws/keystore.rb +21 -0
- data/lib/mccloud/provider/aws/lb/associate.rb +53 -0
- data/lib/mccloud/provider/aws/lb/sorry.rb +14 -0
- data/lib/mccloud/provider/aws/lb.rb +37 -0
- data/lib/mccloud/provider/aws/provider/image_destroy.rb +27 -0
- data/lib/mccloud/provider/aws/provider/image_list.rb +19 -0
- data/lib/mccloud/provider/aws/provider/ip_list.rb +17 -0
- data/lib/mccloud/provider/aws/provider/keystore_list.rb +22 -0
- data/lib/mccloud/provider/aws/provider/keystore_sync.rb +62 -0
- data/lib/mccloud/provider/aws/provider/lb_list.rb +21 -0
- data/lib/mccloud/provider/aws/provider/old_deregister.rb +39 -0
- data/lib/mccloud/provider/aws/provider/old_flavors.rb +18 -0
- data/lib/mccloud/provider/aws/provider/old_ips.rb +42 -0
- data/lib/mccloud/provider/aws/provider/old_loadbalance.rb +46 -0
- data/lib/mccloud/provider/aws/provider/old_package.rb +75 -0
- data/lib/mccloud/provider/aws/provider/old_sorry.rb +51 -0
- data/lib/mccloud/provider/aws/provider/old_status.rb +119 -0
- data/lib/mccloud/provider/aws/provider/old_validate.rb +51 -0
- data/lib/mccloud/provider/aws/provider/status.rb +58 -0
- data/lib/mccloud/provider/aws/provider.rb +219 -0
- data/lib/mccloud/provider/aws/stack/old_destroy.rb +43 -0
- data/lib/mccloud/provider/aws/stack/old_up.rb +59 -0
- data/lib/mccloud/provider/aws/stack/old_vm.rb +98 -0
- data/lib/mccloud/provider/aws/stack.rb +243 -0
- data/lib/mccloud/provider/aws/vm/bootstrap.rb +13 -0
- data/lib/mccloud/provider/aws/vm/destroy.rb +21 -0
- data/lib/mccloud/provider/aws/vm/forward.rb +17 -0
- data/lib/mccloud/provider/aws/vm/halt.rb +24 -0
- data/lib/mccloud/provider/aws/vm/package.rb +63 -0
- data/lib/mccloud/provider/aws/vm/provision.rb +25 -0
- data/lib/mccloud/provider/aws/vm/reload.rb +13 -0
- data/lib/mccloud/provider/aws/vm/resume.rb +0 -0
- data/lib/mccloud/provider/aws/vm/rsync.rb +11 -0
- data/lib/mccloud/provider/aws/vm/scp.rb +21 -0
- data/lib/mccloud/provider/aws/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/aws/vm/suspend.rb +0 -0
- data/lib/mccloud/provider/aws/vm/up.rb +133 -0
- data/lib/mccloud/provider/aws/vm.rb +123 -0
- data/lib/mccloud/{type → provider/core}/forwarding.rb +6 -3
- data/lib/mccloud/provider/core/ip.rb +24 -0
- data/lib/mccloud/provider/core/keystore.rb +23 -0
- data/lib/mccloud/provider/core/lb.rb +23 -0
- data/lib/mccloud/provider/core/provider.rb +99 -0
- data/lib/mccloud/provider/core/vm/old_halt.rb +19 -0
- data/lib/mccloud/{generators.rb → provider/core/vm/old_init.rb} +0 -0
- data/lib/mccloud/provider/core/vm/old_multi.rb +60 -0
- data/lib/mccloud/provider/core/vm/old_reload.rb +11 -0
- data/lib/mccloud/{command/server.rb → provider/core/vm/old_server.rb} +2 -2
- data/lib/mccloud/provider/core/vm/old_ssh_command.rb +21 -0
- data/lib/mccloud/{command/suspend.rb → provider/core/vm/old_suspend.rb} +2 -2
- data/lib/mccloud/provider/core/vm/old_wizard.rb +511 -0
- data/lib/mccloud/provider/core/vm/rsync.rb +67 -0
- data/lib/mccloud/provider/core/vm/ssh.rb +137 -0
- data/lib/mccloud/provider/core/vm/ssh_bootstrap.rb +62 -0
- data/lib/mccloud/provider/core/vm/ssh_forward.rb +47 -0
- data/lib/mccloud/provider/core/vm.rb +121 -0
- data/lib/mccloud/provider/fog/fogconfig.rb +44 -0
- data/lib/mccloud/provider/fog/provider.rb +46 -0
- data/lib/mccloud/provider/host/provider/status.rb +12 -0
- data/lib/mccloud/provider/host/provider.rb +85 -0
- data/lib/mccloud/provider/host/vm/bootstrap.rb +11 -0
- data/lib/mccloud/provider/host/vm/forward.rb +12 -0
- data/lib/mccloud/provider/host/vm/provision.rb +19 -0
- data/lib/mccloud/provider/host/vm/scp.rb +35 -0
- data/lib/mccloud/provider/host/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/host/vm.rb +28 -0
- data/lib/mccloud/provider/libvirt/provider/status.rb +43 -0
- data/lib/mccloud/provider/libvirt/provider.rb +96 -0
- data/lib/mccloud/provider/libvirt/vm/bootstrap.rb +17 -0
- data/lib/mccloud/provider/libvirt/vm/destroy.rb +33 -0
- data/lib/mccloud/provider/libvirt/vm/forward.rb +12 -0
- data/lib/mccloud/provider/libvirt/vm/halt.rb +20 -0
- data/lib/mccloud/provider/libvirt/vm/provision.rb +25 -0
- data/lib/mccloud/provider/libvirt/vm/reload.rb +13 -0
- data/lib/mccloud/provider/libvirt/vm/rsync.rb +11 -0
- data/lib/mccloud/provider/libvirt/vm/scp.rb +15 -0
- data/lib/mccloud/provider/libvirt/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/libvirt/vm/up.rb +65 -0
- data/lib/mccloud/provider/libvirt/vm.rb +67 -0
- data/lib/mccloud/provider/script/provider/status.rb +12 -0
- data/lib/mccloud/provider/script/provider.rb +125 -0
- data/lib/mccloud/provider/script/vm.rb +13 -0
- data/lib/mccloud/provider/vagrant/provider/status.rb +14 -0
- data/lib/mccloud/provider/vagrant/provider.rb +135 -0
- data/lib/mccloud/provider/vagrant/vm/destroy.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/forward.rb +12 -0
- data/lib/mccloud/provider/vagrant/vm/halt.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/provision.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/reload.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/resume.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/suspend.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/up.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm.rb +46 -0
- data/lib/mccloud/provider/vmfusion/provider/status.rb +24 -0
- data/lib/mccloud/provider/vmfusion/provider.rb +98 -0
- data/lib/mccloud/provider/vmfusion/vm/forward.rb +12 -0
- data/lib/mccloud/provider/vmfusion/vm/halt.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm/resume.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm/suspend.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm/up.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm.rb +47 -0
- data/lib/mccloud/provisioner/chef_solo.rb +193 -79
- data/lib/mccloud/provisioner/puppet.rb +205 -32
- data/lib/mccloud/provisioner/shell.rb +48 -0
- data/lib/mccloud/template.rb +74 -0
- data/lib/mccloud/templates/Mccloudfile.erb +212 -39
- data/lib/mccloud/templates/{bootstrap-centos-rubysource-1.8.7.sh → bootstrap/bootstrap-centos-rubysource-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-centos-rvm-1.8.7.sh → bootstrap/bootstrap-centos-rvm-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-centos-rvm-1.9.2.sh → bootstrap/bootstrap-centos-rvm-1.9.2.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-centos-rvm-ree-1.8.7.sh → bootstrap/bootstrap-centos-rvm-ree-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/bootstrap/bootstrap-chef-omnibus.sh +8 -0
- data/lib/mccloud/templates/{bootstrap-custom.sh → bootstrap/bootstrap-custom.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-ubuntu-rvm-1.8.7.sh → bootstrap/bootstrap-ubuntu-rvm-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-ubuntu-system.sh → bootstrap/bootstrap-ubuntu-system.sh} +0 -0
- data/lib/mccloud/templates/locales/en.yml +30 -0
- data/lib/mccloud/templates/vm.erb +9 -0
- data/lib/mccloud/templates.rb +35 -0
- data/lib/mccloud/ui.rb +82 -0
- data/lib/mccloud/util/rostruct.rb +24 -0
- data/lib/mccloud/util/rsync.rb +12 -8
- data/lib/mccloud/util/ssh.rb +18 -12
- data/lib/mccloud/util/sshkey.rb +3 -2
- data/lib/mccloud/version.rb +4 -1
- data/lib/mccloud/vm.rb +62 -0
- data/lib/mccloud/vms.rb +60 -0
- data/lib/mccloud.rb +24 -1
- data/mccloud.gemspec +12 -3
- data/samples/Mccloudfile +117 -0
- data/samples/bitnami_drupal_cloud.json +102 -0
- data/samples/bootstrap-ubuntu-system.sh +16 -0
- data/samples/mcollective_cloud.json +198 -0
- data/samples/stack_cloud.json +93 -0
- data/samples/stacks.txt +5 -0
- data/spec/commands/define_spec.rb +96 -0
- data/spec/commands/init_spec.rb +30 -0
- data/spec/environment/environment_spec.rb +26 -0
- data/spec/generator_spec.rb +30 -0
- data/spec/keypair_spec.rb +38 -0
- data/spec/provider/aws/credentials_spec.rb +37 -0
- data/spec/provisioner/puppet/Mccloud-puppet-test +32 -0
- data/spec/provisioner/puppet/puppet_spec.rb +110 -0
- data/spec/spec_helper.rb +0 -0
- data/templates/ubuntu-10.10-server-amd64/aws.json +3 -0
- data/templates/ubuntu-10.10-server-amd64/bootstrap.sh +16 -0
- data/templates/ubuntu-10.10-server-amd64/definition.old +51 -0
- data/templates/ubuntu-10.10-server-amd64/mccloud.erb +6 -0
- metadata +293 -67
- data/Gemfile.lock +0 -53
- data/lib/mccloud/command/boot.rb +0 -12
- data/lib/mccloud/command/command.rb +0 -21
- data/lib/mccloud/command/multi.rb +0 -60
- data/lib/mccloud/configurator/lb.rb +0 -26
- data/lib/mccloud/configurator/mccloud.rb +0 -33
- data/lib/mccloud/configurator/vm.rb +0 -37
- data/lib/mccloud/provisioner/vagrant/base.rb +0 -63
- data/lib/mccloud/provisioner/vagrant/chef.rb +0 -130
- data/lib/mccloud/provisioner/vagrant/chef_server.rb +0 -103
- data/lib/mccloud/provisioner/vagrant/chef_solo.rb +0 -142
- data/lib/mccloud/provisioner/vagrant/puppet.rb +0 -137
- data/lib/mccloud/provisioner/vagrant/puppet_server.rb +0 -55
- data/lib/mccloud/provisioner/vagrant/shell.rb +0 -52
- data/lib/mccloud/session.rb +0 -206
- data/lib/mccloud/type/lb.rb +0 -34
- data/lib/mccloud/type/vm.rb +0 -47
- 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
|