stemcell 0.12.0 → 0.12.1

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