vagrant-opsworks 0.0.5

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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.simplecov +7 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +44 -0
  6. data/Guardfile +17 -0
  7. data/Thorfile +59 -0
  8. data/integration/Gemfile +11 -0
  9. data/integration/Vagrantfile +8 -0
  10. data/lib/berkshelf-monkey-patch.rb +26 -0
  11. data/lib/vagrant-opsworks/action/checkout_cookbooks.rb +71 -0
  12. data/lib/vagrant-opsworks/action/configure_berks.rb +26 -0
  13. data/lib/vagrant-opsworks/action/configure_chef.rb +28 -0
  14. data/lib/vagrant-opsworks/action/create_roles.rb +69 -0
  15. data/lib/vagrant-opsworks/action/inject_boxes.rb +44 -0
  16. data/lib/vagrant-opsworks/action/merge_cookbooks.rb +27 -0
  17. data/lib/vagrant-opsworks/action/setup_environment.rb +34 -0
  18. data/lib/vagrant-opsworks/action.rb +51 -0
  19. data/lib/vagrant-opsworks/application.rb +26 -0
  20. data/lib/vagrant-opsworks/client/app.rb +50 -0
  21. data/lib/vagrant-opsworks/client/instance.rb +23 -0
  22. data/lib/vagrant-opsworks/client/layer.rb +39 -0
  23. data/lib/vagrant-opsworks/client/stack.rb +47 -0
  24. data/lib/vagrant-opsworks/client.rb +46 -0
  25. data/lib/vagrant-opsworks/client_old.rb +94 -0
  26. data/lib/vagrant-opsworks/config.rb +156 -0
  27. data/lib/vagrant-opsworks/custom_json.rb +22 -0
  28. data/lib/vagrant-opsworks/env.rb +19 -0
  29. data/lib/vagrant-opsworks/env_old.rb +162 -0
  30. data/lib/vagrant-opsworks/errors.rb +13 -0
  31. data/lib/vagrant-opsworks/loader/client.rb +19 -0
  32. data/lib/vagrant-opsworks/loader/instances.rb +78 -0
  33. data/lib/vagrant-opsworks/loader/stack.rb +27 -0
  34. data/lib/vagrant-opsworks/loader.rb +24 -0
  35. data/lib/vagrant-opsworks/plugin.rb +32 -0
  36. data/lib/vagrant-opsworks/stack/app.rb +0 -0
  37. data/lib/vagrant-opsworks/stack/instance.rb +62 -0
  38. data/lib/vagrant-opsworks/stack/stack.rb +84 -0
  39. data/lib/vagrant-opsworks/stack.rb +20 -0
  40. data/lib/vagrant-opsworks/util/configuration_builder.rb +44 -0
  41. data/lib/vagrant-opsworks/util/configuration_hash.rb +27 -0
  42. data/lib/vagrant-opsworks/util/dummy_configuration.rb +33 -0
  43. data/lib/vagrant-opsworks/util/env_helpers.rb +44 -0
  44. data/lib/vagrant-opsworks/version.rb +5 -0
  45. data/lib/vagrant-opsworks.rb +24 -0
  46. data/locales/en.yml +13 -0
  47. data/provisioning/client.yml +16 -0
  48. data/provisioning/install-agent.sh +75 -0
  49. data/spec/spec_helper.rb +23 -0
  50. data/spec/unit/vagrant-opsworks/action/create_roles_spec.rb +5 -0
  51. data/spec/unit/vagrant-opsworks/config_spec.rb +109 -0
  52. data/vagrant-opsworks.gemspec +34 -0
  53. metadata +199 -0
