chef-tlc-workflow 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -1,7 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- source 'https://gems.gemfury.com/hUe8s8nSyzxs7JMMSZV8/' # vagrant-1.0.5.1
4
- source 'https://gems.gemfury.com/psBbdHx94zqZrvxpiVmm/' # librarian-0.0.26.2
5
-
6
3
  # Specify your gem's dependencies in chef-tlc-workflow.gemspec
7
4
  gemspec
data/README.md CHANGED
@@ -1,13 +1,21 @@
1
- # TLC Chef Workflow
1
+ # Chef "Top-Level Cookbooks" Workflow
2
2
 
3
- The `chef-tlc-workflow` aims to make our workflow for developing with Chef more explict.
3
+ `chef-tlc-workflow` supports an opiniated workflow for working with Chef. It is based on the strict distinction of top-level vs. dependent cookbooks (see below) and it's currently focussed on chef-solo only.
4
4
 
5
- First of all, it provides templates for three different deployment environments (esx, ec2 and local). The templates contain among others a `Rakefile` for interacting with the deployment environment as well as a description of the nodes in these environments.
5
+ First of all, it provides a [working sample](https://github.com/tknerr/chef-tlc-workflow/tree/master/test/vagrant-1.x-bootstrap) for deployment to esx, ec2 and local from within single `Vagrantfile`.
6
6
 
7
- Other than the templates it provides helper methods to use the dependencies defined in `metadata.rb` from within [librarian](https://github.com/applicationsonline/librarian) `Cheffile`s. This ensures consistency between the dependencies specified in metadata and resolved via librarian.
7
+ Other than that it provides helper methods to use the dependencies defined in `metadata.rb` from within [librarian](https://github.com/applicationsonline/librarian) `Cheffile`s. This ensures consistency between the dependencies specified in metadata and resolved via librarian (**NOTE:** to be replaced with Berkshelf soon!)
8
8
 
9
9
  Finally, it ensures a consistent gem set by declaring all the gems we use in our workflow in its own gemspec, i.e. `chef-tlc-workflow` is the only gem you need to depend on - everything else (like vagrant, mcloud, etc..) comes in as transitive dependencies.
10
10
 
11
+
12
+ ## Terminology
13
+
14
+ * **infrastructure** is a Chef-Repo like structure which describes the nodes that are part of it and which services are to be installed on these nodes via *top-level cookbooks*
15
+ * **top-level cookbooks** are the top-level cookbooks that fully configure a node by combining a set of *dependent cookbooks*, configuring them appropriately and locking them at a specific version.
16
+ * **dependent cookbooks** are the finer-grained, reusable and flexible cookbooks that you typically leverage for building high-level services in terms of *top-level cookbooks*
17
+
18
+
11
19
  ## Installation
12
20
 
13
21
  Add this line to your application's Gemfile:
@@ -23,63 +31,114 @@ Or install it yourself as:
23
31
  $ gem install chef-tlc-workflow
24
32
 
25
33
 
34
+ ## Prerequisites
35
+
36
+ You need Vagrant 1.2.x and the following plugins for the [sample Vagrantfile](https://github.com/tknerr/chef-tlc-workflow/tree/master/test/vagrant-1.x-bootstrap/Vagrantfile) to work:
37
+
38
+ ```
39
+ vagrant plugin install vagrant-aws --plugin-version 0.2.2
40
+ vagrant plugin install vagrant-managed-servers --plugin-version 0.1.0
41
+ vagrant plugin install vagrant-omnibus --plugin-version 1.0.2
42
+ vagrant plugin install vagrant-cachier --plugin-version 0.1.0
43
+ ```
44
+
26
45
  ## Usage
27
46
 
28
- See valid usages below.
47
+ ### Deployment to VirtualBox, AWS and Managed ESX Servers
48
+
49
+ Assuming you are in the `test/vagrant-1.x-bootstrap` directory you need to install the bundle first:
50
+ ```
51
+ $ cd test/vagrant-1.x-bootstrap
52
+ $ bundle install
53
+ Fetching gem metadata from http://rubygems.org/..
54
+ Fetching gem metadata from https://gems.gemfury.com/psBbdHx94zqZrvxpiVmm/..
55
+ Using rake (0.9.6)
56
+ Using Platform (0.4.0)
57
+ Using ansi (1.4.3)
58
+ Using archive-tar-minitar (0.5.2)
59
+ Using multi_json (1.7.6)
60
+ ...
61
+ ```
62
+
63
+ Then you need to resolve the [sample-app](https://github.com/tknerr/chef-tlc-workflow/tree/master/test/sample-app) top-level cookbook along with all its dependencies into the `./cookbooks` directory:
64
+ ```
65
+ $ rake resolve_sample_app
66
+ cd tmp/tlc/sample-app-0.1.0 && librarian-chef install --path D:/Repos/_github/chef-tlc-workflow/test/vagrant-1.x-bootstrap/cookbooks/sample-app-0.1.0
67
+ Installing apache2 (1.5.0)
68
+ Installing apt (1.3.2)
69
+ Installing sample-app (0.1.0)
70
+ ```
29
71
 
30
- ### Templates for Deployment Environments
72
+ See, the dependencies are now resolved per top-level cookbook (i.e. `sample-app-0.1.0` in this case) separately:
73
+ ```
74
+ $ ls -la cookbooks/sample-app-0.1.0
75
+ total 12
76
+ drwxr-xr-x 5 tkn tkn 0 Jun 11 17:44 .
77
+ drwxr-xr-x 3 tkn tkn 0 Jun 11 17:44 ..
78
+ drwxr-xr-x 7 tkn tkn 4096 Jun 11 17:44 apache2
79
+ drwxr-xr-x 6 tkn tkn 4096 Jun 11 17:44 apt
80
+ drwxr-xr-x 6 tkn tkn 4096 Jun 11 17:44 sample-app
81
+ ```
31
82
 
32
- As of TLC Project Infrastructure v1 we support three different deployment environments:
83
+ Deploy to VirtualBox:
33
84
 
34
- * `esx` - VMs on our ESX infrastructure where we have ssh access but no control over the VMs (provisioned via [knife-solo](http://matschaffer.github.com/knife-solo/))
35
- * `ec2` - ec2 instances in the amazon cloud (managed and provisioned via [mccloud](https://github.com/jedi4ever/mccloud))
36
- * `local` - local VirtualBox VMs for development and testing (managed and provisioned via [vagrant](http://vagrantup.com))
85
+ ```
86
+ vagrant up sample-app-vbox
87
+ ```
37
88
 
38
- This project contains "templates" for each of these deployment environments in the `test/` directory. For now, you have to copy the directories - there is no scaffolding yet.
89
+ Deploy to AWS via [vagrant-aws]:
90
+ ```
91
+ vagrant up sample-app-aws --provider=aws
92
+ ```
39
93
 
40
- Each of the deployment environments in the `test/` directory provides a `Rakefile` with a similar interface (i.e. similar rake tasks) to interact with. See the integration tests in the top level `Rakefile` for an example.
94
+ Deploy to a [managed](https://github.com/tknerr/vagrant-managed-servers) ESX Server:
95
+ ```
96
+ vagrant up sample-app-esx --provider=managed
97
+ vagrant provision sample-app-esx
98
+ ```
41
99
 
42
- In addition, it provides a place for describing the nodes within that deployment environment. Depending on the environment this might be a `Vagrantfile`, `Mccloudfile` or `<node>.json` file. Again, see the examples in the `test/` directory.
43
100
 
44
101
  ### Librarian Helper
45
102
 
103
+ **NOTE:** this is going to be replaced with Berkshelf soon
104
+
46
105
  Since librarian does not support reading the cookbook dependencies from `metadata.rb`, the `ChefTLCWorkflow::Helpers` module adds this functionality.
47
106
 
48
107
  In the trivial case you can use it in your cookbook project's `Cheffile` like so:
49
108
 
50
- require 'chef-tlc-workflow/helpers'
109
+ ```ruby
110
+ require 'chef-tlc-workflow/helpers'
51
111
 
52
- ChefTLCWorkflow::Helpers::from_metadata.each do |cb_name, cb_version|
53
- cookbook cb_name, cb_version
54
- end
112
+ ChefTLCWorkflow::Helpers::from_metadata.each do |cb_name, cb_version|
113
+ cookbook cb_name, cb_version
114
+ end
115
+ ```
55
116
 
56
117
  If some of the cookbooks defined in metadata.rb are not available from the community site, you can define your overrides like so:
57
118
 
58
- ...
59
- @overrides = {
60
- 'tlc-base' => { :git => 'https://github.com/tknerr/cookbook-tlc-base.git', :ref => 'master' },
61
- }
119
+ ```ruby
120
+ ...
121
+ @overrides = {
122
+ 'tlc-base' => { :git => 'https://github.com/tknerr/cookbook-tlc-base.git', :ref => 'master' },
123
+ }
62
124
 
63
- ChefTLCWorkflow::Helpers::from_metadata.each do |cb_name, cb_version|
64
- cookbook cb_name, cb_version, @overrides[cb_name]
65
- end
125
+ ChefTLCWorkflow::Helpers::from_metadata.each do |cb_name, cb_version|
126
+ cookbook cb_name, cb_version, @overrides[cb_name]
127
+ end
128
+ ```
66
129
 
67
130
 
68
131
  ### Single Gemfile Dependency
69
132
 
70
133
  It references all gems we need for our Chef workflow, this means that your `Gemfile` basically looks like this:
71
134
 
72
- ```
135
+ ```ruby
73
136
  source :rubygems
74
137
 
75
- # additional sources for patched gems
76
- source 'https://gems.gemfury.com/hUe8s8nSyzxs7JMMSZV8/' # vagrant-1.0.5.1
77
- source 'https://gems.gemfury.com/psBbdHx94zqZrvxpiVmm/' # librarian-0.0.26.2
78
-
79
- gem "chef-tlc-workflow", "0.1.0"
138
+ gem "chef-tlc-workflow", "0.2.0"
80
139
  ```
81
140
 
82
- This brings in all the transitive gem dependencies as defined in the `chef-tlc-workflow.gemspec`, e.g. vagrant, librarian, chef, mccloud etc...
141
+ This brings in all the transitive gem dependencies as defined in the `chef-tlc-workflow.gemspec`, e.g. librarian, chef, foodcritic, etc...
83
142
 
84
143
  While this is not ideal in terms of keeping the LOAD_PATH as small as possible, it's a tradeoff in favor of convenience and consistency.
85
144
 
data/Rakefile CHANGED
@@ -2,9 +2,9 @@ require "bundler/gem_tasks"
2
2
 
3
3
  desc "run all tests"
4
4
  task :test => [
5
- :test_esx_bootstrap,
6
- :test_ec2_bootstrap,
7
- :test_local_bootstrap
5
+ :test_vagrant_esx_bootstrap,
6
+ :test_vagrant_aws_bootstrap,
7
+ :test_vagrant_vbox_bootstrap
8
8
  ]
9
9
 
10
10
  #
@@ -13,98 +13,75 @@ task :test => [
13
13
  # * check for apache default page
14
14
  # * more realistic scenario: e.g. scaffold infra, create Cheffile and node.json on the fly, etc...
15
15
  #
16
- desc "tests bootstrapping with knife-solo in an esx-like environment"
17
- task :test_esx_bootstrap do
18
-
19
- app = 'sample-app@0.1.0'
20
- user = 'vagrant'
21
- host = '33.33.77.10'
22
- ssh_key = 'W:/home/.vagrant.d/insecure_private_key'
16
+ desc "tests bootstrapping in an esx-like environment via vagrant-managed-servers provider"
17
+ task :test_vagrant_esx_bootstrap do
23
18
 
24
19
  begin
25
20
  # simulate esx-like environment using vagrant and a bare-os basebox
26
- sh "vagrant destroy esx_like_vm -f"
27
- sh "vagrant up esx_like_vm" do |ok, res|
21
+ run_cmd_esx "vagrant destroy esx_like_vm -f"
22
+ run_cmd_esx "vagrant up esx_like_vm" do |ok, res|
28
23
  puts "ok: #{ok}\nres: #{res}" # ignore vagrant error for bare-os vm
29
24
  end
30
25
 
31
- # resolve deps and provision node
32
- run_cmd_esx "rake resolve_deps"
33
- # bootstrap node with chef
34
- run_cmd_esx "rake bootstrap[#{host},#{user},#{ssh_key}]"
35
- # provision node with app
36
- run_cmd_esx "rake provision[#{app},#{host},#{user},#{ssh_key}]"
37
- # remove chef-solo traces from node
38
- run_cmd_esx "rake cleanup[#{host},#{user},#{ssh_key}]"
39
-
40
- # TODO: test if sample app works
26
+ test_vagrant_commands(:esx)
41
27
  ensure
42
28
  # cleanup
43
- sh "vagrant destroy esx_like_vm -f"
29
+ run_cmd_esx "vagrant destroy esx_like_vm -f"
44
30
  end
45
31
  end
46
32
 
47
33
 
48
- desc "tests bootstrapping with mccloud in ec2 (requires ec2 credentials)"
49
- task :test_ec2_bootstrap do
50
-
51
- vm_name = 'sample-app'
52
-
53
- begin
54
- # resolve deps
55
- run_cmd_ec2 "rake resolve_deps"
56
- # bring up ec2 instance, bootstrap with chef and provision
57
- run_cmd_ec2 "rake up[#{vm_name}]"
58
- # re-provison ec2 instance
59
- run_cmd_ec2 "rake provision[#{vm_name}]"
60
- # show status of ec2 instances
61
- run_cmd_ec2 "rake status"
62
-
63
-
64
- # TODO: test if sample app works
65
- ensure
66
- # destroy ec2 instance
67
- run_cmd_ec2 "rake destroy[#{vm_name}]"
68
- end
34
+ desc "tests bootstrapping in AWS via vagrant-aws provider"
35
+ task :test_vagrant_aws_bootstrap do
36
+ test_vagrant_commands(:aws)
69
37
  end
70
38
 
71
39
 
72
- desc "tests bootstrapping with local Vagrant VMs"
73
- task :test_local_bootstrap do
40
+ desc "tests bootstrapping with local Vagrant VMs via default virtualbox provider"
41
+ task :test_vagrant_vbox_bootstrap do
42
+ test_vagrant_commands(:vbox)
43
+ end
74
44
 
75
- vm_name = 'sample-app'
76
45
 
46
+ def test_vagrant_commands(suffix)
77
47
  begin
78
- # resolve deps
79
- run_cmd_local "rake resolve_deps"
80
- # bring up vagrant vm, bootstrap with chef and provision
81
- run_cmd_local "rake up[#{vm_name}]"
82
- # re-provison vagrant vm
83
- run_cmd_local "rake provision[#{vm_name}]"
84
- # show status of vagrant vms
85
- run_cmd_local "rake status"
86
-
48
+ # resolve deps and provision node
49
+ bundle_exec "rake resolve_deps"
50
+ # create VM
51
+ run_cmd "vagrant up sample-app-#{suffix} --provider=#{provider(suffix)}"
52
+ # provision node with app
53
+ run_cmd "vagrant provision sample-app-#{suffix}"
54
+ # check ssh
55
+ run_cmd "vagrant ssh sample-app-#{suffix} -c 'ohai ipaddress'"
56
+ # check status
57
+ run_cmd "vagrant status sample-app-#{suffix}"
58
+
87
59
  # TODO: test if sample app works
88
60
  ensure
89
- # destroy vagrant vm
90
- run_cmd_local "rake destroy[#{vm_name}]"
61
+ # destroy
62
+ run_cmd "vagrant destroy sample-app-#{suffix} -f"
91
63
  end
92
64
  end
93
65
 
94
-
95
- def run_cmd_esx(command)
96
- run_cmd command, "test/esx-bootstrap"
66
+ def provider(suffix)
67
+ providers = {
68
+ :aws => "aws",
69
+ :esx => "managed",
70
+ :vbox => "virtualbox"
71
+ }
72
+ providers[suffix]
97
73
  end
98
74
 
99
- def run_cmd_ec2(command)
100
- run_cmd command, "test/ec2-bootstrap"
75
+
76
+ def bundle_exec(command, cwd = "test/vagrant-1.x-bootstrap")
77
+ fail "need #{cwd}/Gemfile for a clean environment" unless File.exist? "#{cwd}/Gemfile"
78
+ sh "cd #{cwd} && bundle exec #{command}"
101
79
  end
102
80
 
103
- def run_cmd_local(command)
104
- run_cmd command, "test/local-bootstrap"
81
+ def run_cmd(command, cwd = "test/vagrant-1.x-bootstrap")
82
+ sh "cd #{cwd} && #{command}"
105
83
  end
106
84
 
107
- def run_cmd(command, cwd)
108
- fail "need #{cwd}/../Gemfile for a clean environment" unless File.exist? "#{cwd}/../Gemfile"
109
- sh "cd #{cwd} && bundle exec #{command}"
110
- end
85
+ def run_cmd_esx(command)
86
+ run_cmd command, "test/esx_fake"
87
+ end
@@ -8,9 +8,9 @@ Gem::Specification.new do |gem|
8
8
  gem.version = ChefTLCWorkflow::VERSION
9
9
  gem.authors = ["Torben Knerr"]
10
10
  gem.email = ["tkn@zuehlke.com"]
11
- gem.description = %q{makes our workflow for developing with Chef explict by adding a set of Rake tasks embodying the workflow}
12
- gem.summary = %q{makes our workflow for developing with Chef explict by adding a set of Rake tasks embodying the workflow}
13
- gem.homepage = ""
11
+ gem.description = %q{Chef Workflow based on the idea of Top-Level Cookbooks }
12
+ gem.summary = %q{Chef Workflow based on the idea of Top-Level Cookbooks }
13
+ gem.homepage = "https://github.com/tknerr/chef-tlc-workflow"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -28,18 +28,12 @@ Gem::Specification.new do |gem|
28
28
  # so that the only dependency one needs in the `Gemfile` is `chef-tlc-workflow`
29
29
  #
30
30
 
31
- # for interaction with nodes in local/esx/ec2 environments
32
- gem.add_dependency 'vagrant', '~> 1.0.5'
33
- gem.add_dependency 'knife-solo', '0.3.0.pre4'
34
- gem.add_dependency 'mccloud', '0.0.19'
35
-
36
31
  # testing related
37
32
  gem.add_dependency 'foodcritic', '1.7.0'
38
33
  gem.add_dependency 'chefspec', '0.9.0'
39
34
  gem.add_dependency 'fauxhai', '0.1.1'
40
35
 
41
36
  # others
42
- gem.add_dependency 'rake', '0.9.6'
43
37
  gem.add_dependency 'sahara', '0.0.13'
44
38
  gem.add_dependency 'knife-solo_data_bag', '0.3.1'
45
39
 
@@ -1,3 +1,3 @@
1
1
  module ChefTLCWorkflow
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,39 @@
1
+ #
2
+ # Vagrantfile simulating an ESX-like environment for testing purposes:
3
+ #
4
+ # * assume ssh root access as the only prerequisite
5
+ # * using bare OS baseboxes with no Chef installed
6
+ #
7
+ Vagrant::configure("2") do |config|
8
+
9
+ # use provionerless baseboxes
10
+ config.vm.box = "opscode_ubuntu-13.04_provisionerless"
11
+ config.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-13.04_provisionerless.box"
12
+
13
+ config.vm.define :esx_like_vm do | esx_like_vm_config |
14
+
15
+ esx_like_vm_config.vm.provider :virtualbox do |vbox|
16
+ vbox.customize ["modifyvm", :id,
17
+ "--memory", "1024",
18
+ "--name", "chef-tlc-workflow-esx-like-vm"]
19
+ end
20
+ esx_like_vm_config.vm.hostname = "chef-tlc-workflow-esx-like-vm.local"
21
+ esx_like_vm_config.vm.network :private_network, ip: "33.33.77.10"
22
+ end
23
+
24
+ #
25
+ # dummy vm in the same network, keeping it on so that no additional
26
+ # user elevation dialogs appear for the other VMs
27
+ #
28
+ config.vm.define :dummy do | dummy_vm_config |
29
+
30
+ dummy_vm_config.vm.provider :virtualbox do |vbox|
31
+ vbox.customize ["modifyvm", :id,
32
+ "--memory", "256",
33
+ "--name", "chef-tlc-workflow-dummy-vm"]
34
+ end
35
+ dummy_vm_config.vm.hostname = "chef-tlc-workflow-dummy-vm.local"
36
+ dummy_vm_config.vm.network :private_network, ip: "33.33.77.2"
37
+ end
38
+
39
+ end
@@ -0,0 +1,3 @@
1
+ cookbooks
2
+ tmp
3
+ .vagrant
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+
3
+ gem "chef-tlc-workflow", "0.2.0.dev",
4
+ :path => "#{File.dirname(__FILE__)}/../../../chef-tlc-workflow"
@@ -0,0 +1,13 @@
1
+ require 'bundler/setup'
2
+ require 'chef-workflow/tasks/tlc/deps'
3
+
4
+ desc "resolve application cookbook with all its dependencies"
5
+ task :resolve_deps, [:app_cookbook] do |t, args|
6
+ Rake::Task["tlc:deps:resolve_app_cookbook"].invoke(args[:app_cookbook])
7
+ end
8
+
9
+
10
+ desc "resolve sample-app"
11
+ task :resolve_sample_app do
12
+ Rake::Task["resolve_deps"].invoke("sample-app@0.1.0")
13
+ end
@@ -0,0 +1,104 @@
1
+
2
+ def configure_provider(provider, config, config_lambda)
3
+ config.vm.provider provider do |prvdr, override|
4
+ config_lambda.call(prvdr, override)
5
+ end
6
+ end
7
+
8
+ def vbox_config(name, ip, memory_size = 384)
9
+ lambda do |vbox, override|
10
+ # override box url
11
+ override.vm.box = "opscode_ubuntu-13.04_provisionerless"
12
+ override.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-13.04_provisionerless.box"
13
+ # configure host-only network
14
+ override.vm.hostname = "#{name}.local"
15
+ override.vm.network :private_network, ip: ip
16
+ # enable cachier for local vbox vms
17
+ override.cache.auto_detect = true
18
+
19
+ # virtualbox specific configuration
20
+ vbox.customize ["modifyvm", :id,
21
+ "--memory", memory_size,
22
+ "--name", name
23
+ ]
24
+ end
25
+ end
26
+
27
+ def aws_config(instance_type)
28
+ lambda do |aws, override|
29
+ # use dummy box
30
+ override.vm.box = "aws_dummy_box"
31
+ override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
32
+ # override ssh user and private key
33
+ override.ssh.username = "ubuntu"
34
+ override.ssh.private_key_path = "#{ENV['HOME']}/.ssh/mccloud_rsa"
35
+
36
+ # aws specific settings
37
+ aws.access_key_id = ENV['AWS_ACCESS_KEY']
38
+ aws.secret_access_key = ENV['AWS_SECRET_KEY']
39
+ aws.ami = "ami-524e4726"
40
+ aws.region = "eu-west-1"
41
+ aws.availability_zone = "eu-west-1c"
42
+ aws.instance_type = instance_type
43
+ aws.security_groups = [ "mccloud", "http" ]
44
+ aws.keypair_name = "mccloud-key-tlc"
45
+ end
46
+ end
47
+
48
+ def esx_config(server)
49
+ lambda do |managed, override|
50
+ # use dummy box
51
+ override.vm.box = "managed_dummy_box"
52
+ override.vm.box_url = "https://github.com/tknerr/vagrant-managed-servers/raw/master/dummy.box"
53
+
54
+ # link with this server
55
+ managed.server = server
56
+ end
57
+ end
58
+
59
+ #
60
+ # Vagrantfile for testing
61
+ #
62
+ # NOTE: you need the following plugins:
63
+ # - `vagrant plugin install vagrant-aws --plugin-version 0.2.2`
64
+ # - `vagrant plugin install vagrant-managed-servers --plugin-version 0.1.0`
65
+ # - `vagrant plugin install vagrant-omnibus --plugin-version 1.0.2`
66
+ # - `vagrant plugin install vagrant-cachier --plugin-version 0.1.0`
67
+ #
68
+ Vagrant::configure("2") do |config|
69
+
70
+ # the Chef version to use
71
+ config.omnibus.chef_version = "11.4.4"
72
+
73
+ #
74
+ # define a separate VMs for the 3 providers (vbox, aws, managed)
75
+ # because with Vagrant 1.2.2 you can run a VM with only one provider at once
76
+ #
77
+ [:aws, :vbox, :esx].each do |provider|
78
+ #
79
+ # Sample VM per provider
80
+ #
81
+ config.vm.define :"sample-app-#{provider}" do | sample_app_config |
82
+
83
+ case provider
84
+ when :vbox
85
+ configure_provider(:virtualbox, sample_app_config, vbox_config("sample-app", "33.33.40.10"))
86
+ when :aws
87
+ configure_provider(:aws, sample_app_config, aws_config("m1.small"))
88
+ when :esx
89
+ configure_provider(:managed, sample_app_config, esx_config("33.33.77.10"))
90
+ end
91
+
92
+ sample_app_config.vm.provision :chef_solo do |chef|
93
+ chef.cookbooks_path = [ './cookbooks/sample-app-0.1.0' ]
94
+ chef.add_recipe "sample-app"
95
+ chef.json = {
96
+ :sample_app => {
97
+ :words_of_wisdom => "Vagrant on #{provider} Rocks!"
98
+ }
99
+ }
100
+ end
101
+ end
102
+ end
103
+
104
+ end
@@ -4,9 +4,3 @@
4
4
  path: "../sample-app"
5
5
  # git: "https://github.com/tknerr/sample-app-tlc.git"
6
6
  # ref: "v0.1.0"
7
-
8
- - name: "sample-app"
9
- version: "0.2.0"
10
- path: "../sample-app"
11
- # git: "https://github.com/tknerr/sample-app-tlc.git"
12
- # ref: "v0.2.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-tlc-workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-29 00:00:00.000000000 Z
12
+ date: 2013-06-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef-workflow-tasklib
@@ -59,54 +59,6 @@ dependencies:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.0.1
62
- - !ruby/object:Gem::Dependency
63
- name: vagrant
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 1.0.5
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 1.0.5
78
- - !ruby/object:Gem::Dependency
79
- name: knife-solo
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - '='
84
- - !ruby/object:Gem::Version
85
- version: 0.3.0.pre4
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - '='
92
- - !ruby/object:Gem::Version
93
- version: 0.3.0.pre4
94
- - !ruby/object:Gem::Dependency
95
- name: mccloud
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - '='
100
- - !ruby/object:Gem::Version
101
- version: 0.0.19
102
- type: :runtime
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - '='
108
- - !ruby/object:Gem::Version
109
- version: 0.0.19
110
62
  - !ruby/object:Gem::Dependency
111
63
  name: foodcritic
112
64
  requirement: !ruby/object:Gem::Requirement
@@ -155,22 +107,6 @@ dependencies:
155
107
  - - '='
156
108
  - !ruby/object:Gem::Version
157
109
  version: 0.1.1
158
- - !ruby/object:Gem::Dependency
159
- name: rake
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - '='
164
- - !ruby/object:Gem::Version
165
- version: 0.9.6
166
- type: :runtime
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - '='
172
- - !ruby/object:Gem::Version
173
- version: 0.9.6
174
110
  - !ruby/object:Gem::Dependency
175
111
  name: sahara
176
112
  requirement: !ruby/object:Gem::Requirement
@@ -235,8 +171,7 @@ dependencies:
235
171
  - - '='
236
172
  - !ruby/object:Gem::Version
237
173
  version: 0.7.2
238
- description: makes our workflow for developing with Chef explict by adding a set of
239
- Rake tasks embodying the workflow
174
+ description: ! 'Chef Workflow based on the idea of Top-Level Cookbooks '
240
175
  email:
241
176
  - tkn@zuehlke.com
242
177
  executables: []
@@ -249,7 +184,6 @@ files:
249
184
  - LICENSE.txt
250
185
  - README.md
251
186
  - Rakefile
252
- - Vagrantfile
253
187
  - chef-tlc-workflow.gemspec
254
188
  - docs/ApplicationVsLibraryVsForkedCookbooks.md
255
189
  - docs/TmpLibrarianHelpers.md
@@ -260,21 +194,7 @@ files:
260
194
  - lib/chef-workflow/tasks/tlc.rb
261
195
  - lib/chef-workflow/tasks/tlc/deps.rb
262
196
  - lib/chef-workflow/tasks/tlc/test.rb
263
- - test/Gemfile
264
- - test/ec2-bootstrap/.chef/bootstrap/omnibus-chef.sh
265
- - test/ec2-bootstrap/.gitignore
266
- - test/ec2-bootstrap/Mccloudfile
267
- - test/ec2-bootstrap/Rakefile
268
- - test/ec2-bootstrap/app_cookbooks.yml
269
- - test/esx-bootstrap/.chef/knife.rb
270
- - test/esx-bootstrap/.gitignore
271
- - test/esx-bootstrap/Rakefile
272
- - test/esx-bootstrap/app_cookbooks.yml
273
- - test/esx-bootstrap/nodes/33.33.77.10.json
274
- - test/local-bootstrap/.gitignore
275
- - test/local-bootstrap/Rakefile
276
- - test/local-bootstrap/Vagrantfile
277
- - test/local-bootstrap/app_cookbooks.yml
197
+ - test/esx_fake/Vagrantfile
278
198
  - test/sample-app/CHANGELOG.md
279
199
  - test/sample-app/Cheffile
280
200
  - test/sample-app/README.md
@@ -282,7 +202,12 @@ files:
282
202
  - test/sample-app/metadata.rb
283
203
  - test/sample-app/recipes/default.rb
284
204
  - test/sample-app/templates/default/sample.html.erb
285
- homepage: ''
205
+ - test/vagrant-1.x-bootstrap/.gitignore
206
+ - test/vagrant-1.x-bootstrap/Gemfile
207
+ - test/vagrant-1.x-bootstrap/Rakefile
208
+ - test/vagrant-1.x-bootstrap/Vagrantfile
209
+ - test/vagrant-1.x-bootstrap/app_cookbooks.yml
210
+ homepage: https://github.com/tknerr/chef-tlc-workflow
286
211
  licenses: []
287
212
  post_install_message:
288
213
  rdoc_options: []
@@ -305,24 +230,9 @@ rubyforge_project:
305
230
  rubygems_version: 1.8.24
306
231
  signing_key:
307
232
  specification_version: 3
308
- summary: makes our workflow for developing with Chef explict by adding a set of Rake
309
- tasks embodying the workflow
233
+ summary: Chef Workflow based on the idea of Top-Level Cookbooks
310
234
  test_files:
311
- - test/Gemfile
312
- - test/ec2-bootstrap/.chef/bootstrap/omnibus-chef.sh
313
- - test/ec2-bootstrap/.gitignore
314
- - test/ec2-bootstrap/Mccloudfile
315
- - test/ec2-bootstrap/Rakefile
316
- - test/ec2-bootstrap/app_cookbooks.yml
317
- - test/esx-bootstrap/.chef/knife.rb
318
- - test/esx-bootstrap/.gitignore
319
- - test/esx-bootstrap/Rakefile
320
- - test/esx-bootstrap/app_cookbooks.yml
321
- - test/esx-bootstrap/nodes/33.33.77.10.json
322
- - test/local-bootstrap/.gitignore
323
- - test/local-bootstrap/Rakefile
324
- - test/local-bootstrap/Vagrantfile
325
- - test/local-bootstrap/app_cookbooks.yml
235
+ - test/esx_fake/Vagrantfile
326
236
  - test/sample-app/CHANGELOG.md
327
237
  - test/sample-app/Cheffile
328
238
  - test/sample-app/README.md
@@ -330,3 +240,8 @@ test_files:
330
240
  - test/sample-app/metadata.rb
331
241
  - test/sample-app/recipes/default.rb
332
242
  - test/sample-app/templates/default/sample.html.erb
243
+ - test/vagrant-1.x-bootstrap/.gitignore
244
+ - test/vagrant-1.x-bootstrap/Gemfile
245
+ - test/vagrant-1.x-bootstrap/Rakefile
246
+ - test/vagrant-1.x-bootstrap/Vagrantfile
247
+ - test/vagrant-1.x-bootstrap/app_cookbooks.yml
@@ -1,33 +0,0 @@
1
- #
2
- # Vagrantfile simulating an ESX-like environment for testing purposes:
3
- #
4
- # * assume ssh root access as the only prerequisite
5
- # * using bare OS baseboxes with no Chef installed
6
- #
7
- Vagrant::Config.run do |config|
8
-
9
- # use bare os baseboxes
10
- config.vm.box = "ubuntu-12.04-server-amd64-bare-os"
11
- config.vm.box_url = "http://dl.dropbox.com/u/13494216/ubuntu-12.04-server-amd64-bare-os.box"
12
-
13
- config.vm.define :esx_like_vm do | esx_like_vm_config |
14
- esx_like_vm_config.vm.customize ["modifyvm", :id,
15
- "--memory", "1024",
16
- "--name", "chef-tlc-workflow-esx-like-vm"]
17
- esx_like_vm_config.vm.host_name = "chef-tlc-workflow-esx-like-vm.local"
18
- esx_like_vm_config.vm.network :hostonly, "33.33.77.10"
19
- end
20
-
21
- #
22
- # dummy vm in the same network, keeping it on so that no additional
23
- # user elevation dialogs appear for the other VMs
24
- #
25
- config.vm.define :dummy do | dummy_vm_config |
26
- dummy_vm_config.vm.customize ["modifyvm", :id,
27
- "--memory", "256",
28
- "--name", "chef-tlc-workflow-dummy-vm"]
29
- dummy_vm_config.vm.host_name = "chef-tlc-workflow-dummy-vm.local"
30
- dummy_vm_config.vm.network :hostonly, "33.33.77.2"
31
- end
32
-
33
- end
@@ -1,7 +0,0 @@
1
- source :rubygems
2
-
3
- source 'https://gems.gemfury.com/hUe8s8nSyzxs7JMMSZV8/' # vagrant-1.0.5.1
4
- source 'https://gems.gemfury.com/psBbdHx94zqZrvxpiVmm/' # librarian-0.0.26.2
5
-
6
- gem "chef-tlc-workflow", "0.1.3",
7
- :path => "#{File.dirname(__FILE__)}/../../chef-tlc-workflow"
@@ -1,34 +0,0 @@
1
- #!/bin/bash -ex
2
-
3
- if which curl 2>/dev/null; then
4
- HTTP_GET_CMD="curl -L"
5
- else
6
- HTTP_GET_CMD="wget -qO-"
7
- fi
8
-
9
- # read/parse user-data
10
- USERDATA=`$HTTP_GET_CMD http://169.254.169.254/latest/user-data`
11
- CHEF_VERSION=`echo $USERDATA | tr -s ',' '\n' | grep "chef_version" | cut -d'=' -f2`
12
- FQDN=`echo $USERDATA | tr -s ',' '\n' | grep "fqdn" | cut -d'=' -f2`
13
-
14
- # install Chef
15
- if [ -z "$CHEF_VERSION" ]; then
16
- $HTTP_GET_CMD https://www.opscode.com/chef/install.sh | sudo bash -s
17
- else
18
- $HTTP_GET_CMD https://www.opscode.com/chef/install.sh | sudo bash -s -- -v $CHEF_VERSION
19
- fi
20
-
21
- # set proper hostname
22
- if [ "$FQDN" ]; then
23
- HOSTNAME=`echo $FQDN | sed -r 's/\..*//'`
24
- if [ "`grep "127.0.1.1" /etc/hosts`" ]; then
25
- sudo sed -r -i "s/^(127[.]0[.]1[.]1[[:space:]]+).*$/\\1$FQDN $HOSTNAME/" /etc/hosts
26
- else
27
- sudo sed -r -i "s/^(127[.]0[.]0[.]1[[:space:]]+localhost[[:space:]]*)$/\\1\n127.0.1.1 $FQDN $HOSTNAME/" /etc/hosts
28
- fi
29
- sudo sed -i "s/.*$/$HOSTNAME/" /etc/hostname
30
- sudo hostname -F /etc/hostname
31
- fi
32
-
33
- # XXX: ensure that file_cache_path configured in solo.rb exists (Mccloud does not create it)
34
- sudo mkdir -p /var/chef-solo
@@ -1,3 +0,0 @@
1
- cookbooks/
2
- tmp/
3
- Cheffile.lock
@@ -1,60 +0,0 @@
1
- Mccloud::Config.run do |config|
2
-
3
- # identity / namespace
4
- config.mccloud.prefix="mccloud"
5
- config.mccloud.environment="tlc"
6
- config.mccloud.identity=ENV['USERNAME']
7
-
8
- # define AWS cloud provider for EU-West region
9
- config.provider.define "aws-eu-west" do |provider_config|
10
- provider_config.provider.flavor = :aws
11
- provider_config.provider.options = { }
12
- provider_config.provider.region = "eu-west-1"
13
- provider_config.provider.check_keypairs = true
14
- provider_config.provider.check_security_groups = true
15
- provider_config.provider.namespace = "mccloud-tlc-#{ENV['USERNAME']}"
16
- end
17
-
18
- # ***********************************************
19
- # VM Definitions
20
- # ***********************************************
21
-
22
- config.vm.define "sample-app" do |config|
23
-
24
- # official Ubuntu 12.04 AMI
25
- config.vm.ami = "ami-524e4726"
26
- config.vm.provider= "aws-eu-west"
27
- config.vm.flavor = "m1.small"
28
- config.vm.zone = "eu-west-1c"
29
- config.vm.user = "ubuntu"
30
-
31
- # NOTE: the security groups must exist (e.g. create it beforehand via AWS console)
32
- config.vm.security_groups = [ "mccloud", "http" ]
33
-
34
- # see http://fog.io/1.1.2/rdoc/Fog/Compute/AWS/Servers.html
35
- # and https://github.com/fog/fog/blob/v1.1.2/lib/fog/aws/requests/compute/run_instances.rb
36
- config.vm.create_options = {
37
- :user_data => "chef_version=10.18.2-1,fqdn=sample-app.example.com"
38
- }
39
-
40
- # NOTE: the keypair (for logging in to the VM) must exist (e.g. create it beforehand via AWS console)
41
- config.vm.key_name = "mccloud-key-tlc"
42
- config.vm.private_key_path = "#{ENV['HOME']}/.ssh/mccloud_rsa"
43
- config.vm.public_key_path = "#{ENV['HOME']}/.ssh/mccloud_rsa.pub"
44
-
45
- # bootstrap template (runs at first-boot only)
46
- config.vm.bootstrap = ".chef/bootstrap/omnibus-chef.sh"
47
-
48
- # provisioning sript (runs on each mccloud up or provision)
49
- config.vm.provision :chef_solo do |chef|
50
- chef.cookbooks_path = [ "cookbooks/sample-app-0.1.0" ]
51
- chef.log_level = "info"
52
- chef.add_recipe "sample-app"
53
- chef.json.merge!({
54
- :sample_app => {
55
- :words_of_wisdom => "YEAH! I did it for the Lulz!"
56
- }
57
- })
58
- end
59
- end
60
- end
@@ -1,57 +0,0 @@
1
- require 'bundler/setup'
2
- require 'fileutils'
3
- require 'chef-workflow/tasks/tlc/deps'
4
-
5
- desc "resolve application cookbook with all its dependencies"
6
- task :resolve_deps, [:app_cookbook] do |t, args|
7
- Rake::Task["tlc:deps:resolve_app_cookbook"].invoke(args[:app_cookbook])
8
- end
9
-
10
- desc "bring up the mccloud \"VM\" as configured in the Mccloudfile"
11
- task :up, [:vm_name] do |t, args|
12
- vm_name = get_required_args(args, :vm_name)
13
- sh "mccloud up #{vm_name}"
14
- end
15
-
16
- desc "provision the mccloud \"VM\" with the provisioners as defined in the Mccloudfile"
17
- task :provision, [:vm_name] do |t, args|
18
- vm_name = get_required_args(args, :vm_name)
19
- sh "mccloud provision #{vm_name}"
20
- end
21
-
22
- desc "destroy the mccloud \"VM\" with the given name"
23
- task :destroy, [:vm_name] do |t, args|
24
- vm_name = get_required_args(args, :vm_name)
25
- sh "mccloud destroy #{vm_name}"
26
- end
27
-
28
- desc "ssh into the mccloud \"VM\" with the given name"
29
- task :ssh, [:vm_name] do |t, args|
30
- vm_name = get_required_args(args, :vm_name)
31
- sh "mccloud ssh #{vm_name}"
32
- end
33
-
34
- desc "show status of all mccloud \"VMs\" defined in the Mccloudfile"
35
- task :status do
36
- sh "mccloud status"
37
- end
38
-
39
- desc "returns the ip address of the mccloud \"VM\" with the given name"
40
- task :get_ip, [:vm_name] do |t, args|
41
- vm_name = get_required_args(args, :vm_name)
42
- # TODO: filter out IP of given vm rather than printing status for all
43
- sh "mccloud status"
44
- end
45
-
46
-
47
- #
48
- # helper methods below
49
- #
50
- def get_required_args(args, *param_keys)
51
- param_values = Array.new
52
- param_keys.each do |param_key|
53
- fail "parameter #{param_key.to_sym} is required" unless args[param_key.to_sym]
54
- param_values << args[param_key.to_sym]
55
- end
56
- param_values.size == 1 ? param_values[0] : param_values
57
- end
@@ -1,10 +0,0 @@
1
- #
2
- # knife configuration that is honored by knife-solo, see
3
- # https://github.com/matschaffer/knife-solo/wiki/Upgrading-to-0.3.0
4
- #
5
- log_level :info
6
- log_location STDOUT
7
- data_bag_path "data_bags"
8
- encrypted_data_bag_secret "data_bag_key"
9
- role_path "roles"
10
- cookbook_path "cookbooks/#{ENV['CURRENT_APP_COOKBOOK']}"
@@ -1,4 +0,0 @@
1
- cookbooks/
2
- tmp/
3
- Cheffile.lock
4
- solo.rb
@@ -1,58 +0,0 @@
1
- require 'bundler/setup'
2
- require 'fileutils'
3
- require 'chef-workflow/tasks/tlc/deps'
4
- require 'chef-tlc-workflow/helpers'
5
-
6
- desc "resolve application cookbook with all its dependencies"
7
- task :resolve_deps, [:app_cookbook] do |t, args|
8
- Rake::Task["tlc:deps:resolve_app_cookbook"].invoke(args[:app_cookbook])
9
- end
10
-
11
- desc "bootstrap a server with Chef, does not provision (will ask for password if no key provided)"
12
- task :bootstrap, [:host, :user, :ssh_key] do |t, args|
13
- host, user = get_required_args(args, :host, :user)
14
- sh "knife solo prepare #{user}@#{host} #{ssh_key_cmdline(args)} --bootstrap-version 10.18.2-1 --no-librarian -V"
15
- end
16
-
17
- desc "provision a server with data from `nodes/<host>.json` (will ask for password if no key provided)"
18
- task :provision, [:app_cookbook, :host, :user, :ssh_key] do |t, args|
19
- app_cookbook, host, user = get_required_args(args, :app_cookbook, :host, :user)
20
- name, version = ChefTLCWorkflow::Helpers::parse_name_and_version(args[:app_cookbook])
21
- with_app "#{name}-#{version}" do
22
- sh "knife solo cook #{user}@#{host} #{ssh_key_cmdline(args)} --no-chef-check --no-librarian -V"
23
- end
24
- end
25
-
26
- desc "remove Chef-solo cookbook traces from the server (will ask for password if no key provided)"
27
- task :cleanup, [:host, :user, :ssh_key] do |t, args|
28
- host, user = get_required_args(args, :host, :user)
29
- sh "knife solo clean #{user}@#{host} #{ssh_key_cmdline(args)} -V"
30
- end
31
-
32
-
33
- #
34
- # helper methods below
35
- #
36
- def get_required_args(args, *param_keys)
37
- param_values = Array.new
38
- param_keys.each do |param_key|
39
- fail "parameter #{param_key.to_sym} is required" unless args[param_key.to_sym]
40
- param_values << args[param_key.to_sym]
41
- end
42
- param_values
43
- end
44
-
45
- def ssh_key_cmdline(args)
46
- args[:ssh_key] ? "-i #{args[:ssh_key]}" : ""
47
- end
48
-
49
- #
50
- # sets the 'CURRENT_APP_COOKBOOK' env var while the block executes, which is used in
51
- # `.chef/knife.rb` for correctly setting the `cookbook_path` for the given app cookbook
52
- #
53
- def with_app(app_cookbook)
54
- ENV['CURRENT_APP_COOKBOOK'] = app_cookbook
55
- yield
56
- ensure
57
- ENV['CURRENT_APP_COOKBOOK'] = ""
58
- end
@@ -1,12 +0,0 @@
1
-
2
- - name: "sample-app"
3
- version: "0.1.0"
4
- path: "../sample-app"
5
- # git: "https://github.com/tknerr/sample-app-tlc.git"
6
- # ref: "v0.1.0"
7
-
8
- - name: "sample-app"
9
- version: "0.2.0"
10
- path: "../sample-app"
11
- # git: "https://github.com/tknerr/sample-app-tlc.git"
12
- # ref: "v0.2.0"
@@ -1,6 +0,0 @@
1
- {
2
- "sample_app": {
3
- "words_of_wisdom": "I did it for the Lulz!"
4
- },
5
- "run_list": [ "recipe[sample-app]" ]
6
- }
@@ -1,4 +0,0 @@
1
- cookbooks/
2
- tmp/
3
- Cheffile.lock
4
- .vagrant
@@ -1,50 +0,0 @@
1
- require 'bundler/setup'
2
- require 'fileutils'
3
- require 'chef-workflow/tasks/tlc/deps'
4
-
5
- desc "resolve application cookbook with all its dependencies"
6
- task :resolve_deps, [:app_cookbook] do |t, args|
7
- Rake::Task["tlc:deps:resolve_app_cookbook"].invoke(args[:app_cookbook])
8
- end
9
-
10
- desc "bring up the vagrant \"VM\" as configured in the Vagrantfile"
11
- task :up, [:vm_name] do |t, args|
12
- vm_name = get_required_args(args, :vm_name)
13
- sh "vagrant up #{vm_name}"
14
- end
15
-
16
- desc "provision the vagrant \"VM\" with the provisioners as defined in the Vagrantfile"
17
- task :provision, [:vm_name] do |t, args|
18
- vm_name = get_required_args(args, :vm_name)
19
- sh "vagrant provision #{vm_name}"
20
- end
21
-
22
- desc "destroy the vagrant \"VM\" with the given name"
23
- task :destroy, [:vm_name] do |t, args|
24
- vm_name = get_required_args(args, :vm_name)
25
- sh "vagrant destroy #{vm_name} -f"
26
- end
27
-
28
- desc "ssh into the vagrant \"VM\" with the given name"
29
- task :ssh, [:vm_name] do |t, args|
30
- vm_name = get_required_args(args, :vm_name)
31
- sh "vagrant ssh #{vm_name}"
32
- end
33
-
34
- desc "show status of all vagrant \"VMs\" defined in the Vagrantfile"
35
- task :status do
36
- sh "vagrant status"
37
- end
38
-
39
-
40
- #
41
- # helper methods below
42
- #
43
- def get_required_args(args, *param_keys)
44
- param_values = Array.new
45
- param_keys.each do |param_key|
46
- fail "parameter #{param_key.to_sym} is required" unless args[param_key.to_sym]
47
- param_values << args[param_key.to_sym]
48
- end
49
- param_values.size == 1 ? param_values[0] : param_values
50
- end
@@ -1,31 +0,0 @@
1
- #
2
- # Vagrantfile for testing
3
- #
4
- Vagrant::Config.run do |config|
5
-
6
- # default base box for all VMs
7
- config.vm.box = "opscode-ubuntu-12.04"
8
- config.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_chef-10.18.2.box"
9
-
10
- # sample-app
11
- config.vm.define :'sample-app' do | sample_app_config |
12
- sample_app_config.vm.customize ["modifyvm", :id,
13
- "--memory", "384",
14
- "--name", "sample-app.local"
15
- ]
16
- sample_app_config.vm.host_name = "sample-app.local"
17
- sample_app_config.vm.network :hostonly, "33.33.40.10"
18
-
19
- sample_app_config.vm.provision :chef_solo do |chef|
20
- chef.cookbooks_path = [ './cookbooks/sample-app-0.1.0' ]
21
- chef.add_recipe "sample-app"
22
- chef.json = {
23
- :sample_app => {
24
- :words_of_wisdom => 'AWESOMENESS - When i feel sad, i stop being sad and be awesome instead.'
25
- }
26
- }
27
- end
28
- end
29
-
30
- end
31
-
@@ -1,12 +0,0 @@
1
-
2
- - name: "sample-app"
3
- version: "0.1.0"
4
- path: "../sample-app"
5
- # git: "https://github.com/tknerr/sample-app-tlc.git"
6
- # ref: "v0.1.0"
7
-
8
- - name: "sample-app"
9
- version: "0.2.0"
10
- path: "../sample-app"
11
- # git: "https://github.com/tknerr/sample-app-tlc.git"
12
- # ref: "v0.2.0"