chef-workflow 0.1.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/.gitignore +20 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +161 -0
- data/Rakefile +8 -0
- data/bin/chef-workflow-bootstrap +149 -0
- data/chef-workflow.gemspec +27 -0
- data/lib/chef-workflow.rb +73 -0
- data/lib/chef-workflow/support/attr.rb +31 -0
- data/lib/chef-workflow/support/debug.rb +51 -0
- data/lib/chef-workflow/support/ec2.rb +170 -0
- data/lib/chef-workflow/support/general.rb +63 -0
- data/lib/chef-workflow/support/generic.rb +30 -0
- data/lib/chef-workflow/support/ip.rb +129 -0
- data/lib/chef-workflow/support/knife-plugin.rb +33 -0
- data/lib/chef-workflow/support/knife.rb +122 -0
- data/lib/chef-workflow/support/scheduler.rb +403 -0
- data/lib/chef-workflow/support/vagrant.rb +41 -0
- data/lib/chef-workflow/support/vm.rb +71 -0
- data/lib/chef-workflow/support/vm/chef_server.rb +31 -0
- data/lib/chef-workflow/support/vm/ec2.rb +146 -0
- data/lib/chef-workflow/support/vm/knife.rb +217 -0
- data/lib/chef-workflow/support/vm/vagrant.rb +95 -0
- data/lib/chef-workflow/version.rb +6 -0
- metadata +167 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'chef-workflow/support/vagrant'
|
2
|
+
require 'chef-workflow/support/ip'
|
3
|
+
require 'vagrant/prison'
|
4
|
+
|
5
|
+
class VM
|
6
|
+
#
|
7
|
+
# Provisions a server group with vagrant and virtualbox.
|
8
|
+
#
|
9
|
+
# All vagrant machines share the same IP address on eth0, which is typically
|
10
|
+
# 10.0.2.15. To compensate for that, a host-only network address will be
|
11
|
+
# auto-generated for each server in the group and lives on eth1. It is strongly
|
12
|
+
# recommended that you deal with this problem in your chef cookbooks, as
|
13
|
+
# node["ipaddress"] will typically be wrong and we cannot compensate for it.
|
14
|
+
#
|
15
|
+
# Groups provisioned in this manner are done so with Vagrant::Prison.
|
16
|
+
#
|
17
|
+
class VagrantProvisioner
|
18
|
+
# Vagrant::Prison object
|
19
|
+
attr_reader :prison
|
20
|
+
# number of servers to provision
|
21
|
+
attr_reader :number_of_servers
|
22
|
+
# name of server group
|
23
|
+
attr_accessor :name
|
24
|
+
|
25
|
+
#
|
26
|
+
# Constructor. Expects a server group name and a number of servers to provision.
|
27
|
+
#
|
28
|
+
def initialize(name, number_of_servers)
|
29
|
+
@prison = nil
|
30
|
+
@name = name
|
31
|
+
@number_of_servers = number_of_servers
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Get the ips associated with this server group.
|
36
|
+
#
|
37
|
+
def ips
|
38
|
+
IPSupport.singleton.get_role_ips(name)
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Get the appropriate Vagrant UI class, depending on debugging settings.
|
43
|
+
#
|
44
|
+
def ui_class
|
45
|
+
$CHEF_WORKFLOW_DEBUG >= 2 ? Vagrant::UI::Basic : Vagrant::UI::Silent
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# helper to bootstrap vagrant requirements.
|
50
|
+
#
|
51
|
+
def bootstrap_vagrant_ipsupport
|
52
|
+
IPSupport.singleton.seed_vagrant_ips
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# Provision a group of servers. If successful, returns an array of the ips
|
57
|
+
# allocated for the group. Ignores incoming arguments.
|
58
|
+
#
|
59
|
+
def startup(*args)
|
60
|
+
bootstrap_vagrant_ipsupport
|
61
|
+
|
62
|
+
IPSupport.singleton.delete_role(name)
|
63
|
+
|
64
|
+
@prison = Vagrant::Prison.new(Dir.mktmpdir, false)
|
65
|
+
prison.name = name
|
66
|
+
prison.configure do |config|
|
67
|
+
config.vm.box_url = VagrantSupport.singleton.box_url
|
68
|
+
config.vm.box = VagrantSupport.singleton.box
|
69
|
+
number_of_servers.times do |x|
|
70
|
+
ip = IPSupport.singleton.unused_ip
|
71
|
+
IPSupport.singleton.assign_role_ip(name, ip)
|
72
|
+
config.vm.define "#{name}-#{x}" do |this_config|
|
73
|
+
this_config.vm.network :hostonly, ip
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
prison.construct(:ui_class => ui_class)
|
79
|
+
|
80
|
+
return prison.start ? ips : false
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# Deprovisions the servers for this group, and cleans up the prison and
|
85
|
+
# allocated IP addresses.
|
86
|
+
#
|
87
|
+
def shutdown
|
88
|
+
if prison
|
89
|
+
prison.configure_environment(:ui_class => ui_class)
|
90
|
+
prison.cleanup
|
91
|
+
end
|
92
|
+
IPSupport.singleton.delete_role(name)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: chef-workflow
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Erik Hollensbe
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: vagrant-prison
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.1.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.1.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: chef
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '10.0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '10.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: aws-sdk
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.7.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.7.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: net-ssh
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.6.0
|
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: 2.6.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rdoc
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: A comprehensive rake-based workflow for chef
|
111
|
+
email:
|
112
|
+
- erik+github@hollensbe.org
|
113
|
+
executables:
|
114
|
+
- chef-workflow-bootstrap
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- Gemfile
|
120
|
+
- LICENSE.txt
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- bin/chef-workflow-bootstrap
|
124
|
+
- chef-workflow.gemspec
|
125
|
+
- lib/chef-workflow.rb
|
126
|
+
- lib/chef-workflow/support/attr.rb
|
127
|
+
- lib/chef-workflow/support/debug.rb
|
128
|
+
- lib/chef-workflow/support/ec2.rb
|
129
|
+
- lib/chef-workflow/support/general.rb
|
130
|
+
- lib/chef-workflow/support/generic.rb
|
131
|
+
- lib/chef-workflow/support/ip.rb
|
132
|
+
- lib/chef-workflow/support/knife-plugin.rb
|
133
|
+
- lib/chef-workflow/support/knife.rb
|
134
|
+
- lib/chef-workflow/support/scheduler.rb
|
135
|
+
- lib/chef-workflow/support/vagrant.rb
|
136
|
+
- lib/chef-workflow/support/vm.rb
|
137
|
+
- lib/chef-workflow/support/vm/chef_server.rb
|
138
|
+
- lib/chef-workflow/support/vm/ec2.rb
|
139
|
+
- lib/chef-workflow/support/vm/knife.rb
|
140
|
+
- lib/chef-workflow/support/vm/vagrant.rb
|
141
|
+
- lib/chef-workflow/version.rb
|
142
|
+
homepage: https://github.com/chef-workflow/chef-workflow
|
143
|
+
licenses: []
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 1.8.24
|
163
|
+
signing_key:
|
164
|
+
specification_version: 3
|
165
|
+
summary: A comprehensive rake-based workflow for chef
|
166
|
+
test_files: []
|
167
|
+
has_rdoc:
|