builderator 1.0.0.pre.rc.11 → 1.0.0.pre.rc.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0bf1ff4752407eced7f1dd5c07af238d24c41280
4
- data.tar.gz: ccb0ad24f980d175184137da45db73ed444b14ab
3
+ metadata.gz: c2184d9659c752e4065a951a7595f97100ee3c2a
4
+ data.tar.gz: d9a1df4bacc66c29925fa806a09a60a2994aa848
5
5
  SHA512:
6
- metadata.gz: 01a1036f93281154e9ca3a667662b831ef984f8c86c3e4c3329b20922879f470dc33af2480eab8cf86ab59e0f7a91325ef8b5a3f054c25faa04be55b9795565c
7
- data.tar.gz: b46a4d1cdc6f8072fbd0cc086b815a207aef4c3bb5115d82c69f4ead25cd0ab64c91237f6a25cd0fbc60fa7232d137ef77b486b2b43da6379f3301a88eaca86b
6
+ metadata.gz: 1cafe2ac4672a9a9abeca0512fd083993d0df5c7ab425bda592e25b1e3c3f930d1f2a48bc6be7dff90878a8a0b07d632314f7b5573114250fa3657880d85b17b
7
+ data.tar.gz: 316460b33e0eb304a4e974282e4305a0a1239b9b8e36d3c4cedb35fe37399b79a604c0ccf06428871a392dc9169a0259e18db610572c8e7d5cfc068a8c287f32
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- builderator (1.0.0.pre.rc.10)
4
+ builderator (1.0.0.pre.rc.11)
5
5
  aws-sdk (~> 2.0)
6
6
  berkshelf (~> 3.2)
7
7
  chef (~> 12.0)
@@ -16,12 +16,12 @@ GEM
16
16
  ast (2.1.0)
17
17
  astrolabe (1.3.1)
18
18
  parser (~> 2.2)
19
- aws-sdk (2.2.24)
20
- aws-sdk-resources (= 2.2.24)
21
- aws-sdk-core (2.2.24)
19
+ aws-sdk (2.2.26)
20
+ aws-sdk-resources (= 2.2.26)
21
+ aws-sdk-core (2.2.26)
22
22
  jmespath (~> 1.0)
23
- aws-sdk-resources (2.2.24)
24
- aws-sdk-core (= 2.2.24)
23
+ aws-sdk-resources (2.2.26)
24
+ aws-sdk-core (= 2.2.26)
25
25
  berkshelf (3.3.0)
26
26
  addressable (~> 2.3.4)
27
27
  berkshelf-api-client (~> 1.2)
@@ -56,8 +56,9 @@ GEM
56
56
  celluloid-io (0.16.2)
57
57
  celluloid (>= 0.16.0)
58
58
  nio4r (>= 1.1.0)
59
- chef (12.7.2)
60
- chef-config (= 12.7.2)
59
+ chef (12.8.1)
60
+ bundler (>= 1.10)
61
+ chef-config (= 12.8.1)
61
62
  chef-zero (~> 4.5)
62
63
  diff-lcs (~> 1.2, >= 1.2.4)
63
64
  erubis (~> 2.7)
@@ -80,7 +81,7 @@ GEM
80
81
  specinfra (~> 2.10)
81
82
  syslog-logger (~> 1.6)
82
83
  uuidtools (~> 2.1.5)
83
- chef-config (12.7.2)
84
+ chef-config (12.8.1)
84
85
  mixlib-config (~> 2.0)
85
86
  mixlib-shellout (~> 2.0)
86
87
  chef-zero (4.5.0)
@@ -136,7 +137,7 @@ GEM
136
137
  nio4r (1.2.1)
137
138
  octokit (3.8.0)
138
139
  sawyer (~> 0.6.0, >= 0.5.3)
139
- ohai (8.10.0)
140
+ ohai (8.12.0)
140
141
  chef-config (>= 12.5.0.alpha.1, < 13)
141
142
  ffi (~> 1.9)
142
143
  ffi-yajl (~> 2.2)
@@ -145,6 +146,7 @@ GEM
145
146
  mixlib-config (~> 2.0)
146
147
  mixlib-log
147
148
  mixlib-shellout (~> 2.0)
149
+ plist
148
150
  rake (~> 10.1)
149
151
  systemu (~> 2.6.4)
150
152
  wmi-lite (~> 1.0)
@@ -206,16 +208,16 @@ GEM
206
208
  addressable (~> 2.3.5)
207
209
  faraday (~> 0.8, < 0.10)
208
210
  semverse (1.2.1)
209
- serverspec (2.30.1)
211
+ serverspec (2.31.0)
210
212
  multi_json
