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
data/lib/wombat/crypto.rb CHANGED
@@ -1,65 +1,65 @@
1
- require 'openssl'
2
- require 'net/ssh'
3
-
4
- module Wombat
5
- module Crypto
6
- include Wombat::Common
7
-
8
- def gen_x509_cert(hostname)
9
- rsa_key = OpenSSL::PKey::RSA.new(2048)
10
- public_key = rsa_key.public_key
11
-
12
- subject = "/C=AU/ST=New South Wales/L=Sydney/O=#{wombat['org']}/OU=wombats/CN=#{wombat['domain_prefix']}#{hostname}.#{wombat['domain']}"
13
-
14
- cert = OpenSSL::X509::Certificate.new
15
- cert.subject = cert.issuer = OpenSSL::X509::Name.parse(subject)
16
- cert.not_before = Time.now
17
- cert.not_after = Time.now + 365 * 24 * 60 * 60
18
- cert.public_key = public_key
19
- cert.serial = 0x0
20
- cert.version = 2
21
-
22
- ef = OpenSSL::X509::ExtensionFactory.new
23
- ef.subject_certificate = cert
24
- ef.issuer_certificate = cert
25
- cert.extensions = [
26
- ef.create_extension('basicConstraints', 'CA:TRUE', true),
27
- ef.create_extension('subjectKeyIdentifier', 'hash'),
28
- # ef.create_extension("keyUsage", "cRLSign,keyCertSign", true),
29
- ]
30
- cert.add_extension ef.create_extension('authorityKeyIdentifier',
31
- 'keyid:always,issuer:always')
32
-
33
- cert.sign(rsa_key, OpenSSL::Digest::SHA256.new)
34
-
35
- Dir.mkdir(conf['key_dir'], 0755) unless File.exist?(conf['key_dir'])
36
-
37
- if File.exist?("#{conf['key_dir']}/#{hostname}.crt") && File.exist?("#{conf['key_dir']}/#{hostname}.key")
38
- puts "An x509 certificate already exists for #{hostname}"
39
- else
40
- File.open("#{conf['key_dir']}/#{hostname}.crt", 'w') { |file| file.puts cert.to_pem }
41
- File.open("#{conf['key_dir']}/#{hostname}.key", 'w') { |file| file.puts rsa_key.to_pem }
42
- puts "Certificate created for #{wombat['domain_prefix']}#{hostname}.#{wombat['domain']}"
43
- end
44
- end
45
-
46
- def gen_ssh_key
47
- rsa_key = OpenSSL::PKey::RSA.new 2048
48
-
49
- type = rsa_key.ssh_type
50
- data = [rsa_key.to_blob].pack('m0')
51
-
52
- openssh_format = "#{type} #{data}"
53
-
54
- Dir.mkdir(conf['key_dir'], 0755) unless File.exist?(conf['key_dir'])
55
-
56
- if File.exist?("#{conf['key_dir']}/public.pub") && File.exist?("#{conf['key_dir']}/private.pem")
57
- puts 'An SSH keypair already exists'
58
- else
59
- File.open("#{conf['key_dir']}/public.pub", 'w') { |file| file.puts openssh_format }
60
- File.open("#{conf['key_dir']}/private.pem", 'w') { |file| file.puts rsa_key.to_pem }
61
- puts 'SSH Keypair created'
62
- end
63
- end
64
- end
1
+ require 'openssl'
2
+ require 'net/ssh'
3
+
4
+ module Wombat
5
+ module Crypto
6
+ include Wombat::Common
7
+
8
+ def gen_x509_cert(hostname)
9
+ rsa_key = OpenSSL::PKey::RSA.new(2048)
10
+ public_key = rsa_key.public_key
11
+
12
+ subject = "/C=AU/ST=New South Wales/L=Sydney/O=#{wombat['org']}/OU=wombats/CN=#{wombat['domain_prefix']}#{hostname}.#{wombat['domain']}"
13
+
14
+ cert = OpenSSL::X509::Certificate.new
15
+ cert.subject = cert.issuer = OpenSSL::X509::Name.parse(subject)
16
+ cert.not_before = Time.now
17
+ cert.not_after = Time.now + 365 * 24 * 60 * 60
18
+ cert.public_key = public_key
19
+ cert.serial = 0x0
20
+ cert.version = 2
21
+
22
+ ef = OpenSSL::X509::ExtensionFactory.new
23
+ ef.subject_certificate = cert
24
+ ef.issuer_certificate = cert
25
+ cert.extensions = [
26
+ ef.create_extension('basicConstraints', 'CA:TRUE', true),
27
+ ef.create_extension('subjectKeyIdentifier', 'hash'),
28
+ # ef.create_extension("keyUsage", "cRLSign,keyCertSign", true),
29
+ ]
30
+ cert.add_extension ef.create_extension('authorityKeyIdentifier',
31
+ 'keyid:always,issuer:always')
32
+
33
+ cert.sign(rsa_key, OpenSSL::Digest::SHA256.new)
34
+
35
+ Dir.mkdir(conf['key_dir'], 0755) unless File.exist?(conf['key_dir'])
36
+
37
+ if File.exist?("#{conf['key_dir']}/#{hostname}.crt") && File.exist?("#{conf['key_dir']}/#{hostname}.key")
38
+ puts "An x509 certificate already exists for #{hostname}"
39
+ else
40
+ File.open("#{conf['key_dir']}/#{hostname}.crt", 'w') { |file| file.puts cert.to_pem }
41
+ File.open("#{conf['key_dir']}/#{hostname}.key", 'w') { |file| file.puts rsa_key.to_pem }
42
+ puts "Certificate created for #{wombat['domain_prefix']}#{hostname}.#{wombat['domain']}"
43
+ end
44
+ end
45
+
46
+ def gen_ssh_key
47
+ rsa_key = OpenSSL::PKey::RSA.new 2048
48
+
49
+ type = rsa_key.ssh_type
50
+ data = [rsa_key.to_blob].pack('m0')
51
+
52
+ openssh_format = "#{type} #{data}"
53
+
54
+ Dir.mkdir(conf['key_dir'], 0755) unless File.exist?(conf['key_dir'])
55
+
56
+ if File.exist?("#{conf['key_dir']}/public.pub") && File.exist?("#{conf['key_dir']}/private.pem")
57
+ puts 'An SSH keypair already exists'
58
+ else
59
+ File.open("#{conf['key_dir']}/public.pub", 'w') { |file| file.puts openssh_format }
60
+ File.open("#{conf['key_dir']}/private.pem", 'w') { |file| file.puts rsa_key.to_pem }
61
+ puts 'SSH Keypair created'
62
+ end
63
+ end
64
+ end
65
65
  end
