wombat-cli 0.4.1 → 0.4.2

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.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +23 -23
  3. data/.travis.yml +27 -27
  4. data/CHANGELOG.md +77 -70
  5. data/DESIGN.md +49 -49
  6. data/Gemfile +5 -5
  7. data/README.md +146 -146
  8. data/Rakefile +26 -26
  9. data/bin/wombat +24 -24
  10. data/generator_files/Vagrantfile +120 -120
  11. data/generator_files/cookbooks/automate/.gitignore +16 -16
  12. data/generator_files/cookbooks/automate/.kitchen.ec2.yml +34 -34
  13. data/generator_files/cookbooks/automate/.kitchen.yml +24 -24
  14. data/generator_files/cookbooks/automate/Berksfile +6 -6
  15. data/generator_files/cookbooks/automate/README.md +4 -4
  16. data/generator_files/cookbooks/automate/chefignore +102 -102
  17. data/generator_files/cookbooks/automate/libraries/_helper.rb +52 -52
  18. data/generator_files/cookbooks/automate/libraries/delivery_api.rb +204 -204
  19. data/generator_files/cookbooks/automate/libraries/delivery_project.rb +31 -31
  20. data/generator_files/cookbooks/automate/libraries/dsl.rb +4 -4
  21. data/generator_files/cookbooks/automate/metadata.rb +11 -11
  22. data/generator_files/cookbooks/automate/recipes/default.rb +112 -112
  23. data/generator_files/cookbooks/automate/recipes/update-users.rb +48 -48
  24. data/generator_files/cookbooks/automate/templates/delivery.erb +6 -6
  25. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -26
  26. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/automate.key +27 -27
  27. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -25
  28. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/chef.key +27 -27
  29. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -26
  30. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -27
  31. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/private.pem +27 -27
  32. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/public.pub +1 -1
  33. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/metadata.rb +3 -3
  34. data/generator_files/cookbooks/automate/test/fixtures/cookbooks/mock_data/recipes/default.rb +27 -27
  35. data/generator_files/cookbooks/automate/test/integration/default/automate_spec.rb +56 -56
  36. data/generator_files/cookbooks/build_node/.gitignore +16 -16
  37. data/generator_files/cookbooks/build_node/.kitchen.ec2.yml +37 -37
  38. data/generator_files/cookbooks/build_node/.kitchen.yml +23 -23
  39. data/generator_files/cookbooks/build_node/Berksfile +8 -8
  40. data/generator_files/cookbooks/build_node/README.md +4 -4
  41. data/generator_files/cookbooks/build_node/chefignore +102 -102
  42. data/generator_files/cookbooks/build_node/metadata.rb +12 -12
  43. data/generator_files/cookbooks/build_node/recipes/default.rb +38 -38
  44. data/generator_files/cookbooks/build_node/templates/client.erb +2 -2
  45. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -26
  46. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/automate.key +27 -27
  47. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -25
  48. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/chef.key +27 -27
  49. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -26
  50. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -27
  51. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/private.pem +27 -27
  52. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/public.pub +1 -1
  53. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/metadata.rb +2 -2
  54. data/generator_files/cookbooks/build_node/test/fixtures/cookbooks/mock_data/recipes/default.rb +18 -18
  55. data/generator_files/cookbooks/build_node/test/integration/default/build-node_spec.rb +40 -40
  56. data/generator_files/cookbooks/chef_server/.gitignore +16 -16
  57. data/generator_files/cookbooks/chef_server/.kitchen.ec2.yml +34 -34
  58. data/generator_files/cookbooks/chef_server/.kitchen.yml +24 -24
  59. data/generator_files/cookbooks/chef_server/Berksfile +6 -6
  60. data/generator_files/cookbooks/chef_server/README.md +4 -4
  61. data/generator_files/cookbooks/chef_server/chefignore +102 -102
  62. data/generator_files/cookbooks/chef_server/metadata.rb +11 -11
  63. data/generator_files/cookbooks/chef_server/recipes/bootstrap_users.rb +91 -91
  64. data/generator_files/cookbooks/chef_server/recipes/default.rb +113 -113
  65. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -26
  66. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/automate.key +27 -27
  67. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -25
  68. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/chef.key +27 -27
  69. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -26
  70. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -27
  71. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/private.pem +27 -27
  72. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/public.pub +1 -1
  73. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/metadata.rb +2 -2
  74. data/generator_files/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/recipes/default.rb +23 -23
  75. data/generator_files/cookbooks/chef_server/test/integration/default/chef_server_spec.rb +50 -50
  76. data/generator_files/cookbooks/compliance/.gitignore +16 -16
  77. data/generator_files/cookbooks/compliance/.kitchen.ec2.yml +34 -34
  78. data/generator_files/cookbooks/compliance/.kitchen.yml +24 -24
  79. data/generator_files/cookbooks/compliance/Berksfile +7 -7
  80. data/generator_files/cookbooks/compliance/README.md +4 -4
  81. data/generator_files/cookbooks/compliance/chefignore +102 -102
  82. data/generator_files/cookbooks/compliance/metadata.rb +11 -11
  83. data/generator_files/cookbooks/compliance/recipes/default.rb +57 -57
  84. data/generator_files/cookbooks/compliance/spec/spec_helper.rb +2 -2
  85. data/generator_files/cookbooks/compliance/spec/unit/recipes/default_spec.rb +20 -20
  86. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -26
  87. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/automate.key +27 -27
  88. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -25
  89. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/chef.key +27 -27
  90. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -26
  91. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -27
  92. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/private.pem +27 -27
  93. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/public.pub +1 -1
  94. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/metadata.rb +4 -4
  95. data/generator_files/cookbooks/compliance/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -21
  96. data/generator_files/cookbooks/compliance/test/integration/default/compliance.rb +28 -28
  97. data/generator_files/cookbooks/infranodes/.gitignore +16 -16
  98. data/generator_files/cookbooks/infranodes/.kitchen.ec2.yml +48 -48
  99. data/generator_files/cookbooks/infranodes/.kitchen.yml +21 -21
  100. data/generator_files/cookbooks/infranodes/Berksfile +6 -6
  101. data/generator_files/cookbooks/infranodes/README.md +4 -4
  102. data/generator_files/cookbooks/infranodes/attributes/default.rb +2 -2
  103. data/generator_files/cookbooks/infranodes/chefignore +102 -102
  104. data/generator_files/cookbooks/infranodes/metadata.rb +13 -13
  105. data/generator_files/cookbooks/infranodes/recipes/default.rb +57 -57
  106. data/generator_files/cookbooks/infranodes/spec/spec_helper.rb +2 -2
  107. data/generator_files/cookbooks/infranodes/spec/unit/recipes/default_spec.rb +20 -20
  108. data/generator_files/cookbooks/infranodes/templates/default/client.rb.erb +5 -5
  109. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -26
  110. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/automate.key +27 -27
  111. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -25
  112. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/chef.key +27 -27
  113. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -26
  114. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -27
  115. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/private.pem +27 -27
  116. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/public.pub +1 -1
  117. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/metadata.rb +3 -3
  118. data/generator_files/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/recipes/default.rb +27 -27
  119. data/generator_files/cookbooks/infranodes/test/integration/default/infranodes_spec.rb +22 -22
  120. data/generator_files/cookbooks/infranodes/test/integration/helpers/serverspec/spec_helper.rb +8 -8
  121. data/generator_files/cookbooks/wombat/.gitignore +16 -16
  122. data/generator_files/cookbooks/wombat/.kitchen.yml +43 -43
  123. data/generator_files/cookbooks/wombat/Berksfile +5 -5
  124. data/generator_files/cookbooks/wombat/README.md +4 -4
  125. data/generator_files/cookbooks/wombat/attributes/default.rb +74 -74
  126. data/generator_files/cookbooks/wombat/attributes/packer.rb +18 -18
  127. data/generator_files/cookbooks/wombat/chefignore +102 -102
  128. data/generator_files/cookbooks/wombat/metadata.rb +13 -13
  129. data/generator_files/cookbooks/wombat/recipes/authorized-keys.rb +20 -20
  130. data/generator_files/cookbooks/wombat/recipes/default.rb +111 -111
  131. data/generator_files/cookbooks/wombat/recipes/etc-hosts.rb +51 -51
  132. data/generator_files/cookbooks/workstation/.gitignore +16 -16
  133. data/generator_files/cookbooks/workstation/.kitchen.ec2.yml +30 -30
  134. data/generator_files/cookbooks/workstation/.kitchen.yml +22 -22
  135. data/generator_files/cookbooks/workstation/Berksfile +7 -7
  136. data/generator_files/cookbooks/workstation/README.md +3 -3
  137. data/generator_files/cookbooks/workstation/chefignore +102 -102
  138. data/generator_files/cookbooks/workstation/files/atom.apm.list +7 -7
  139. data/generator_files/cookbooks/workstation/files/atom.config.cson +3 -3
  140. data/generator_files/cookbooks/workstation/metadata.rb +14 -14
  141. data/generator_files/cookbooks/workstation/recipes/browser.rb +59 -59
  142. data/generator_files/cookbooks/workstation/recipes/certs-keys.rb +45 -45
  143. data/generator_files/cookbooks/workstation/recipes/chef.rb +29 -29
  144. data/generator_files/cookbooks/workstation/recipes/default.rb +20 -20
  145. data/generator_files/cookbooks/workstation/recipes/dotnet.rb +17 -17
  146. data/generator_files/cookbooks/workstation/recipes/editor.rb +19 -19
  147. data/generator_files/cookbooks/workstation/recipes/profile.rb +42 -42
  148. data/generator_files/cookbooks/workstation/recipes/terminal.rb +13 -13
  149. data/generator_files/cookbooks/workstation/templates/default/bookmarks.html.erb +23 -23
  150. data/generator_files/cookbooks/workstation/templates/default/data_collector.rb.erb +2 -2
  151. data/generator_files/cookbooks/workstation/templates/default/ise_profile.ps1.erb +11 -11
  152. data/generator_files/cookbooks/workstation/templates/default/knife.rb.erb +10 -10
  153. data/generator_files/cookbooks/workstation/templates/default/master_preferences.json.erb +28 -28
  154. data/generator_files/cookbooks/workstation/templates/default/ssh_config.erb +16 -16
  155. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -26
  156. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/automate.key +27 -27
  157. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/chef.crt +26 -26
  158. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/chef.key +27 -27
  159. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -26
  160. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -27
  161. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/private.pem +27 -27
  162. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/public.pub +1 -1
  163. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/metadata.rb +2 -2
  164. data/generator_files/cookbooks/workstation/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -21
  165. data/generator_files/cookbooks/workstation/test/integration/default/workstation_spec.rb +37 -37
  166. data/generator_files/packer/automate.json +131 -131
  167. data/generator_files/packer/build-node.json +137 -137
  168. data/generator_files/packer/chef-server.json +132 -132
  169. data/generator_files/packer/compliance.json +128 -128
  170. data/generator_files/packer/infranodes-windows.json +138 -138
  171. data/generator_files/packer/infranodes.json +129 -129
  172. data/generator_files/packer/workstation.json +136 -136
  173. data/generator_files/templates/arm.json.erb +575 -575
  174. data/generator_files/templates/arm.tidy.json.erb +31 -31
  175. data/generator_files/templates/bootstrap-aws.erb +36 -36
  176. data/generator_files/templates/cfn.json.erb +674 -674
  177. data/generator_files/wombat.yml +71 -71
  178. data/lib/wombat/aws.rb +67 -67
  179. data/lib/wombat/build.rb +338 -338
  180. data/lib/wombat/cli.rb +238 -238
  181. data/lib/wombat/common.rb +347 -347
  182. data/lib/wombat/crypto.rb +64 -64
  183. data/lib/wombat/delete.rb +94 -94
  184. data/lib/wombat/deploy.rb +101 -101
  185. data/lib/wombat/init.rb +32 -32
  186. data/lib/wombat/latest.rb +27 -27
  187. data/lib/wombat/output.rb +86 -86
  188. data/lib/wombat/update.rb +20 -20
  189. data/lib/wombat/version.rb +3 -3
  190. data/lib/wombat.rb +8 -8
  191. data/spec/functional/common_spec.rb +26 -26
  192. data/spec/spec_helper.rb +103 -103
  193. data/spec/unit/common_spec.rb +116 -116
  194. data/terraform/README.md +13 -13
  195. data/terraform/templates/terraform.tfvars.erb +12 -12
  196. data/terraform/wombat.tf +328 -328
  197. data/wombat-cli.gemspec +34 -34
  198. metadata +2 -2
