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

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.
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