wombat-cli 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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