@@ -0,0 +1,27 @@
1
+ module VagrantPlugins::OpsWorks::Loader
2
+ class Stack
3
+
4
+ def initialize(app, opsworks)
5
+ @app = app
6
+ @opsworks = opsworks
7
+ end
8
+
9
+ def call(env)
10
+ return @app.pass(env) unless @opsworks.enabled
11
+
12
+ VagrantPlugins::OpsWorks::Loader.select_vmbox(env[:config], env[:client].stack.default_os)
13
+
14
+ env[:config].vm.provision :shell do |s|
15
+ s.inline = File.read(VagrantPlugins::OpsWorks.source_root.join('provisioning/install-agent.sh'))
16
+ s.args = [@opsworks.agent_version, @opsworks.agent_bucket, @opsworks.asset_bucket]
17
+ end
18
+
19
+ env[:config].vm.provision :shell do |s|
20
+ s.inline = "DEBIAN_FRONTEND=noninteractive apt-get -qq install acl &&setfacl -m o:rw $SSH_AUTH_SOCK && setfacl -m o:x $(dirname $SSH_AUTH_SOCK)"
21
+ end
22
+
23
+ @app.pass(env)
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Loader
4
+ require_relative 'loader/client'
5
+ require_relative 'loader/stack'
6
+ require_relative 'loader/instances'
7
+
8
+ class << self
9
+
10
+ def select_vmbox(config, os)
11
+ suffix = /x86_64/ =~ RUBY_PLATFORM ? '' : '-i386'
12
+ case os
13
+ when /^Ubuntu/
14
+ version = os.split(' ')[1]
15
+ config.vm.box = "chef/ubuntu-#{version}#{suffix}"
16
+ else
17
+ config.vm.box = "chef/centos-6.5#{suffix}"
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ class Plugin < ::Vagrant.plugin('2')
4
+ require_relative 'action'
5
+
6
+ name 'OpsWorks'
7
+ description 'A Vagrant plugin to provision a stack configured in Amazon OpsWorks'
8
+
9
+ class << self
10
+ def provision(hook)
11
+ require 'berkshelf/vagrant/env_helpers'
12
+ require 'berkshelf/vagrant/action/configure_chef'
13
+ hook.prepend(VagrantPlugins::OpsWorks::Action.configure_berks)
14
+
15
+ hook.before(::Vagrant::Action::Builtin::ConfigValidate, VagrantPlugins::OpsWorks::Action.setup)
16
+ end
17
+ end
18
+
19
+ action_hook(:opsworks_setup, :environment_load) do |hook|
20
+ hook.append(VagrantPlugins::OpsWorks::Action.prepare_environment)
21
+ end
22
+
23
+ action_hook(:opsworks_provision, :machine_action_up, &method(:provision))
24
+ action_hook(:opsworks_provision, :machine_action_reload, &method(:provision))
25
+ action_hook(:opsworks_provision, :machine_action_provision, &method(:provision))
26
+
27
+ config(:opsworks) do
28
+ Config
29
+ end
30
+ end
31
+ end
32
+ end
File without changes
@@ -0,0 +1,62 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Stack
4
+ class Instance
5
+ include VagrantPlugins::OpsWorks::Stack
6
+
7
+ # @return [String]
8
+ # hostname of the instance
9
+ attr_reader :hostname
10
+
11
+ # @return [String]
12
+ # operating system of the instance
13
+ attr_reader :os
14
+
15
+ def initialize(opsworks, config)
16
+ @opsworks = opsworks
17
+ @hostname = config[:hostname]
18
+ @os = config[:os]
19
+ @layers = config[:layer_ids]
20
+ end
21
+
22
+ def roles
23
+ layers.map{|l| l[:shortname]}
24
+ end
25
+
26
+ def packages
27
+ layers.map{|l| l[:packages]}.flatten
28
+ end
29
+
30
+ def layers
31
+ @opsworks.layers.select{|l|
32
+ @layers.include?(l[:layer_id]) && !@opsworks.ignore_layers.include?(l[:shortname])
33
+ }
34
+ end
35
+
36
+ def get_proc
37
+ return Proc.new { |config|
38
+ config.vm.define @hostname do |node|
39
+ node.vm.hostname = "#{@hostname}#{@opsworks.hostname_suffix}"
40
+ select_vmbox(node, @os)
41
+
42
+ #node.vm.provision :shell, inline: "DEBIAN_FRONTEND=noninteractive apt-get -qq install #{packages.join(' ')}"
43
+
44
+ node.vm.provision :chef_solo do |chef|
45
+ roles.each{|role| chef.add_role role }
46
+ #chef.add_recipe 'hadoop'
47
+ pkgs = packages.map{|x| [x, nil]}.to_h
48
+ custom_json = @opsworks.stack.custom_json
49
+ custom_json[:dependencies] = {} unless custom_json.has_key?(:dependencies)
50
+ custom_json[:dependencies][:debs] = {} unless custom_json[:dependencies].has_key?(:debs)
51
+ custom_json[:dependencies][:debs].merge!(pkgs)
52
+ custom_json[:deploy]['rc2010'][:scm][:revision] = 'master'
53
+ chef.json = custom_json
54
+ end
55
+ end
56
+ }
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,84 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Stack
4
+ class Stack
5
+ include VagrantPlugins::OpsWorks::Stack
6
+
7
+ # @return [String]
8
+ attr_reader :name
9
+
10
+ def initialize(opsworks, config)
11
+ @opsworks = opsworks
12
+ @name = config[:name]
13
+ @custom_json = config[:custom_json]
14
+ @os = config[:default_os]
15
+ @custom_cookbooks = config[:use_custom_cookbooks]
16
+ @configuration_manager = config[:configuration_manager]
17
+ @chef_configuration = config[:chef_configuration]
18
+ @cookbooks_source = config[:custom_cookbooks_source]
19
+ end
20
+
21
+ def berks_enabled?
22
+ @chef_configuration[:manage_berkshelf]
23
+ end
24
+
25
+ def custom_cookbooks?
26
+ @custom_cookbooks
27
+ end
28
+
29
+ def custom_cookbooks
30
+ case @cookbooks_source[:type]
31
+ when 'git'
32
+ {
33
+ :type => 'git',
34
+ :url => @cookbooks_source[:url],
35
+ :ref => @cookbooks_source[:revision]
36
+ }
37
+ end
38
+ end
39
+
40
+ def opsworks_cookbooks
41
+ {
42
+ :url => 'git@github.com:aws/opsworks-cookbooks.git',
43
+ :ref => "release-chef-#{@configuration_manager[:version]}"
44
+ }
45
+ end
46
+
47
+ # @return [Hash]
48
+ def custom_json
49
+ merge_hash(merge_hash({:deploy => @opsworks.apps}, JSON.parse(@custom_json)), @opsworks.supplimental_json)
50
+ end
51
+
52
+ def get_proc
53
+ return Proc.new { |config|
54
+ select_vmbox(config, @os)
55
+
56
+ config.vm.provision :shell, inline: File.read(VagrantPlugins::OpsWorks.source_root.join('provisioning/install-agent.sh')), args: [@opsworks.agent_version, @opsworks.agent_bucket, @opsworks.asset_bucket]
57
+
58
+ # Fix ssh agent forwarding for sudo as a non privileged user
59
+ # TODO: incorporate the modified template to prevent $SSH_AUTH_SOCK from being reset
60
+ # TODO: inject this into chef so it can run after the user is created
61
+ config.vm.provision :shell, inline: "DEBIAN_FRONTEND=noninteractive apt-get -qq install acl"
62
+ config.vm.provision :shell, inline: "cat /etc/passwd | awk -F':' '{ print $1 }' | grep deploy && setfacl -m u:deploy:rw $SSH_AUTH_SOCK && setfacl -m u:deploy:x $(dirname $SSH_AUTH_SOCK) || true", run: "always"
63
+ }
64
+ end
65
+
66
+ protected
67
+
68
+ def merge_hash(old, new)
69
+ new.each_pair{|current_key,new_value|
70
+ old_value = old[current_key]
71
+
72
+ old[current_key] = if old_value.is_a?(Hash) && new_value.is_a?(Hash)
73
+ merge_hash(old_value, new_value)
74
+ else
75
+ new_value
76
+ end
77
+ }
78
+ old
79
+ end
80
+
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,20 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Stack
4
+ require_relative 'stack/stack'
5
+ require_relative 'stack/instance'
6
+
7
+ def select_vmbox(config, os)
8
+ suffix = /x86_64/ =~ RUBY_PLATFORM ? '' : '-i386'
9
+ case os
10
+ when /^Ubuntu/
11
+ version = os.split(' ')[1]
12
+ config.vm.box = "chef/ubuntu-#{version}#{suffix}"
13
+ else
14
+ config.vm.box = "chef/centos-6.5#{suffix}"
15
+ end
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,44 @@
1
+ module VagrantPlugins::OpsWorks::Util
2
+ class ConfigurationBuilder
3
+
4
+ # @return [Array]
5
+ attr_reader :stack
6
+
7
+ def initialize(config)
8
+ @opsworks = config
9
+ @runner = ::Vagrant::Action::Runner.new({:action_name => :opsworks_configuration})
10
+ @stack = []
11
+ @env = {}
12
+ end
13
+
14
+ def use(loader, *args, &block)
15
+ self.stack << finalize_loader(loader, args, block)
16
+
17
+ self
18
+ end
19
+
20
+ def call(config)
21
+ @env.merge!({:config => config})
22
+ pass(@env)
23
+ end
24
+
25
+ def pass(env)
26
+ loader = @stack.shift
27
+ @runner.run(loader, env) if loader
28
+ end
29
+
30
+ def finalize_loader(klass, args, block)
31
+ args ||= []
32
+
33
+ if klass.is_a?(Class)
34
+ klass.new(self, @opsworks, *args, &block)
35
+ elsif klass.respond_to?(:call)
36
+ lambda do |e|
37
+ klass.call(e)
38
+ self.call(e)
39
+ end
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ require 'vagrant/util/hash_with_indifferent_access'
2
+
3
+ module VagrantPlugins::OpsWorks::Util
4
+ class DummyConfiguration < ::Vagrant::Util::HashWithIndifferentAccess
5
+
6
+ def method_missing(m, *args, &block)
7
+ Proxy.new
8
+ end
9
+
10
+ private
11
+
12
+ def set_or_return(key, value)
13
+ if value.nil?
14
+ return self[key]
15
+ else
16
+ self[key] = value
17
+ end
18
+ end
19
+
20
+ class Proxy
21
+ def method_missing(m, *args, &block)
22
+ self
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ require 'vagrant/util/hash_with_indifferent_access'
2
+
3
+ module VagrantPlugins::OpsWorks::Util
4
+ class DummyConfiguration < ::Vagrant::Util::HashWithIndifferentAccess
5
+
6
+ def initialize(response={})
7
+ response.each do |k,v|
8
+ send(k, v)
9
+ end
10
+ end
11
+
12
+ def method_missing(m, *args, &block)
13
+ Proxy.new
14
+ end
15
+
16
+ private
17
+
18
+ def set_or_return(key, value)
19
+ if value.nil?
20
+ return self[key]
21
+ else
22
+ self[key] = value
23
+ end
24
+ end
25
+
26
+ class Proxy
27
+ def method_missing(m, *args, &block)
28
+ self
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ module VagrantPlugins::OpsWorks::Util
2
+ module EnvHelpers
3
+
4
+ def enabled?(env)
5
+ opsworks_config(env).enabled
6
+ end
7
+
8
+ def provisioners(name, env)
9
+ env[:machine].config.vm.provisioners.select { |p| p.name == name }
10
+ end
11
+
12
+ def chef_solo?(env)
13
+ provisioners(:chef_solo, env).any?
14
+ end
15
+
16
+ def stack_id(env)
17
+ opsworks_config(env).stack_id
18
+ end
19
+
20
+ def opsworks_config(env)
21
+ config(env).opsworks
22
+ end
23
+
24
+ protected
25
+
26
+ def config(env)
27
+ if env.has_key?(:env)
28
+ config, _ = env[:env].config_loader.load([:home, :root])
29
+ elsif env.has_key?(:machine)
30
+ config = env[:machine].config
31
+ end
32
+ config
33
+ end
34
+
35
+ def environment(env)
36
+ if env.has_key?(:env)
37
+ env[:env]
38
+ elsif env.has_key?(:machine)
39
+ env[:machine].env
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ VERSION = '0.0.5'
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ begin
2
+ require 'vagrant'
3
+ rescue LoadError
4
+ raise 'The Vagrant OpsWorks plugin must be run within Vagrant.'
5
+ end
6
+
7
+ require 'berkshelf-monkey-patch'
8
+
9
+ I18n.load_path << File.expand_path('../../locales/en.yml', __FILE__)
10
+
11
+ require 'vagrant-opsworks/version'
12
+ require 'vagrant-opsworks/config'
13
+ require 'vagrant-opsworks/errors'
14
+ require 'vagrant-opsworks/plugin'
15
+
16
+ module VagrantPlugins
17
+ module OpsWorks
18
+ class << self
19
+ def source_root
20
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
21
+ end
22
+ end
23
+ end
24
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,13 @@
1
+ en:
2
+ vagrant_opsworks:
3
+ action:
4
+ cookbooks:
5
+ checkout: "Checking out %{repo_name} from %{repo_url} with revision %{ref}..."
6
+ config:
7
+ not_a_bool: "A value for %{config_key} can only be true or false, not type '%{value}'"
8
+ environment:
9
+ cache_dir: "OpsWorks Cache Directory: %{cache_dir}"
10
+ stack_id: "OpsWorks Stack ID: %{stack_id}"
11
+ errors:
12
+ connect: "Failed to connect to OpsWorks API"
13
+
@@ -0,0 +1,16 @@
1
+ # opsworks chef client config file
2
+ # /var/lib/aws/opsworks/client.yml
3
+ ---
4
+
5
+ :local_mode: true
6
+ :log_level: :info
7
+ :ohai_plugin_path: /opt/aws/opsworks/current/plugins
8
+ :cookbook_path: ["/opt/aws/opsworks/current/merged-cookbooks"]
9
+ :default_cookbooks_path: /opt/aws/opsworks/current/cookbooks
10
+ :site_cookbooks_path: /opt/aws/opsworks/current/site-cookbooks
11
+ :merged_cookbooks_path: /opt/aws/opsworks/current/merged-cookbooks
12
+ :berkshelf_cookbooks_path: /opt/aws/opsworks/current/berkshelf-cookbooks
13
+ :berkshelf_cache_path: /var/lib/aws/opsworks/berkshelf_cache
14
+ :file_cache_path: /var/lib/aws/opsworks/cache
15
+ :search_nodes_path: /var/lib/aws/opsworks/data/nodes
16
+ :data_bag_path: /var/lib/aws/opsworks/data/data_bags
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env bash
2
+
3
+ [[ ! -e "/opt/aws/opsworks" ]] || exit 0
4
+
5
+ OPSWORKS_VERSION=$1
6
+ OPSWORKS_AGENT_BUCKET=$2
7
+ OPSWORKS_ASSETS_BUCKET=$3
8
+
9
+ WORKING_DIR=$(mktemp -d 'opsworks-agent.XXXXXXXX')
10
+
11
+ DEBIAN_FRONTEND=noninteractive apt-get -qq update
12
+ DEBIAN_FRONTEND=noninteractive apt-get -qq install curl libxml2-dev libxslt-dev libyaml-dev
13
+
14
+ mkdir -p /{etc,opt,var/log,var/lib}/aws/opsworks /var/lib/cloud
15
+
16
+ cat <<EOF > /var/lib/aws/opsworks/client.yml
17
+ # opsworks chef client config file
18
+ # /var/lib/aws/opsworks/client.yml
19
+ ---
20
+
21
+ :local_mode: true
22
+ :log_level: :info
23
+ :ohai_plugin_path: /opt/aws/opsworks/current/plugins
24
+ :cookbook_path: ["/opt/aws/opsworks/current/merged-cookbooks"]
25
+ :default_cookbooks_path: /opt/aws/opsworks/current/cookbooks
26
+ :site_cookbooks_path: /opt/aws/opsworks/current/site-cookbooks
27
+ :merged_cookbooks_path: /opt/aws/opsworks/current/merged-cookbooks
28
+ :berkshelf_cookbooks_path: /opt/aws/opsworks/current/berkshelf-cookbooks
29
+ :berkshelf_cache_path: /var/lib/aws/opsworks/berkshelf_cache
30
+ :file_cache_path: /var/lib/aws/opsworks/cache
31
+ :search_nodes_path: /var/lib/aws/opsworks/data/nodes
32
+ :data_bag_path: /var/lib/aws/opsworks/data/data_bags
33
+ EOF
34
+
35
+ ssh-keygen -f "${WORKING_DIR}/instance_key_rsa" -t rsa -N ''
36
+
37
+ cat <<EOF > /var/lib/aws/opsworks/pre_config.yml
38
+ # opsworks-agent pre-config file
39
+ # /var/lib/aws/opsworks/pre_config.yml
40
+ ---
41
+
42
+ :hostname: `hostname`
43
+ :identity: `uuidgen`
44
+ :agent_installer_base_url: ${OPSWORKS_AGENT_BUCKET}
45
+ :agent_installer_tgz: opsworks-agent-installer.tgz
46
+ :verbose: false
47
+ :instance_service_region: us-east-1
48
+ :instance_service_endpoint: localhost
49
+ :instance_service_port: '65535'
50
+ :instance_public_key: |
51
+ `openssl rsa -in /etc/ssh/ssh_host_rsa_key -pubout | sed -e 's/^/ /'`
52
+ :instance_private_key: |
53
+ `sed -e 's/^/ /' /etc/ssh/ssh_host_rsa_key`
54
+ :charlie_public_key: |
55
+ -----BEGIN PUBLIC KEY-----
56
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAni7eKdm34oaCvGiw96Fk
57
+ lyLX+aPfInYzilkk+AY3pXF6nijpQ2cm3ZeM2EoqZFTv3a/meosNBAs3Q3Sy1e4G
58
+ 7Ibn/xwMof+iSBvimx3PGKFzNP0BhY9yS6AMEMxtmqksHb0glwmFeJcomdhxZV1F
59
+ ziWTtL6ZEyvCg0I7rxGm1ceQmD25eK90VcZVh4LJtNfnwcZRM4eC+KK9Qllxw5hW
60
+ vB4Z52JMMZbEG9MYCLydWSY9rnVkAyQ0ngJUaJ3q7JsbkBV/J5BcrGgcbioR1k+h
61
+ INRoHwBQU9WnT/x8W+N6vwJb4o6v2hBR1H2GSDLwyZ7wC8EVH+XafWYpU1g/nSEe
62
+ aQIDAQAB
63
+ -----END PUBLIC KEY-----
64
+ :wait_between_runs: '60'
65
+ EOF
66
+
67
+ wget -nv "https://${OPSWORKS_AGENT_BUCKET}/${OPSWORKS_VERSION}/opsworks-agent-installer.tgz" -P "${WORKING_DIR}"
68
+ tar xzpof "${WORKING_DIR}/opsworks-agent-installer.tgz" -C "${WORKING_DIR}"
69
+ ${WORKING_DIR}/opsworks-agent-installer/opsworks-agent/bin/installer_wrapper.sh -R ${OPSWORKS_ASSETS_BUCKET}
70
+
71
+ echo 'export PATH=$PATH:/opt/aws/opsworks/current/bin' > /etc/profile.d/opsworks_path.sh
72
+
73
+ rm -f /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc
74
+
75
+ rm -rf ${WORKING_DIR}
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'spork'
4
+ require 'simplecov'
5
+
6
+ Spork.prefork do
7
+ require 'simplecov' unless ENV['DRB']
8
+ require 'rspec'
9
+
10
+ RSpec.configure do |config|
11
+ config.treat_symbols_as_metadata_keys_with_true_values = true
12
+ config.run_all_when_everything_filtered = true
13
+ config.filter_run focus: true
14
+
15
+ config.order = 'random'
16
+ end
17
+ end
18
+
19
+ Spork.each_run do
20
+ require 'simplecov' if ENV['DRB']
21
+
22
+ require 'vagrant-opsworks'
23
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe VagrantPlugins::OpsWorks::Action::CreateRoles do
4
+
5
+ end
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ describe VagrantPlugins::OpsWorks::Config do
4
+ let(:unset_value) { described_class::UNSET_VALUE }
5
+ subject { described_class.new.tap { |s| s.finalize! } }
6
+
7
+ context 'when enabled is not set' do
8
+ before(:each) do
9
+ subject.enabled = unset_value
10
+ end
11
+
12
+ context 'when stack_id is not set' do
13
+ before do
14
+ subject.stack_id = unset_value
15
+ subject.finalize!
16
+ end
17
+
18
+ it 'it sets the value of enabled to false' do
19
+ subject.enabled.should be false
20
+ end
21
+ end
22
+
23
+ context 'when stack_id is set' do
24
+ before do
25
+ subject.stack_id = 'foo'
26
+ subject.finalize!
27
+ end
28
+
29
+ it 'it sets the value of enabled to true' do
30
+ subject.enabled.should be true
31
+ end
32
+ end
33
+ end
34
+
35
+ context 'when enabled is set' do
36
+ let(:enabled) { 'foo' }
37
+
38
+ before(:each) do
39
+ subject.enabled = enabled
40
+ end
41
+
42
+ context 'when stack_id is not set' do
43
+ before do
44
+ subject.stack_id = unset_value
45
+ subject.finalize!
46
+ end
47
+
48
+ it 'the value of enable should remain unchanged' do
49
+ subject.enabled.should == enabled
50
+ end
51
+ end
52
+
53
+ context 'when stack_id is set' do
54
+ before do
55
+ subject.stack_id = 'foo'
56
+ subject.finalize!
57
+ end
58
+
59
+ it 'it sets the value of enabled to true' do
60
+ subject.enabled.should == enabled
61
+ end
62
+ end
63
+ end
64
+
65
+ describe "#validate" do
66
+ let(:env) { double('env', root_path: Dir.pwd) }
67
+ let(:config) { double('config', opsworks: subject) }
68
+ let(:machine) { double('machine', config: config, env: env) }
69
+
70
+ before do
71
+ subject.finalize!
72
+ end
73
+
74
+ context 'when the plugin is enabled' do
75
+ before(:each) do
76
+ subject.stub(enabled: true)
77
+ env.stub_chain(:vagrantfile, :config, :vm, :provisioners, :any?)
78
+ end
79
+
80
+ let(:result) { subject.validate(machine) }
81
+
82
+ it "returns a Hash with an 'opsworks configuration' key" do
83
+ result.should be_a(Hash)
84
+ result.should have_key("opsworks configuration")
85
+ end
86
+
87
+ context 'when all validations pass' do
88
+ it "contains an empty Array for the 'opsworks configuration' key" do
89
+ result["opsworks configuration"].should be_a(Array)
90
+ result["opsworks configuration"].should be_empty
91
+ end
92
+ end
93
+ end
94
+
95
+ context 'when the plugin is disabled' do
96
+ let(:machine) { double('machine', env: env) }
97
+
98
+ before do
99
+ subject.stub(enabled: false)
100
+ end
101
+
102
+ it 'does not perform any validations' do
103
+ machine.should_not_receive(:config)
104
+
105
+ subject.validate(machine)
106
+ end
107
+ end
108
+ end
109
+ end