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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 766caa1de0d13b688ce42c9b608db05752182e67
4
+ data.tar.gz: 02981e7a488c63fe05f42c5e242771b51f373ce9
5
+ SHA512:
6
+ metadata.gz: 243fe0387d0ca9789ffafc4a66bffe8447094ffc12752c128a12326106a30bf44547a4c56003c11467bef5f68946cd585e217e9537a4d0f85796722bac6ee97b
7
+ data.tar.gz: f57d48e251a93043b5133a6f21647c3ae2c32da4653e77a9b1b2bf158a807301fcd130ab0c71fcfb270234338b51f4e04b4fb2496646df5eab19fdffbd496fdb
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .rspec
19
+ .vagrant
20
+ integration/Berksfile.lock
data/.simplecov ADDED
@@ -0,0 +1,7 @@
1
+ # -*- mode: ruby; encoding: utf-8 -*-
2
+ SimpleCov.start do
3
+ add_group "Actions", 'vagrant-opsworks/action'
4
+ add_group "Client", 'vagrant-opsworks/client'
5
+ add_group "Loader", 'vagrant-opsworks/loader'
6
+ add_group "Utility", 'vagrant-opsworks/util'
7
+ end
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.0
5
+ bundler_args: --without doc guard --jobs 7
6
+ script: bundle exec thor spec:ci
7
+ notifications:
8
+ hipchat:
9
+ rooms:
10
+ secure: C+gu4OY+FNhJPrm7HbNvn82C7VEU3G+BRSFeSRpZc6hfKkDOKghTLFlc1NjLKyPdFk6t4qSa4pptUwH9TP+ytImBqqM6BPD8eviO493j1bclXNnNxW+RytCpAwvQTcOVDalzBFvx/jA0uGpAuitBubgpmAhPHc9ddtOnKbEuxEM=
11
+ template:
12
+ - '%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message}'
13
+ - '%Build details: %{build_url}'
data/Gemfile ADDED
@@ -0,0 +1,44 @@
1
+ # -*- mode: ruby; encoding: utf-8 -*-
2
+ source 'https://rubygems.org'
3
+
4
+ gemspec :path => '.'
5
+
6
+ group :development do
7
+ gem 'vagrant', github: 'mitchellh/vagrant', tag: 'v1.6.3'
8
+ end
9
+
10
+ group :plugins do
11
+ gem 'vagrant-opsworks', path: '.'
12
+ gem 'vagrant-berkshelf', github: 'berkshelf/vagrant-berkshelf', tag: 'v3.0.1'
13
+ end
14
+
15
+ group :guard do
16
+ gem 'coolline'
17
+ gem 'fuubar'
18
+ gem 'guard', '>= 1.5.0'
19
+ gem 'guard-rspec'
20
+ gem 'guard-spork'
21
+ gem 'guard-yard'
22
+ gem 'redcarpet'
23
+ gem 'yard'
24
+
25
+ require 'rbconfig'
26
+
27
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
28
+ gem 'growl', require: false
29
+ gem 'rb-fsevent', require: false
30
+
31
+ if `uname`.strip == 'Darwin' && `sw_vers -productVersion`.strip >= '10.8'
32
+ gem 'terminal-notifier-guard', '~> 1.5.3', require: false
33
+ end rescue Errno::ENOENT
34
+
35
+ elsif RbConfig::CONFIG['target_os'] =~ /linux/i
36
+ gem 'libnotify', '~> 0.8.0', require:false
37
+ gem 'rb-inotify', require: false
38
+
39
+ elsif RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
40
+ gem 'rb-notifu', '>= 0.0.4', require: false
41
+ gem 'wdm', require: false
42
+ gem 'win32console', require: false
43
+ end
44
+ end
data/Guardfile ADDED
@@ -0,0 +1,17 @@
1
+ # -*- mode: ruby; encoding: utf-8 -*-
2
+ guard 'yard', stdout: '/dev/null', stderr: '/dev/null', port: '8808' do
3
+ watch(%r{app/.+\.rb})
4
+ watch(%r{lib/.+\.rb})
5
+ watch(%r{ext/.+\.c})
6
+ end
7
+
8
+ guard 'spork' do
9
+ watch('Gemfile')
10
+ watch('spec/spec_helper.rb') { :rspec }
11
+ end
12
+
13
+ guard 'rspec', cmd: 'bundle exec rspec --color --drb --format Fuubar', all_on_start: false, all_after_pass: false do
14
+ watch(%r{^spec/unit/.+_spec\.rb$})
15
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
16
+ watch('spec/spec_helper.rb') { 'spec' }
17
+ end
data/Thorfile ADDED
@@ -0,0 +1,59 @@
1
+ # -*- mode: ruby; encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ require 'bundler'
5
+ require 'bundler/setup'
6
+ require 'thor/rake_compat'
7
+ require 'vagrant-opsworks'
8
+
9
+ GEM_PKG = "vagrant-opsworks-#{VagrantPlugins::OpsWorks::VERSION}.gem".freeze
10
+
11
+ class Gem < Thor
12
+ include Thor::RakeCompat
13
+ Bundler::GemHelper.install_tasks
14
+
15
+ desc 'build', "Build #{GEM_PKG} into the pkg directory"
16
+ def build
17
+ Rake::Task['build'].execute
18
+ end
19
+
20
+ desc 'release', "Create tag v#{VagrantPlugins::OpsWorks::VERSION} and build and push #{GEM_PKG} to Rubygems"
21
+ def release
22
+ Rake::Task['release'].execute
23
+ end
24
+
25
+ desc 'install', "Build and install #{GEM_PKG} into system gems"
26
+ def install
27
+ Rake::Task['install'].execute
28
+ end
29
+ end
30
+
31
+ class Spec < Thor
32
+ include Thor::Actions
33
+ default_task :unit
34
+
35
+ desc 'plug', "Install #{GEM_PKG} into vagrant"
36
+ def plug
37
+ build
38
+ run "vagrant plugin install pkg/#{GEM_PKG}"
39
+ end
40
+
41
+ desc 'ci', "Run all possible tests on Travis-CI"
42
+ def ci
43
+ ENV['CI'] = 'true' # Tracis-CI also sets this, but set it here for local testing
44
+ invoke(:unit)
45
+ end
46
+
47
+ desc 'unit', "Run unit tests"
48
+ def unit
49
+ unless run_unit
50
+ exit 1
51
+ end
52
+ end
53
+
54
+ no_tasks do
55
+ def run_unit(*flags)
56
+ run "rspec --color --format=documentation #{flags.join(' ')} spec"
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,11 @@
1
+ # -*- mode: ruby; encoding: utf-8 -*-
2
+ source 'https://rubygems.org'
3
+
4
+ group :development do
5
+ gem 'vagrant', github: 'mitchellh/vagrant', tag: 'v1.6.3'
6
+ end
7
+
8
+ group :plugins do
9
+ gem 'vagrant-opsworks', path: '../'
10
+ gem 'vagrant-berkshelf', github: 'berkshelf/vagrant-berkshelf', tag: 'v3.0.1'
11
+ end
@@ -0,0 +1,8 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ VAGRANTFILE_API_VERSION = "2"
5
+
6
+ Vagrant.configure('2') do |config|
7
+ config.vm.network :private_network, type: 'dhcp'
8
+ end
@@ -0,0 +1,26 @@
1
+ require 'berkshelf/vagrant'
2
+ require 'berkshelf/vagrant/action'
3
+
4
+ module Berkshelf
5
+ module Vagrant
6
+ module Action
7
+ require 'vagrant-opsworks/action'
8
+ include VagrantPlugins::OpsWorks::Action
9
+
10
+ class << self
11
+ alias_method :old_setup, :setup
12
+ end
13
+
14
+ def self.setup
15
+ @setup ||= old_setup.tap do |b|
16
+ b.use ::Vagrant::Action::Builtin::EnvSet, opsworks: VagrantPlugins::OpsWorks::Env.new
17
+ b.use VagrantPlugins::OpsWorks::Action::SetupEnvironment
18
+ b.use VagrantPlugins::OpsWorks::Action::CheckoutCookbooks
19
+ b.use VagrantPlugins::OpsWorks::Action::MergeCookbooks
20
+ b.use VagrantPlugins::OpsWorks::Action::ConfigureChef
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,71 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class CheckoutCookbooks
5
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
6
+ require 'git'
7
+
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ return @app.call(env) unless enabled?(env)
14
+
15
+ setup_repo_directory(env)
16
+
17
+ opsworks_cookbooks = {
18
+ :url => 'git@github.com:aws/opsworks-cookbooks.git',
19
+ :ref => "release-chef-#{env[:opsworks].client.stack.configuration_manager[:version]}"
20
+ }
21
+
22
+ env[:opsworks].ui.info(I18n.t('vagrant_opsworks.action.cookbooks.checkout', {
23
+ :repo_name => 'OpsWorks cookbooks',
24
+ :repo_url => opsworks_cookbooks[:url],
25
+ :ref => opsworks_cookbooks[:ref]
26
+ }))
27
+ prepare_cookbooks(:opsworks, opsworks_cookbooks)
28
+
29
+ if env[:opsworks].client.stack.custom_cookbooks?
30
+ custom_cookbooks = {
31
+ :type => 'git',
32
+ :url => env[:opsworks].client.stack.custom_cookbooks_source[:url],
33
+ :ref => env[:opsworks].client.stack.custom_cookbooks_source[:revision]
34
+ }
35
+
36
+ if env[:opsworks].client.stack.custom_cookbooks_source[:type] == 'git'
37
+ env[:opsworks].ui.info(I18n.t('vagrant_opsworks.action.cookbooks.checkout', {
38
+ :repo_name => 'custom cookbooks',
39
+ :repo_url => custom_cookbooks[:url],
40
+ :ref => custom_cookbooks[:ref]
41
+ }))
42
+ prepare_cookbooks(:custom, custom_cookbooks)
43
+ end
44
+ end
45
+
46
+ @app.call(env)
47
+ end
48
+
49
+ protected
50
+
51
+ def setup_repo_directory(env)
52
+ @repo_path = env[:opsworks].data_directory.join('cookbooks').tap{|f| FileUtils.mkdir_p(f) unless f.file? }
53
+ end
54
+
55
+ def prepare_cookbooks(type, settings)
56
+ repo = @repo_path.join(type.to_s).tap{|d|
57
+ FileUtils.mkdir_p(d) unless d.file?
58
+ }
59
+ if (Dir.entries(repo) - %w{ . .. }).empty?
60
+ g = Git.clone(settings[:url], type.to_s, :path => @repo_path)
61
+ else
62
+ g = Git.open(repo)
63
+ end
64
+
65
+ g.checkout(settings[:ref])
66
+ end
67
+
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,26 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class ConfigureBerks
5
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ return @app.call(env) unless enabled?(env)
13
+
14
+ if env[:opsworks].client.stack.berks_enabled?
15
+ ENV['BERKSHELF_PATH'] = env[:opsworks].data_directory.join('berkshelf').to_s
16
+ env[:machine].config.berkshelf.enabled = true
17
+ env[:machine].config.berkshelf.berksfile_path = env[:opsworks].data_directory.join('cookbooks/custom/Berksfile').to_s
18
+ end
19
+
20
+ @app.call(env)
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class ConfigureChef
5
+ require_relative '../util/env_helpers'
6
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
7
+
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ return @app.call(env) unless enabled?(env)
14
+
15
+ if chef_solo?(env)
16
+ provisioners(:chef_solo, env).each do |provisioner|
17
+ provisioner.config.cookbooks_path << [:host, env[:opsworks].data_directory.join('cookbooks/merged').to_s]
18
+ provisioner.config.roles_path << [:host, env[:opsworks].data_directory.join('roles').to_s]
19
+ end
20
+ end
21
+
22
+ @app.call(env)
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,69 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class CreateRoles
5
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ return @app.call(env) unless enabled?(env)
13
+
14
+ setup_role_directory(env[:opsworks])
15
+
16
+ env[:machine].env.hook(:opsworks_create_roles, runner: ::Vagrant::Action::Runner.new(env: env))
17
+
18
+ require 'pp'
19
+ roles = {}
20
+ env[:opsworks].client.layers.each do |l|
21
+ next if opsworks_config(env).ignore_layers.include?(l['name'])
22
+ roles[l['name']] = {
23
+ 'name' => l['name'],
24
+ 'description' => l['description'],
25
+ 'default_attributes' => {
26
+ 'opsworks' => {
27
+ 'layers' => {
28
+ l['name'] => {
29
+ 'instances' => {}
30
+ }
31
+ }
32
+ }
33
+ },
34
+ 'run_list' => Hash[Array.new.tap { |a|
35
+ l['default_recipes'].each{ |k,v|
36
+ a << [k, v.concat(l['custom_recipes'][k])]
37
+ }
38
+ }].select{ |k,v|
39
+ %w(setup configure deploy).any?{ |s|
40
+ k.to_s == s
41
+ }
42
+ }.values.flatten.select{ |r|
43
+ !opsworks_config(env).ignore_recipes.include?(r)
44
+ }
45
+ }
46
+ end
47
+
48
+ roles.each do |role,data|
49
+ data[:chef_type] = 'role'
50
+ data[:json_class] = 'Chef::Role'
51
+ env[:opsworks].data_directory.join('roles').join("#{role}.json").tap{|p|
52
+ File.open(p, 'w') {|f| f.puts JSON.pretty_generate(JSON.parse(data.to_json)) }
53
+ }
54
+ end
55
+
56
+ @app.call(env)
57
+ end
58
+
59
+ protected
60
+
61
+ def setup_role_directory(opsworks)
62
+ opsworks.data_directory.join('roles').tap{|d|
63
+ FileUtils.mkdir_p(d) unless d.file?
64
+ }
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,44 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class InjectBoxes
5
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ return @app.call(env) unless enabled?(env)
13
+
14
+ require_relative '../loader'
15
+ require_relative '../util/configuration_builder'
16
+
17
+ sources = [find_vagrantfile(env[:env])]
18
+
19
+ config, _ = env[:env].config_loader.load([:home,:root])
20
+ builder = VagrantPlugins::OpsWorks::Util::ConfigurationBuilder.new(config.opsworks).tap{ |b|
21
+ b.use VagrantPlugins::OpsWorks::Loader::Client
22
+ b.use VagrantPlugins::OpsWorks::Loader::Stack
23
+ b.use VagrantPlugins::OpsWorks::Loader::Instances
24
+ }
25
+
26
+ sources << ['2', builder]
27
+
28
+ env[:env].config_loader.set(:root, sources)
29
+
30
+ @app.call(env)
31
+ end
32
+
33
+ protected
34
+
35
+ def find_vagrantfile(environment)
36
+ [* environment.vagrantfile_name || ['Vagrantfile', 'vagrantfile'] ].map{|f|
37
+ environment.root_path.join(f) if environment.root_path.join(f).file?
38
+ }.compact.first
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class MergeCookbooks
5
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ return @app.call(env) unless enabled?(env)
13
+
14
+ cookbook_path = env[:opsworks].data_directory.join('cookbooks').tap{|d| FileUtils.mkdir_p(d.join('merged')) unless d.join('merged').file? }
15
+
16
+ FileUtils.cp_r cookbook_path.join('opsworks/.').to_s, cookbook_path.join('merged').to_s, :remove_destination => true
17
+ FileUtils.cp_r env[:berkshelf].shelf + '/.', cookbook_path.join('merged').to_s, :remove_destination => true if env[:berkshelf].shelf
18
+ FileUtils.cp_r cookbook_path.join('custom/.').to_s, cookbook_path.join('merged').to_s, :remove_destination => true if env[:opsworks].client.stack.use_custom_cookbooks?
19
+ FileUtils.rm_r cookbook_path.join('merged/.git').to_s
20
+
21
+ @app.call(env)
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ class SetupEnvironment
5
+ require_relative '../util/env_helpers'
6
+ include VagrantPlugins::OpsWorks::Util::EnvHelpers
7
+
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ return @app.call(env) unless enabled?(env)
14
+
15
+ env[:opsworks].data_directory = setup_data_directory
16
+
17
+ require_relative '../client'
18
+ env[:opsworks].client = VagrantPlugins::OpsWorks::Client.new(stack_id(env))
19
+
20
+ @app.call(env)
21
+ end
22
+
23
+ protected
24
+
25
+ def setup_data_directory
26
+ Vagrant.user_data_path.join('opsworks').tap{|d|
27
+ FileUtils.mkdir_p(d.join('cache')) unless d.join('cache').file?
28
+ }
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,51 @@
1
+ module VagrantPlugins
2
+ module OpsWorks
3
+ module Action
4
+ require_relative 'util/env_helpers'
5
+ require_relative 'env'
6
+ require_relative 'action/checkout_cookbooks'
7
+ require_relative 'action/configure_berks'
8
+ require_relative 'action/configure_chef'
9
+ require_relative 'action/create_roles'
10
+ require_relative 'action/inject_boxes'
11
+ require_relative 'action/merge_cookbooks'
12
+ require_relative 'action/setup_environment'
13
+ class << self
14
+ def prepare_environment
15
+ @prepare_environment ||= environment_builder.tap do |b|
16
+ b.use VagrantPlugins::OpsWorks::Action::InjectBoxes
17
+ end
18
+ end
19
+
20
+ def setup
21
+ @setup ||= environment_builder.tap do |b|
22
+ b.use VagrantPlugins::OpsWorks::Action::CreateRoles
23
+ end
24
+ end
25
+
26
+ def configure_berks
27
+ @configure_berks ||= environment_builder.tap do |b|
28
+ b.use VagrantPlugins::OpsWorks::Action::ConfigureBerks
29
+ end
30
+ end
31
+
32
+ def configure_chef
33
+ @configure_chef ||= environment_builder.tap do |b|
34
+ b.use VagrantPlugins::OpsWorks::Action::ConfigureChef
35
+ end
36
+ end
37
+
38
+ protected
39
+
40
+ def environment_builder
41
+ ::Vagrant::Action::Builder.new.tap do |b|
42
+ b.use ::Vagrant::Action::Builtin::EnvSet, opsworks: VagrantPlugins::OpsWorks::Env.new
43
+ b.use VagrantPlugins::OpsWorks::Action::SetupEnvironment
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ require 'vagrant/util/hash_with_indifferent_access'
2
+
3
+ module VagrantPlugins::OpsWorks
4
+ class Application < ::Vagrant::Util::HashWithIndifferentAccess
5
+ class << self
6
+
7
+ end
8
+
9
+ private
10
+
11
+ def set_or_return(key, value)
12
+ if value.nil?
13
+ return self[key]
14
+ else
15
+ self[key] = value
16
+ end
17
+ end
18
+
19
+ class Proxy
20
+ def method_missing(m, *args, &block)
21
+ self
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,50 @@
1
+ module VagrantPlugins::OpsWorks
2
+ class Client
3
+ class App < VagrantPlugins::OpsWorks::Util::DummyConfiguration
4
+
5
+ def shortname(value=nil)
6
+ set_or_return(:name, value)
7
+ end
8
+
9
+ def name(value=nil)
10
+ set_or_return(:description, value)
11
+ end
12
+
13
+ def data_sources(value=nil)
14
+ set_or_return(:data_sources, value)
15
+ end
16
+
17
+ def type(value=nil)
18
+ set_or_return(:type, value)
19
+ end
20
+
21
+ def app_source(value=nil)
22
+ set_or_return(:app_source, value)
23
+ end
24
+
25
+ def domains(value=nil)
26
+ set_or_return(:domains, value)
27
+ end
28
+
29
+ def enable_ssl(value=nil)
30
+ set_or_return(:enable_ssl, value)
31
+ end
32
+
33
+ def ssl_configurations(value=nil)
34
+ set_or_return(:ssl_configurations, value)
35
+ end
36
+
37
+ def attributes(value=nil)
38
+ set_or_return(:attributes, value)
39
+ end
40
+
41
+ def environment(value=nil)
42
+ unless value.nil?
43
+ value = value.select{|v| !v[:secure]}
44
+ end
45
+ set_or_return(:environment, value)
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,23 @@
1
+ module VagrantPlugins::OpsWorks
2
+ class Client
3
+ class Instance < VagrantPlugins::OpsWorks::Util::DummyConfiguration
4
+
5
+ def hostname(value=nil)
6
+ set_or_return(:hostname, value)
7
+ end
8
+
9
+ def layer_ids(value=nil)
10
+ set_or_return(:layer_ids, value)
11
+ end
12
+
13
+ def os(value=nil)
14
+ set_or_return(:os, value)
15
+ end
16
+
17
+ def architecture(value=nil)
18
+ set_or_return(:architecture, value)
19
+ end
20
+
21
+ end
22
+ end
23
+ end