data/lib/wombat/delete.rb CHANGED
@@ -1,95 +1,95 @@
1
- require 'wombat/common'
2
- require 'aws-sdk'
3
- require 'azure_mgmt_resources'
4
-
5
- module Wombat
6
- class DeleteRunner
7
- include Wombat::Common
8
-
9
- attr_reader :stack, :cloud
10
- attr_accessor :resource_management_client
11
-
12
- def initialize(opts)
13
- @stack = opts.stack
14
- @cloud = opts.cloud.nil? ? "aws" : opts.cloud
15
- @remove_all = opts.remove_all.nil? ? false : opts.remove_all
16
- @azure_async = opts.azure_async.nil? ? false : opts.azure_async
17
- end
18
-
19
- def start
20
- cfn_delete_stack(stack)
21
- end
22
-
23
- private
24
-
25
- def cfn_delete_stack(stack)
26
-
27
- # Delete the stack from the correct platform
28
- case @cloud
29
- when "aws"
30
- cfn = Aws::CloudFormation::Client.new(region: lock['aws']['region'])
31
-
32
- resp = cfn.delete_stack({
33
- stack_name: stack,
34
- })
35
- banner("Deleted #{stack}")
36
-
37
- when "azure"
38
-
39
- # Connect to Azure
40
- azure_conn = connect_azure()
41
-
42
- # Create a resource client so that the resource group can be deleted
43
- @resource_management_client = Azure::ARM::Resources::ResourceManagementClient.new(azure_conn)
44
- @resource_management_client.subscription_id = ENV['AZURE_SUBSCRIPTION_ID']
45
-
46
- # Only delete the entire resource group if it has been explicitly set
47
- if (@remove_all)
48
- banner(format("Deleting resource group: %s", stack))
49
-
50
- resource_management_client.resource_groups.begin_delete(stack)
51
-
52
- info "Destroy operation accepted and will continue in the background."
53
- else
54
-
55
- banner(format("Tidying resource group: %s", stack))
56
-
57
- # Create new deployment using the tidy template so that the storage account is left
58
- # behind but all the other resources are removed
59
- template_file = File.read("#{conf['stack_dir']}/#{stack}.tidy.json")
60
-
61
- # determine the name of the deployment
62
- deployment_name = format('deploy-tidy-%s', Time.now().to_i)
63
-
64
- # Create the deployment definition
65
- deployment = Azure::ARM::Resources::Models::Deployment.new
66
- deployment.properties = Azure::ARM::Resources::Models::DeploymentProperties.new
67
- deployment.properties.mode = Azure::ARM::Resources::Models::DeploymentMode::Complete
68
- deployment.properties.template = JSON.parse(template_file)
69
-
70
- # Perform the deployment to the named resource group
71
- begin
72
- resource_management_client.deployments.begin_create_or_update_async(stack, deployment_name, deployment).value!
73
- rescue MsRestAzure::AzureOperationError => operation_error
74
- rest_error = operation_error.body['error']
75
- deployment_active = rest_error['code'] == 'DeploymentActive'
76
- if deployment_active
77
- info format("Deployment for resource group '%s' is ongoing", stack)
78
- else
79
- warn rest_error
80
- raise operation_error
81
- end
82
- end
83
-
84
- # Monitor the deployment
85
- if @azure_async
86
- info "Deployment operation accepted. Use the Azure Portal to check progress"
87
- else
88
- info "Removing Automate resources"
89
- follow_azure_deployment(stack, deployment_name)
90
- end
91
- end
92
- end
93
- end
94
- end
1
+ require 'wombat/common'
2
+ require 'aws-sdk'
3
+ require 'azure_mgmt_resources'
4
+
5
+ module Wombat
6
+ class DeleteRunner
7
+ include Wombat::Common
8
+
9
+ attr_reader :stack, :cloud
10
+ attr_accessor :resource_management_client
11
+
12
+ def initialize(opts)
13
+ @stack = opts.stack
14
+ @cloud = opts.cloud.nil? ? "aws" : opts.cloud
15
+ @remove_all = opts.remove_all.nil? ? false : opts.remove_all
16
+ @azure_async = opts.azure_async.nil? ? false : opts.azure_async
17
+ end
18
+
19
+ def start
20
+ cfn_delete_stack(stack)
21
+ end
22
+
23
+ private
24
+
25
+ def cfn_delete_stack(stack)
26
+
27
+ # Delete the stack from the correct platform
28
+ case @cloud
29
+ when "aws"
30
+ cfn = Aws::CloudFormation::Client.new(region: lock['aws']['region'])
31
+
32
+ resp = cfn.delete_stack({
33
+ stack_name: stack,
34
+ })
35
+ banner("Deleted #{stack}")
36
+
37
+ when "azure"
38
+
39
+ # Connect to Azure
40
+ azure_conn = connect_azure()
41
+
42
+ # Create a resource client so that the resource group can be deleted
43
+ @resource_management_client = Azure::ARM::Resources::ResourceManagementClient.new(azure_conn)
44
+ @resource_management_client.subscription_id = ENV['AZURE_SUBSCRIPTION_ID']
45
+
46
+ # Only delete the entire resource group if it has been explicitly set
47
+ if (@remove_all)
48
+ banner(format("Deleting resource group: %s", stack))
49
+
50
+ resource_management_client.resource_groups.begin_delete(stack)
51
+
52
+ info "Destroy operation accepted and will continue in the background."
53
+ else
54
+
55
+ banner(format("Tidying resource group: %s", stack))
56
+
57
+ # Create new deployment using the tidy template so that the storage account is left
58
+ # behind but all the other resources are removed
59
+ template_file = File.read("#{conf['stack_dir']}/#{stack}.tidy.json")
60
+
61
+ # determine the name of the deployment
62
+ deployment_name = format('deploy-tidy-%s', Time.now().to_i)
63
+
64
+ # Create the deployment definition
65
+ deployment = Azure::ARM::Resources::Models::Deployment.new
66
+ deployment.properties = Azure::ARM::Resources::Models::DeploymentProperties.new
67
+ deployment.properties.mode = Azure::ARM::Resources::Models::DeploymentMode::Complete
68
+ deployment.properties.template = JSON.parse(template_file)
69
+
70
+ # Perform the deployment to the named resource group
71
+ begin
72
+ resource_management_client.deployments.begin_create_or_update_async(stack, deployment_name, deployment).value!
73
+ rescue MsRestAzure::AzureOperationError => operation_error
74
+ rest_error = operation_error.body['error']
75
+ deployment_active = rest_error['code'] == 'DeploymentActive'
76
+ if deployment_active
77
+ info format("Deployment for resource group '%s' is ongoing", stack)
78
+ else
79
+ warn rest_error
80
+ raise operation_error
81
+ end
82
+ end
83
+
84
+ # Monitor the deployment
85
+ if @azure_async
86
+ info "Deployment operation accepted. Use the Azure Portal to check progress"
87
+ else
88
+ info "Removing Automate resources"
89
+ follow_azure_deployment(stack, deployment_name)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
95
  end