@@ -1,71 +1,71 @@
1
- ---
2
- name: wombat
3
- # Uncomment domain_prefix if you wish to prepend your generated domain.
4
- # Ex: The below example would create foo-chef.animals.biz.
5
- # domain_prefix: foo-
6
- domain: animals.biz
7
- enterprise: mammals
8
- org: marsupials
9
- certs: ['automate', 'chef', 'compliance']
10
- ttl: 6
11
- linux: ubuntu
12
- version: 0.2.1
13
- owner:
14
- products:
15
- chef: stable-latest
16
- chef-server: stable-latest
17
- chefdk: stable-latest
18
- compliance: stable-latest
19
- automate: stable-latest
20
- push-jobs-server: stable-latest
21
- manage: stable-latest
22
- build-nodes:
23
- count: 1
24
- workstations:
25
- platform: windows
26
- # Must meet the minimum Microsoft Complexity Requirements
27
- # https://technet.microsoft.com/en-us/library/hh994562(v=ws.11).aspx)
28
- password: 'ZL9@T40BTmXhZ'
29
- count: 1
30
- infranodes:
31
- # Add a list of infrastructure nodes here with their associated run list to have these nodes precreated on the Chef Server
32
- # Note: the cookbook content won't be automatically uploaded, only the node object will be created with the run list added,
33
- # if the content doesn't exist at the first checkin the chef-client run will fail.
34
- # acceptance:
35
- # platform: windows
36
- # environment: web-acceptance
37
- # run_list:
38
- # - recipe[bacon::chewy]
39
- # delivered:
40
- # environment: web-delivered
41
- # run_list:
42
- # - recipe[bacon::crispy]
43
- conf:
44
- key_dir: 'keys'
45
- cookbook_dir: 'cookbooks'
46
- packer_dir: 'packer'
47
- template_dir: 'templates'
48
- log_dir: 'logs'
49
- stack_dir: 'stacks'
50
- audio: false
51
- aws:
52
- az: us-east-1e
53
- keypair: keypair-us-east
54
- region: us-east-1
55
- # This optional key presumes these IAM roles are already created
56
- # and are only applied to workstations currently
57
- # iam_roles: ['iam_role', 'iam_roles_buddy']
58
- source_image:
59
- ubuntu: ami-8e0b9499
60
- windows: ami-1c7ad77c
61
- centos: ami-6d1c2007
62
- azure:
63
- location: eastus
64
- storage_account:
65
- gce:
66
- zone: us-east1-b
67
- project: wombat-gce
68
- account_file: wombat-gce.json
69
- source_image:
70
- ubuntu: ubuntu-1404-trusty-v20160809a
71
- windows: windows-server-2012-r2-dc-v20160809
1
+ ---
2
+ name: wombat
3
+ # Uncomment domain_prefix if you wish to prepend your generated domain.
4
+ # Ex: The below example would create foo-chef.animals.biz.
5
+ # domain_prefix: foo-
6
+ domain: animals.biz
7
+ enterprise: mammals
8
+ org: marsupials
9
+ certs: ['automate', 'chef', 'compliance']
10
+ ttl: 6
11
+ linux: ubuntu
12
+ version: 0.2.1
13
+ owner:
14
+ products:
15
+ chef: stable-latest
16
+ chef-server: stable-latest
17
+ chefdk: stable-latest
18
+ compliance: stable-latest
19
+ automate: stable-latest
20
+ push-jobs-server: stable-latest
21
+ manage: stable-latest
22
+ build-nodes:
23
+ count: 1
24
+ workstations:
25
+ platform: windows
26
+ # Must meet the minimum Microsoft Complexity Requirements
27
+ # https://technet.microsoft.com/en-us/library/hh994562(v=ws.11).aspx)
28
+ password: 'ZL9@T40BTmXhZ'
29
+ count: 1
30
+ infranodes:
31
+ # Add a list of infrastructure nodes here with their associated run list to have these nodes precreated on the Chef Server
32
+ # Note: the cookbook content won't be automatically uploaded, only the node object will be created with the run list added,
33
+ # if the content doesn't exist at the first checkin the chef-client run will fail.
34
+ # acceptance:
35
+ # platform: windows
36
+ # environment: web-acceptance
37
+ # run_list:
38
+ # - recipe[bacon::chewy]
39
+ # delivered:
40
+ # environment: web-delivered
41
+ # run_list:
42
+ # - recipe[bacon::crispy]
43
+ conf:
44
+ key_dir: 'keys'
45
+ cookbook_dir: 'cookbooks'
46
+ packer_dir: 'packer'
47
+ template_dir: 'templates'
48
+ log_dir: 'logs'
49
+ stack_dir: 'stacks'
50
+ audio: false
51
+ aws:
52
+ az: us-east-1e
53
+ keypair: keypair-us-east
54
+ region: us-east-1
55
+ # This optional key presumes these IAM roles are already created
56
+ # and are only applied to workstations currently
57
+ # iam_roles: ['iam_role', 'iam_roles_buddy']
58
+ source_image:
59
+ ubuntu: ami-8e0b9499
60
+ windows: ami-1c7ad77c
61
+ centos: ami-6d1c2007
62
+ azure:
63
+ location: eastus
64
+ storage_account:
65
+ gce:
66
+ zone: us-east1-b
67
+ project: wombat-gce
68
+ account_file: wombat-gce.json
69
+ source_image:
70
+ ubuntu: ubuntu-1404-trusty-v20160809a
71
+ windows: windows-server-2012-r2-dc-v20160809
data/lib/wombat/aws.rb CHANGED
@@ -1,67 +1,67 @@
1
- require "wombat/common"
2
- require "aws-sdk"
3
-
4
- # http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html#describe_images-instance_method
5
- # https://github.com/test-kitchen/kitchen-ec2/blob/aa8e7f2cf9bfbb10fa4057f3297c2a20dc079f7b/lib/kitchen/driver/aws/standard_platform.rb
6
- # https://github.com/test-kitchen/kitchen-ec2/blob/aa8e7f2cf9bfbb10fa4057f3297c2a20dc079f7b/lib/kitchen/driver/aws/standard_platform/ubuntu.rb
7
-
8
- module Wombat
9
- module Aws
10
- include Wombat::Common
11
-
12
- def find_latest_amis
13
- client = ::Aws::EC2::Client.new(:region => wombat["aws"]["region"])
14
- # static list of images
15
- desc_hash = {
16
- "ubuntu-16.04" => ["ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*", "099720109477"],
17
- "ubuntu-14.04" => ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*", "099720109477"],
18
- "centos-7" => ["CentOS Linux 7 x86_64 HVM EBS*", "679593333241"],
19
- "windows-2012r2" => ["Windows_Server-2012-R2_RTM-English-64Bit-Base-*", "801119661308"]
20
- }
21
- desc_hash.each do |k, v|
22
- resp = client.describe_images({
23
- dry_run: false,
24
- filters: [
25
- {
26
- name: "name",
27
- values: [v[0]],
28
- },
29
- {
30
- name: "owner-id",
31
- values: [v[1]],
32
- },
33
- ],
34
- })
35
- images = sort_images(resp.images)
36
-
37
- puts "#{k}: #{images[:image_id]}"
38
-
39
- end
40
- end
41
-
42
- def prefer(images, &block)
43
- # Put the matching ones *before* the non-matching ones.
44
- matching, non_matching = images.partition(&block)
45
- matching + non_matching
46
- end
47
-
48
- def sort_images(images)
49
- # P5: We prefer more recent images over older ones
50
- images = images.sort_by(&:creation_date).reverse
51
- # P4: We prefer x86_64 over i386 (if available)
52
- images = prefer(images) { |image| image.architecture == :x86_64 }
53
- # P3: We prefer gp2 (SSD) (if available)
54
- images = prefer(images) do |image|
55
- image.block_device_mappings.any? do |b|
56
- b.device_name == image.root_device_name && b.ebs && b.ebs.volume_type == "gp2"
57
- end
58
- end
59
- # P2: We prefer ebs over instance_store (if available)
60
- images = prefer(images) { |image| image.root_device_type == "ebs" }
61
- # P1: We prefer hvm (the modern standard)
62
- images = prefer(images) { |image| image.virtualization_type == "hvm" }
63
- # Grab the image from the top of the stack
64
- images.first
65
- end
66
- end
67
- end
1
+ require "wombat/common"
2
+ require "aws-sdk"
3
+
4
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html#describe_images-instance_method
5
+ # https://github.com/test-kitchen/kitchen-ec2/blob/aa8e7f2cf9bfbb10fa4057f3297c2a20dc079f7b/lib/kitchen/driver/aws/standard_platform.rb
6
+ # https://github.com/test-kitchen/kitchen-ec2/blob/aa8e7f2cf9bfbb10fa4057f3297c2a20dc079f7b/lib/kitchen/driver/aws/standard_platform/ubuntu.rb
7
+
8
+ module Wombat
9
+ module Aws
10
+ include Wombat::Common
11
+
12
+ def find_latest_amis
13
+ client = ::Aws::EC2::Client.new(:region => wombat["aws"]["region"])
14
+ # static list of images
15
+ desc_hash = {
16
+ "ubuntu-16.04" => ["ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*", "099720109477"],
17
+ "ubuntu-14.04" => ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*", "099720109477"],
18
+ "centos-7" => ["CentOS Linux 7 x86_64 HVM EBS*", "679593333241"],
19
+ "windows-2012r2" => ["Windows_Server-2012-R2_RTM-English-64Bit-Base-*", "801119661308"]
20
+ }
21
+ desc_hash.each do |k, v|
22
+ resp = client.describe_images({
23
+ dry_run: false,
24
+ filters: [
25
+ {
26
+ name: "name",
27
+ values: [v[0]],
28
+ },
29
+ {
30
+ name: "owner-id",
31
+ values: [v[1]],
32
+ },
33
+ ],
34
+ })
35
+ images = sort_images(resp.images)
36
+
37
+ puts "#{k}: #{images[:image_id]}"
38
+
39
+ end
40
+ end
41
+
42
+ def prefer(images, &block)
43
+ # Put the matching ones *before* the non-matching ones.
44
+ matching, non_matching = images.partition(&block)
45
+ matching + non_matching
46
+ end
47
+
48
+ def sort_images(images)
49
+ # P5: We prefer more recent images over older ones
50
+ images = images.sort_by(&:creation_date).reverse
51
+ # P4: We prefer x86_64 over i386 (if available)
52
+ images = prefer(images) { |image| image.architecture == :x86_64 }
53
+ # P3: We prefer gp2 (SSD) (if available)
54
+ images = prefer(images) do |image|
55
+ image.block_device_mappings.any? do |b|
56
+ b.device_name == image.root_device_name && b.ebs && b.ebs.volume_type == "gp2"
57
+ end
58
+ end
59
+ # P2: We prefer ebs over instance_store (if available)
60
+ images = prefer(images) { |image| image.root_device_type == "ebs" }
61
+ # P1: We prefer hvm (the modern standard)
62
+ images = prefer(images) { |image| image.virtualization_type == "hvm" }
63
+ # Grab the image from the top of the stack
64
+ images.first
65
+ end
66
+ end
67
+ end