211
213
  rspec (~> 3.0)
212
214
  rspec-its
213
- specinfra (~> 2.48)
215
+ specinfra (~> 2.53)
214
216
  sfl (2.2)
215
217
  solve (1.2.1)
216
218
  dep_selector (~> 1.0)
217
219
  semverse (~> 1.1)
218
- specinfra (2.53.0)
220
+ specinfra (2.53.1)
219
221
  net-scp
220
222
  net-ssh (>= 2.7, < 3.1)
221
223
  net-telnet
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0-rc.11
1
+ 1.0.0-rc.12
data/docs/versioning.md CHANGED
@@ -53,7 +53,7 @@ SCM providers must extend the `Builderator::Control::Version::SCM` module, and m
53
53
  - `:tags` `nil` or an array of semver strings
54
54
  * `self.supported?` Return `true` if the provider supports the build environment (e.g. the `Git` provider checks that `pwd` is a git repository), else return `false`.
55
55
 
56
- To enable a provider module, pass it to `SCM.register`. See [blob/auto-version/lib/builderator/control/version/git.rb] for an example.
56
+ To enable a provider module, pass it to `SCM.register`. See [Builderator::Control::Version::Git](blob/auto-version/lib/builderator/control/version/git.rb) for an example.
57
57
 
58
58
  ## This looks like `thor-scmversion`
59
59
 
@@ -24,9 +24,16 @@ module Builderator
24
24
  :provisioners => []
25
25
  }.tap do |json|
26
26
  Config.profile.current.packer.build.each do |_, build|
27
- json[:builders] << build.to_hash.tap do |b|
27
+ build_hash = build.to_hash.tap do |b|
28
28
  b[:tags] = Config.profile.current.tags
29
29
  end
30
+
31
+ ## Support is missing for several regions in some versions of Packer
32
+ # Moving this functionality into a task until we can confirm that Packer
33
+ # has full support again.
34
+ build_hash.delete(:ami_regions)
35
+
36
+ json[:builders] << build_hash
30
37
  end
31
38
 
32
39
  ## Initialize the staging directory
@@ -86,8 +86,10 @@ module Builderator
86
86
  # Helper/utility commands
87
87
  ##
88
88
  desc 'config', 'Print compiled configuration'
89
- def config
89
+ def config(key = nil)
90
90
  invoke Tasks::Version, :current, [], options
91
+
92
+ return puts Config.compiled.send(key).to_json unless key.nil?
91
93
  puts Config.compiled.to_json
92
94
  end
93
95
 
@@ -1,5 +1,7 @@
1
+ require 'aws-sdk'
1
2
  require 'thor'
2
3
 
4
+ require_relative '../control/data'
3
5
  require_relative '../interface/packer'
4
6
  require_relative '../patch/thor-actions'
5
7
 
@@ -20,6 +22,8 @@ module Builderator
20
22
  desc 'configure [PROFILE=default]', 'Generate a packer configuration'
21
23
  def configure(profile = :default)
22
24
  Config.profile.use(profile)
25
+
26
+ invoke Tasks::Version, :current, [], options
23
27
  puts Interface.packer.render if options['debug']
24
28
  end
25
29
 
@@ -28,6 +32,110 @@ module Builderator
28
32
  invoke :configure, [profile], options
29
33
  run_with_input "#{Interface.packer.command} build - #{ args.join('') }", Interface.packer.render
30
34
  end