data/lib/wombat/deploy.rb CHANGED
@@ -1,101 +1,101 @@
1
- require 'wombat/common'
2
- require 'aws-sdk'
3
- require 'azure_mgmt_resources'
4
-
5
- module Wombat
6
- class DeployRunner
7
- include Wombat::Common
8
-
9
- attr_reader :stack, :cloud, :lock_opt, :template_opt
10
- attr_accessor :resource_management_client
11
-
12
- def initialize(opts)
13
- @stack = opts.stack
14
- @cloud = opts.cloud.nil? ? "aws" : opts.cloud
15
- @lock_opt = opts.update_lock
16
- @template_opt = opts.update_template
17
- @azure_async = opts.azure_async
18
- end
19
-
20
- def start
21
- update_lock(cloud) if lock_opt
22
- update_template(cloud) if template_opt
23
- create_stack(stack)
24
- end
25
-
26
- private
27
-
28
- def create_stack(stack)
29
-
30
- # Deploy the template to the correct stack
31
- case @cloud
32
- when "aws"
33
-
34
- template_file = File.read("#{conf['stack_dir']}/#{stack}.json")
35
- cfn = Aws::CloudFormation::Client.new(region: lock['aws']['region'])
36
-
37
- banner("Creating CloudFormation stack")
38
- resp = cfn.create_stack({
39
- stack_name: "#{stack}",
40
- template_body: template_file,
41
- capabilities: ["CAPABILITY_IAM"],
42
- on_failure: "DELETE",
43
- parameters: [
44
- {
45
- parameter_key: "KeyName",
46
- parameter_value: lock['aws']['keypair'],
47
- }
48
- ]
49
- })
50
- puts "Created: #{resp.stack_id}"
51
- when "azure"
52
-
53
- banner("Creating Azure RM stack")
54
-
55
- # determine the path to the arm template
56
- template_file = File.read("#{conf['stack_dir']}/#{stack}.json")
57
-
58
- # determine the name of the deployment
59
- deployment_name = format('deploy-%s', Time.now().to_i)
60
-
61
- # Connect to azure
62
- azure_conn = connect_azure()
63
-
64
- # Create a resource client so that the template can be deployed
65
- @resource_management_client = Azure::ARM::Resources::ResourceManagementClient.new(azure_conn)
66
- @resource_management_client.subscription_id = ENV['AZURE_SUBSCRIPTION_ID']
67
-
68
- # Create the deployment definition
69
- deployment = Azure::ARM::Resources::Models::Deployment.new
70
- deployment.properties = Azure::ARM::Resources::Models::DeploymentProperties.new
71
- deployment.properties.mode = Azure::ARM::Resources::Models::DeploymentMode::Incremental
72
- deployment.properties.template = JSON.parse(template_file)
73
-
74
- # Perform the deployment to the named resource group
75
- begin
76
- resource_management_client.deployments.begin_create_or_update_async(stack, deployment_name, deployment).value!
77
- rescue MsRestAzure::AzureOperationError => operation_error
78
- rest_error = operation_error.body['error']
79
- deployment_active = rest_error['code'] == 'DeploymentActive'
80
- if deployment_active
81
- info format("Deployment for resource group '%s' is ongoing", stack)
82
- else
83
- warn rest_error
84
- raise operation_error
85
- end
86
- end
87
-
88
- # Monitor the deployment
89
- if @azure_async
90
- info "Deployment operation accepted. Use the Azure Portal to check progress"
91
- else
92
- follow_azure_deployment(stack, deployment_name)
93
- end
94
-
95
- end
96
- end
97
-
98
-
99
-
100
- end
101
- end
1
+ require 'wombat/common'
2
+ require 'aws-sdk'
3
+ require 'azure_mgmt_resources'
4
+
5
+ module Wombat
6
+ class DeployRunner
7
+ include Wombat::Common
8
+
9
+ attr_reader :stack, :cloud, :lock_opt, :template_opt
10
+ attr_accessor :resource_management_client
11
+
12
+ def initialize(opts)
13
+ @stack = opts.stack
14
+ @cloud = opts.cloud.nil? ? "aws" : opts.cloud
15
+ @lock_opt = opts.update_lock
16
+ @template_opt = opts.update_template
17
+ @azure_async = opts.azure_async
18
+ end
19
+
20
+ def start
21
+ update_lock(cloud) if lock_opt
22
+ update_template(cloud) if template_opt
23
+ create_stack(stack)
24
+ end
25
+
26
+ private
27
+
28
+ def create_stack(stack)
29
+
30
+ # Deploy the template to the correct stack
31
+ case @cloud
32
+ when "aws"
33
+
34
+ template_file = File.read("#{conf['stack_dir']}/#{stack}.json")
35
+ cfn = ::Aws::CloudFormation::Client.new(region: lock['aws']['region'])
36
+
37
+ banner("Creating CloudFormation stack")
38
+ resp = cfn.create_stack({
39
+ stack_name: "#{stack}",
40
+ template_body: template_file,
41
+ capabilities: ["CAPABILITY_IAM"],
42
+ on_failure: "DELETE",
43
+ parameters: [
44
+ {
45
+ parameter_key: "KeyName",
46
+ parameter_value: lock['aws']['keypair'],
47
+ }
48
+ ]
49
+ })
50
+ puts "Created: #{resp.stack_id}"
51
+ when "azure"
52
+
53
+ banner("Creating Azure RM stack")
54
+
55
+ # determine the path to the arm template
56
+ template_file = File.read("#{conf['stack_dir']}/#{stack}.json")
57
+
58
+ # determine the name of the deployment
59
+ deployment_name = format('deploy-%s', Time.now().to_i)
60
+
61
+ # Connect to azure
62
+ azure_conn = connect_azure()
63
+
64
+ # Create a resource client so that the template can be deployed
65
+ @resource_management_client = Azure::ARM::Resources::ResourceManagementClient.new(azure_conn)
66
+ @resource_management_client.subscription_id = ENV['AZURE_SUBSCRIPTION_ID']
67
+
68
+ # Create the deployment definition
69
+ deployment = Azure::ARM::Resources::Models::Deployment.new
70
+ deployment.properties = Azure::ARM::Resources::Models::DeploymentProperties.new
71
+ deployment.properties.mode = Azure::ARM::Resources::Models::DeploymentMode::Incremental
72
+ deployment.properties.template = JSON.parse(template_file)
73
+
74
+ # Perform the deployment to the named resource group
75
+ begin
76
+ resource_management_client.deployments.begin_create_or_update_async(stack, deployment_name, deployment).value!
77
+ rescue MsRestAzure::AzureOperationError => operation_error
78
+ rest_error = operation_error.body['error']
79
+ deployment_active = rest_error['code'] == 'DeploymentActive'
80
+ if deployment_active
81
+ info format("Deployment for resource group '%s' is ongoing", stack)
82
+ else
83
+ warn rest_error
84
+ raise operation_error
85
+ end
86
+ end
87
+
88
+ # Monitor the deployment
89
+ if @azure_async
90
+ info "Deployment operation accepted. Use the Azure Portal to check progress"
91
+ else
92
+ follow_azure_deployment(stack, deployment_name)
93
+ end
94
+
95
+ end
96
+ end
97
+
98
+
99
+
100
+ end
101
+ end
data/lib/wombat/init.rb CHANGED
@@ -1,32 +1,32 @@
1
- require 'wombat/common'
2
-
3
- module Wombat
4
- class InitRunner
5
- include Wombat::Common
6
-
7
- attr_reader :path
8
-
9
- def initialize(opts)
10
- @path = opts.path.nil? ? Dir.pwd : opts.path
11
- end
12
-
13
- def start
14
- copy_files(path)
15
- end
16
-
17
- private
18
-
19
- def copy_files(path)
20
- p = path == Dir.pwd ? '.' : path
21
- gen_dir = "#{File.expand_path("../..", File.dirname(__FILE__))}/generator_files"
22
- Dir["#{gen_dir}/*"].each do |source|
23
- if !File.exist?("#{p}/#{File.basename(source)}")
24
- banner("create: #{p}/#{File.basename(source)}")
25
- FileUtils.cp_r source, path
26
- else
27
- warn("#{p}/#{File.basename(source)} already exists")
28
- end
29
- end
30
- end
31
- end
32
- end
1
+ require 'wombat/common'
2
+
3
+ module Wombat
4
+ class InitRunner
5
+ include Wombat::Common
6
+
7
+ attr_reader :path
8
+
9
+ def initialize(opts)
10
+ @path = opts.path.nil? ? Dir.pwd : opts.path
11
+ end
12
+
13
+ def start
14
+ copy_files(path)
15
+ end
16
+
17
+ private
18
+
19
+ def copy_files(path)
20
+ p = path == Dir.pwd ? '.' : path
21
+ gen_dir = "#{File.expand_path("../..", File.dirname(__FILE__))}/generator_files"
22
+ Dir["#{gen_dir}/*"].each do |source|
23
+ if !File.exist?("#{p}/#{File.basename(source)}")
24
+ banner("create: #{p}/#{File.basename(source)}")
25
+ FileUtils.cp_r source, path
26
+ else
27
+ warn("#{p}/#{File.basename(source)} already exists")
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/wombat/latest.rb CHANGED
@@ -1,27 +1,27 @@
1
- require "wombat/common"
2
- require "wombat/aws"
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
- class LatestRunner
10
- include Wombat::Common
11
- include Wombat::Aws
12
-
13
- attr_reader :stack, :cloud, :lock_opt, :template_opt
14
-
15
- def initialize(opts)
16
- @cloud = opts.cloud.nil? ? "aws" : opts.cloud
17
- end
18
-
19
- def start
20
- if cloud =~ /aws/
21
- find_latest_amis
22
- else
23
- puts "Unsupported for #{cloud}"
24
- end
25
- end
26
- end
27
- end
1
+ require "wombat/common"
2
+ require "wombat/aws"
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
+ class LatestRunner
10
+ include Wombat::Common
11
+ include Wombat::Aws
12
+
13
+ attr_reader :stack, :cloud, :lock_opt, :template_opt
14
+
15
+ def initialize(opts)
16
+ @cloud = opts.cloud.nil? ? "aws" : opts.cloud
17
+ end
18
+
19
+ def start
20
+ if cloud =~ /aws/
21
+ find_latest_amis
22
+ else
23
+ puts "Unsupported for #{cloud}"
24
+ end
25
+ end
26
+ end
27
+ end