stemcell 0.12.0 → 0.12.1

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: d0a73c0c28344f526396892ffde6de0054696d7f
4
- data.tar.gz: 3286ce5584f761e5e643f9fe02bd575f9199e651
3
+ metadata.gz: 0311d6f13f75e1e7e52496b9491eb5768c13eb35
4
+ data.tar.gz: 67d5f0c43c6fbc5a81139ff8773a82027bd4fd99
5
5
  SHA512:
6
- metadata.gz: 00ddd6ab1066baf755627d945f0fc033457f9256f891176a5af5b1b0d259fc93885d08a1d5b12cce4cbe42733be0b8af36ae6003fab521d7535cd00dd9da57e8
7
- data.tar.gz: 4e09e64bba35df73ec82622889863d3456b162a6d9405954f02bb0087709bbf9a0036d052d543823871ed712d0c6171222a2bddbd7ab9e94eb9bdf7f351a036b
6
+ metadata.gz: 1d0e45ae07c7c9995d1c11198b0c6ba9991bc1e71e38fcdc6abf5e460ba91abcb52c45b27142c31b3a282738a86b8e53a3522be13f89e71c4b8f22229b2c8cbf
7
+ data.tar.gz: 27fc12f639c4b446edd1439e28d82d3dd078c807bbb2206f21b49fd73af1809d4543b86f6d3477ceaa797d4c93b0ce68d02d7038416a9b462e022bd8a3ffab10
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.12.1
2
+ - Add support for Amazon Linux to the default bootstrap script
3
+ - Allow setting backing_store options per region
4
+ - Display private ip for launched instances
5
+
1
6
  # 0.12.0
2
7
  - Require Nokogiri ~> 1.8.2 due to vulnerability CVE-2017-15412
3
8
  - Require ruby version >= 2.1 for Nokogiri compatibility
@@ -258,7 +258,8 @@ module Stemcell
258
258
  puts "\nhere is the info for what's launched:"
259
259
  instances.each do |instance|
260
260
  puts "\tinstance_id: #{instance.instance_id}"
261
- puts "\tpublic ip: #{instance.public_ip_address}"
261
+ puts "\tpublic ip: #{instance.public_ip_address || 'none'}"
262
+ puts "\tprivate ip: #{instance.private_ip_address || 'none'}"
262
263
  puts
263
264
  end
264
265
  puts "install logs will be in /var/log/init and /var/log/init.err"
@@ -21,10 +21,10 @@ module Stemcell
21
21
  validate_configutation
22
22
  end
23
23
 
24
- def options_for_backing_store(backing_store)
24
+ def options_for_backing_store(backing_store, region)
25
25
  options = backing_store_options[backing_store]
26
26
  raise UnknownBackingStoreError.new(backing_store) if options.nil?
27
- options
27
+ options.fetch(region, options)
28
28
  end
29
29
 
30
30
  def random_az_for_region(region)
@@ -84,9 +84,14 @@ module Stemcell
84
84
  backing_store ||= config.default_options['backing_store']
85
85
  backing_store ||= DEFAULT_BACKING_STORE
86
86
 
87
+ backing_store_region = override_options['region']
88
+ backing_store_region ||= role_options.to_hash['region'] if role_options
89
+ backing_store_region ||= config.default_options['region']
90
+ backing_store_region ||= DEFAULT_OPTIONS['region']
91
+
87
92
  # Step 3: Retrieve the backing store options from the defaults.
88
93
 
89
- backing_store_options = config.options_for_backing_store(backing_store)
94
+ backing_store_options = config.options_for_backing_store(backing_store, backing_store_region)
90
95
  backing_store_options['backing_store'] = backing_store
91
96
 
92
97
  # Step 4: Merge the options together in priority order.
@@ -54,16 +54,33 @@ encrypted_data_bag_secret_path='<%= opts['chef_data_bag_secret_path'].to_s %>'
54
54
  ##
55
55
 
56
56
  update() {
57
- echo updating apt repo
58
- apt-get update 1>&2
57
+ echo updating repository metadata
58
+
59
+ case $OS_PACKAGE_MANAGER in
60
+ apt)
61
+ apt-get update 1>&2
62
+ ;;
63
+ yum)
64
+ # yum install will check if metadata needs to be updated
65
+ # so it's just for consistency with apt-based distros
66
+ yum check-update 1>&2 || true
67
+ ;;
68
+ esac
59
69
  }
60
70
 
61
71
  install() {
62
- if ! (dpkg -l | awk '{print $2}' | grep -q ^$1$ ) ; then
63
- echo installing $1...
64
- export DEBIAN_FRONTEND=noninteractive
65
- apt-get install -y $1 1>&2
66
- fi
72
+ case $OS_PACKAGE_MANAGER in
73
+ apt)
74
+ if ! (dpkg -l | awk '{print $2}' | grep -q ^$1$ ) ; then
75
+ echo installing $1...
76
+ export DEBIAN_FRONTEND=noninteractive
77
+ apt-get install -y $1 1>&2
78
+ fi
79
+ ;;
80
+ yum)
81
+ rpm -q $1 2>&1 >/dev/null || yum install -y $1
82
+ ;;
83
+ esac
67
84
  }
68
85
 
69
86
  set_hostname() {
@@ -86,22 +103,34 @@ set_hostname() {
86
103
  echo "$local_ip $fqdn $hostname" >> /etc/hosts
87
104
  }
88
105
 
106
+ download_chef_package() {
107
+ echo "Downloading chef from $1"
108
+ wget "$1" -O "$2" --progress=dot:mega --tries=15 --retry-connrefused --timeout=5 --wait=10 --random-wait --continue --no-dns-cache
109
+ }
110
+
89
111
  install_chef() {
112
+ package_local="/tmp/chef_${chef_version}.${OS_PACKAGE_EXT}"
113
+ package_url="$(render_chef_url)"
114
+
90
115
  # check to see if chef is already installed
91
116
  if ! which chef-solo > /dev/null ; then
92
- platform=`lsb_release -s -i | tr '[:upper:]' '[:lower:]'`
93
- platform_version=`lsb_release -s -r`
94
- arch=`uname -m`
95
- package_local="/tmp/chef_${chef_version}.deb"
96
- package_url="<%= opts['chef_package_source'] %>"
97
- echo "Downloading chef from $package_url"
98
- wget $package_url -O $package_local --progress=dot:mega
99
- echo "Installing chef $chef_version"
100
- dpkg -i $package_local
101
- rm $package_local
117
+ case $OS_PACKAGE_MANAGER in
118
+ apt)
119
+ download_chef_package "$package_url" "$package_local"
120
+ echo "Installing chef $chef_version"
121
+ dpkg -i $package_local
122
+ ;;
123
+ yum)
124
+ download_chef_package "$package_url" "$package_local"
125
+ echo "Installing chef $chef_version"
126
+ rpm -ivh "$package_local"
127
+ ;;
128
+ esac
102
129
  else
103
130
  echo chef is already installed
104
131
  fi
132
+
133
+ rm -f $package_local
105
134
  }
106
135
 
107
136
  create_ohai_hint() {
@@ -154,7 +183,6 @@ cookbook_path ["#{repo_dir}/site-cookbooks", "#{repo_dir}/cookbooks"]
154
183
  role_path "#{repo_dir}/roles"
155
184
  data_bag_path "#{repo_dir}/data_bags"
156
185
  ohai.plugin_path << "#{repo_dir}/ohai_plugins"
157
-
158
186
  ssl_verify_mode :verify_peer
159
187
  log_level :info
160
188
  log_location STDOUT
@@ -199,7 +227,7 @@ git reset --hard origin/\${branch}
199
227
  git clean -fdx
200
228
 
201
229
  json="{\"role\": \"\${role}\", \"env\": \"\${env}\", \"branch\": \"\${branch}\"}"
202
- json_file=\`tempfile\`
230
+ json_file=\`mktemp\`
203
231
  echo \$json > \$json_file
204
232
  trap "{ rm -f '\$json_file' ; }" EXIT
205
233
 
@@ -237,12 +265,55 @@ run_chef() {
237
265
  set -e
238
266
  }
239
267
 
268
+ render_chef_url() {
269
+ base_url="<%= opts['chef_package_source'] %>"
270
+ echo $base_url | sed \
271
+ -e "s/%{platform}/$OS_PLATFORM/g" \
272
+ -e "s/%{platform_version}/$OS_PLATFORM_VERSION/g" \
273
+ -e "s/%{chef_version}/$chef_version/g" \
274
+ -e "s/%{package_manager}/$OS_PACKAGE_MANAGER/g" \
275
+ -e "s/%{package_arch}/$OS_PACKAGE_ARCH/g" \
276
+ -e "s/%{package_ext}/$OS_PACKAGE_EXT/g"
277
+ }
278
+
279
+ check_os_version() {
280
+ NAME=unsupported
281
+
282
+ if [ -f /etc/os-release ]; then
283
+ . /etc/os-release
284
+ fi
285
+
286
+ case "$NAME" in
287
+ "Ubuntu")
288
+ OS_VERSION="$NAME $VERSION_ID"
289
+ OS_PLATFORM=ubuntu
290
+ OS_PLATFORM_VERSION=$VERSION_ID
291
+ OS_PACKAGE_MANAGER=apt
292
+ OS_PACKAGE_ARCH=$(dpkg --print-architecture)
293
+ OS_PACKAGE_EXT=deb
294
+ ;;
295
+ "Amazon Linux")
296
+ OS_VERSION="$NAME $VERSION_ID"
297
+ OS_PLATFORM=amazon
298
+ OS_PLATFORM_VERSION=$VERSION_ID
299
+ OS_PACKAGE_MANAGER=yum
300
+ OS_PACKAGE_ARCH=$(uname -m)
301
+ OS_PACKAGE_EXT=rpm
302
+ ;;
303
+ *)
304
+ echo "Unsupported operating system"
305
+ exit 1
306
+ ;;
307
+ esac
308
+ }
240
309
 
241
310
  ##
242
311
  ## main
243
312
  ##
244
313
 
245
- echo "starting chef bootstrapping..."
314
+ check_os_version
315
+
316
+ echo "starting chef bootstrapping on ${OS_VERSION}..."
246
317
  update
247
318
  install curl
248
319
  install git
@@ -1,3 +1,3 @@
1
1
  module Stemcell
2
- VERSION = "0.12.0"
2
+ VERSION = "0.12.1"
3
3
  end
@@ -4,7 +4,9 @@
4
4
  },
5
5
  "backing_store": {
6
6
  "instance_store": {
7
- "image_id": "ami-d9d6a6b0"
7
+ "us-east-1": {
8
+ "image_id": "ami-d9d6a6b0"
9
+ }
8
10
  }
9
11
  }
10
12
  }
@@ -0,0 +1,13 @@
1
+ {
2
+ "defaults": {
3
+ "instance_type": "m1.small"
4
+ },
5
+ "backing_store": {
6
+ "instance_store": {
7
+ "image_id": "ami-d9d6a6b0"
8
+ }
9
+ },
10
+ "availability_zones": {
11
+ "us-east-1": ["us-east-1a"]
12
+ }
13
+ }
@@ -5,7 +5,9 @@
5
5
  },
6
6
  "backing_store": {
7
7
  "instance_store": {
8
- "image_id": "ami-d9d6a6b0"
8
+ "us-east-1": {
9
+ "image_id": "ami-d9d6a6b0"
10
+ }
9
11
  }
10
12
  },
11
13
  "availability_zones": {
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "backing_store": {
3
3
  "instance_store": {
4
- "baz": "woo"
4
+ "us-east-1": {
5
+ "baz": "woo"
6
+ }
5
7
  }
6
8
  },
7
9
  "availability_zones": {
@@ -16,10 +16,14 @@
16
16
 
17
17
  "backing_store": {
18
18
  "hvm1": {
19
- "image_id": "ami-1"
19
+ "us-east-1": {
20
+ "image_id": "ami-1"
21
+ }
20
22
  },
21
23
  "pv1": {
22
- "image_id": "ami-2"
24
+ "us-east-1": {
25
+ "image_id": "ami-2"
26
+ }
23
27
  }
24
28
  },
25
29
 
@@ -4,7 +4,9 @@
4
4
  },
5
5
  "backing_store": {
6
6
  "instance_store": {
7
- "image_id": "ami-d9d6a6b0"
7
+ "us-east-1": {
8
+ "image_id": "ami-d9d6a6b0"
9
+ }
8
10
  }
9
11
  },
10
12
  "availability_zones": {
@@ -32,7 +32,9 @@ describe Stemcell::MetadataSource::Configuration do
32
32
  it "sets backing_store_options" do
33
33
  expect(config.backing_store_options).to eql({
34
34
  'instance_store' => {
35
- 'image_id' => 'ami-d9d6a6b0'
35
+ 'us-east-1' => {
36
+ 'image_id' => 'ami-d9d6a6b0'
37
+ }
36
38
  }
37
39
  })
38
40
  end
@@ -86,10 +88,11 @@ describe Stemcell::MetadataSource::Configuration do
86
88
 
87
89
  describe '#options_for_backing_store' do
88
90
  let(:backing_store) { 'instance_store' }
91
+ let(:region) { 'us-east-1' }
89
92
 
90
93
  context "when the backing store definition exists" do
91
94
  it "returns the options" do
92
- expect(config.options_for_backing_store(backing_store)).to eql({
95
+ expect(config.options_for_backing_store(backing_store, region)).to eql({
93
96
  'image_id' => 'ami-d9d6a6b0'
94
97
  })
95
98
  end
@@ -97,13 +100,23 @@ describe Stemcell::MetadataSource::Configuration do
97
100
 
98
101
  context "when the backing store isn't defined" do
99
102
  let(:backing_store) { 'nyanstore' }
103
+ let(:region) { 'us-east-1' }
100
104
  it "raises" do
101
- expect { config.options_for_backing_store(backing_store) }.to raise_error(
105
+ expect { config.options_for_backing_store(backing_store, region) }.to raise_error(
102
106
  Stemcell::UnknownBackingStoreError
103
107
  )
104
108
  end
105
109
  end
106
110
 
111
+ context "when the legacy backing store definition exists" do
112
+ let(:config_filename) { 'stemcell-backing-store-legacy.json' }
113
+ it "returns the options" do
114
+ expect(config.options_for_backing_store(backing_store, region)).to eql({
115
+ 'image_id' => 'ami-d9d6a6b0'
116
+ })
117
+ end
118
+ end
119
+
107
120
  end
108
121
 
109
122
  describe '#random_az_in_region' do
@@ -161,7 +161,8 @@ describe Stemcell::MetadataSource do
161
161
  it "calls the config object to retrieve the backing store options" do
162
162
  backing_options.merge!('image_id' => 'ami-nyancat')
163
163
  override_options.merge!('backing_store' => 'ebs')
164
- expect(config).to receive(:options_for_backing_store).with('ebs') { backing_options }
164
+ override_options.merge!('region' => 'us-east-1')
165
+ expect(config).to receive(:options_for_backing_store).with('ebs', 'us-east-1') { backing_options }
165
166
  expect(expansion['image_id']).to eql 'ami-nyancat'
166
167
  end
167
168
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stemcell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Rhoads
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-07-16 00:00:00.000000000 Z
14
+ date: 2018-08-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: aws-sdk-v1
@@ -207,6 +207,7 @@ files:
207
207
  - spec/fixtures/chef_repo/roles/unit-simple-override.rb
208
208
  - spec/fixtures/chef_repo/stemcell-azs-missing.json
209
209
  - spec/fixtures/chef_repo/stemcell-backing-store-empty.json
210
+ - spec/fixtures/chef_repo/stemcell-backing-store-legacy.json
210
211
  - spec/fixtures/chef_repo/stemcell-backing-store-missing.json
211
212
  - spec/fixtures/chef_repo/stemcell-cookbook-attribute.json
212
213
  - spec/fixtures/chef_repo/stemcell-defaults-missing.json
@@ -241,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
242
  version: '0'
242
243
  requirements: []
243
244
  rubyforge_project:
244
- rubygems_version: 2.5.2
245
+ rubygems_version: 2.5.2.3
245
246
  signing_key:
246
247
  specification_version: 4
247
248
  summary: no summary
@@ -268,6 +269,7 @@ test_files:
268
269
  - spec/fixtures/chef_repo/roles/unit-simple-override.rb
269
270
  - spec/fixtures/chef_repo/stemcell-azs-missing.json
270
271
  - spec/fixtures/chef_repo/stemcell-backing-store-empty.json
272
+ - spec/fixtures/chef_repo/stemcell-backing-store-legacy.json
271
273
  - spec/fixtures/chef_repo/stemcell-backing-store-missing.json
272
274
  - spec/fixtures/chef_repo/stemcell-cookbook-attribute.json
273
275
  - spec/fixtures/chef_repo/stemcell-defaults-missing.json