35
+
36
+ desc 'copy PROFILE', 'Copy AMIs generated by packer to other regions'
37
+ def copy(profile)
38
+ invoke :configure, [profile], options
39
+
40
+ images.each do |image_name, (image, build)|
41
+ parameters = {
42
+ :source_region => Config.aws.region,
43
+ :source_image_id => image.image_id,
44
+ :name => image_name,
45
+ :description => image.description
46
+ }
47
+
48
+ build.ami_regions.each do |region|
49
+ say_status :copy, "image #{image_name} (#{image.image_id}) from #{Config.aws.region} to #{region}"
50
+ Util.ec2(region).copy_image(parameters)
51
+ end
52
+ end
53
+
54
+ invoke :wait, [profile], options
55
+ invoke :tag, [profile], options
56
+ end
57
+
58
+ desc 'tag PROFILE', 'Tag AMIs in other regions'
59
+ def tag(profile)
60
+ invoke :configure, [profile], options
61
+
62
+ images.each do |image_name, (image, build)|
63
+ filters = [{
64
+ :name => 'name',
65
+ :values => [image_name]
66
+ }]
67
+
68
+ ## Add some additional tags about the regional source
69
+ image.tags << {
70
+ :key => 'source_region',
71
+ :value => Config.aws.region
72
+ }
73
+ image.tags << {
74
+ :key => 'source_ami',
75
+ :value => image.image_id
76
+ }
77
+
78
+ build.ami_regions.each do |region|
79
+ regional_image = Util.ec2(region).describe_images(:filters => filters).images.first
80
+
81
+ say_status :tag, "AMI #{image_name} (#{regional_image.image_id}) in #{region}"
82
+ Util.ec2(region).create_tags(:resources => [regional_image.image_id], :tags => image.tags)
83
+ end
84
+ end
85
+ end
86
+
87
+ desc 'wait PROFILE', 'Wait for copied AMIs to become available in another region'
88
+ def wait(profile)
89
+ invoke :configure, [profile], options
90
+
91
+ waiting = true
92
+
93
+ images.each do |image_name, (image, build)|
94
+ say_status :wait, "for #{image.image_id} (#{image_name}) to be available in #{build.ami_regions.join(', ')}", :yellow
95
+ end
96
+
97
+ while waiting
98
+ waiting = false
99
+
100
+ images.each do |image_name, (image, build)|
101
+ filters = [{
102
+ :name => 'name',
103
+ :values => [image_name]
104
+ }]
105
+
106
+ build.ami_regions.each do |region|
107
+ regional_image = Util.ec2(region).describe_images(:filters => filters).images.first
108
+
109
+ ## It takes a few seconds for the new AMI to show up in the `describe_images` response-set
110
+ state = regional_image.nil? ? 'unknown' : regional_image.state
111
+ image_id = regional_image.nil? ? 'unknown' : regional_image.image_id
112
+
113
+ waiting = (state != 'available') || waiting
114
+ status_color = case state
115
+ when 'pending', 'unknown' then :yellow
116
+ when 'available' then :green
117
+ else :red
118
+ end
119
+
120
+ say_status :image, "#{image_id} (#{image.name}) is #{state} in #{region}", status_color
121
+ end
122
+ end
123
+
124
+ ## If waiting == false, loop immediately to break
125
+ sleep(10) if waiting
126
+ end
127
+
128
+ say_status :complete, 'All copied images are available'
129
+ end
130
+
131
+ private
132
+
133
+ ## Find details for generated images in current region
134
+ def images
135
+ @images ||= Config.profile.current.packer.build.each_with_object({}) do |(_, build), memo|
136
+ memo[build.ami_name] = [Control::Data.lookup(:image, :name => build.ami_name).first, build]
137
+ end
138
+ end
31
139
  end
32
140
  end
33
141
  end
@@ -18,6 +18,8 @@ module Builderator
18
18
  desc 'configure [PROFILE]', 'Write a Vagrantfile into the project workspace'
19
19
  def configure(profile = :default)
20
20
  Config.profile.use(profile)
21
+ invoke Tasks::Version, :current, [], options
22
+
21
23
  Interface.vagrant.write
22
24
  end
23
25
 
@@ -60,16 +60,20 @@ module Builderator
60
60
  ##
61
61
  # AWS Clients
62
62
  ##
63
- def ec2
64
- @ec2 ||= Aws::EC2::Client.new(:region => Config.aws.region)
63
+ def ec2(region = Config.aws.region)
64
+ clients["ec2-#{region}"] ||= Aws::EC2::Client.new(:region => region)
65
65
  end
66
66
 
67
- def asg
68
- @asg ||= Aws::AutoScaling::Client.new(:region => Config.aws.region)
67
+ def asg(region = Config.aws.region)
68
+ clients["asg-#{region}"] ||= Aws::AutoScaling::Client.new(:region => region)
69
69
  end
70
70
 
71
71
  private
72
72
 
73
+ def clients
74
+ @clients ||= {}
75
+ end
76
+
73
77
  def _filter_reduce(resource, filters)
74
78
  filters.reduce(true) do |memo, (k, v)|
75
79
  ## Allow for negation with a leading `~`
@@ -41,7 +41,8 @@ Vagrant.configure('2') do |config|
41
41
  # Use the standard data directory for Chef
42
42
  ##
43
43
  config.vm.provision :shell,
44
- :inline => 'mkdir -p <%= chef.staging_directory %>/cache && chown vagrant:vagrant -R <%= chef.staging_directory %>',
44
+ :inline => "sudo mkdir -p #{Config.chef.staging_directory}/cache && "\
45
+ "sudo chown $(whoami) -R #{Config.chef.staging_directory}",
45
46
  :privileged => true
46
47
 
47
48
  ##
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: builderator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.rc.11
4
+ version: 1.0.0.pre.rc.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Manero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-22 00:00:00.000000000 Z
11
+ date: 2016-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake