wombat-cli 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/DESIGN.md +40 -0
  4. data/Gemfile +3 -0
  5. data/README.md +132 -0
  6. data/Rakefile +52 -0
  7. data/Vagrantfile +121 -0
  8. data/bin/wombat +24 -0
  9. data/cookbooks/automate/.gitignore +16 -0
  10. data/cookbooks/automate/.kitchen.ec2.yml +27 -0
  11. data/cookbooks/automate/.kitchen.yml +25 -0
  12. data/cookbooks/automate/Berksfile +6 -0
  13. data/cookbooks/automate/README.md +4 -0
  14. data/cookbooks/automate/chefignore +102 -0
  15. data/cookbooks/automate/libraries/_helper.rb +52 -0
  16. data/cookbooks/automate/libraries/delivery_api.rb +204 -0
  17. data/cookbooks/automate/libraries/delivery_project.rb +31 -0
  18. data/cookbooks/automate/libraries/dsl.rb +5 -0
  19. data/cookbooks/automate/metadata.rb +13 -0
  20. data/cookbooks/automate/recipes/default.rb +111 -0
  21. data/cookbooks/automate/recipes/update-users.rb +48 -0
  22. data/cookbooks/automate/templates/delivery.erb +5 -0
  23. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
  24. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
  25. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
  26. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
  27. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
  28. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
  29. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
  30. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
  31. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/metadata.rb +3 -0
  32. data/cookbooks/automate/test/fixtures/cookbooks/mock_data/recipes/default.rb +27 -0
  33. data/cookbooks/automate/test/integration/default/automate_spec.rb +55 -0
  34. data/cookbooks/build_node/.gitignore +16 -0
  35. data/cookbooks/build_node/.kitchen.ec2.yml +30 -0
  36. data/cookbooks/build_node/.kitchen.yml +23 -0
  37. data/cookbooks/build_node/Berksfile +8 -0
  38. data/cookbooks/build_node/README.md +4 -0
  39. data/cookbooks/build_node/chefignore +102 -0
  40. data/cookbooks/build_node/metadata.rb +15 -0
  41. data/cookbooks/build_node/recipes/default.rb +35 -0
  42. data/cookbooks/build_node/templates/client.erb +3 -0
  43. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
  44. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
  45. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
  46. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
  47. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
  48. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
  49. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
  50. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
  51. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/metadata.rb +2 -0
  52. data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/recipes/default.rb +18 -0
  53. data/cookbooks/build_node/test/integration/default/build-node_spec.rb +39 -0
  54. data/cookbooks/chef_server/.gitignore +16 -0
  55. data/cookbooks/chef_server/.kitchen.ec2.yml +26 -0
  56. data/cookbooks/chef_server/.kitchen.yml +25 -0
  57. data/cookbooks/chef_server/Berksfile +6 -0
  58. data/cookbooks/chef_server/README.md +4 -0
  59. data/cookbooks/chef_server/chefignore +102 -0
  60. data/cookbooks/chef_server/metadata.rb +13 -0
  61. data/cookbooks/chef_server/recipes/cheffish.rb +91 -0
  62. data/cookbooks/chef_server/recipes/default.rb +79 -0
  63. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
  64. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
  65. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
  66. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
  67. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
  68. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
  69. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
  70. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
  71. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/metadata.rb +2 -0
  72. data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/recipes/default.rb +23 -0
  73. data/cookbooks/chef_server/test/integration/default/chef_server_spec.rb +47 -0
  74. data/cookbooks/compliance/.gitignore +16 -0
  75. data/cookbooks/compliance/.kitchen.ec2.yml +26 -0
  76. data/cookbooks/compliance/.kitchen.yml +24 -0
  77. data/cookbooks/compliance/Berksfile +7 -0
  78. data/cookbooks/compliance/README.md +4 -0
  79. data/cookbooks/compliance/chefignore +102 -0
  80. data/cookbooks/compliance/metadata.rb +12 -0
  81. data/cookbooks/compliance/recipes/default.rb +59 -0
  82. data/cookbooks/compliance/spec/spec_helper.rb +2 -0
  83. data/cookbooks/compliance/spec/unit/recipes/default_spec.rb +20 -0
  84. data/cookbooks/compliance/templates/default/chef-compliance.rb.erb +1 -0
  85. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
  86. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
  87. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
  88. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
  89. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
  90. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
  91. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
  92. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
  93. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/metadata.rb +4 -0
  94. data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -0
  95. data/cookbooks/compliance/test/integration/default/compliance.rb +27 -0
  96. data/cookbooks/infranodes/.gitignore +16 -0
  97. data/cookbooks/infranodes/.kitchen.ec2.yml +27 -0
  98. data/cookbooks/infranodes/.kitchen.yml +21 -0
  99. data/cookbooks/infranodes/Berksfile +6 -0
  100. data/cookbooks/infranodes/README.md +4 -0
  101. data/cookbooks/infranodes/attributes/default.rb +3 -0
  102. data/cookbooks/infranodes/chefignore +102 -0
  103. data/cookbooks/infranodes/metadata.rb +13 -0
  104. data/cookbooks/infranodes/recipes/default.rb +41 -0
  105. data/cookbooks/infranodes/spec/spec_helper.rb +2 -0
  106. data/cookbooks/infranodes/spec/unit/recipes/default_spec.rb +20 -0
  107. data/cookbooks/infranodes/templates/default/client.rb.erb +5 -0
  108. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
  109. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
  110. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
  111. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
  112. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
  113. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
  114. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
  115. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
  116. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/metadata.rb +3 -0
  117. data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -0
  118. data/cookbooks/infranodes/test/integration/default/infranodes_spec.rb +20 -0
  119. data/cookbooks/infranodes/test/integration/helpers/serverspec/spec_helper.rb +8 -0
  120. data/cookbooks/wombat/.gitignore +16 -0
  121. data/cookbooks/wombat/.kitchen.yml +43 -0
  122. data/cookbooks/wombat/Berksfile +6 -0
  123. data/cookbooks/wombat/README.md +4 -0
  124. data/cookbooks/wombat/attributes/default.rb +71 -0
  125. data/cookbooks/wombat/attributes/packer.rb +18 -0
  126. data/cookbooks/wombat/chefignore +102 -0
  127. data/cookbooks/wombat/metadata.rb +11 -0
  128. data/cookbooks/wombat/recipes/authorized-keys.rb +10 -0
  129. data/cookbooks/wombat/recipes/default.rb +112 -0
  130. data/cookbooks/wombat/recipes/etc-hosts.rb +51 -0
  131. data/cookbooks/workstation/.gitignore +16 -0
  132. data/cookbooks/workstation/.kitchen.ec2.yml +29 -0
  133. data/cookbooks/workstation/.kitchen.yml +22 -0
  134. data/cookbooks/workstation/Berksfile +7 -0
  135. data/cookbooks/workstation/README.md +3 -0
  136. data/cookbooks/workstation/chefignore +102 -0
  137. data/cookbooks/workstation/files/atom.apm.list +7 -0
  138. data/cookbooks/workstation/files/atom.config.cson +3 -0
  139. data/cookbooks/workstation/files/cmder.xml +605 -0
  140. data/cookbooks/workstation/metadata.rb +14 -0
  141. data/cookbooks/workstation/recipes/browser.rb +45 -0
  142. data/cookbooks/workstation/recipes/certs-keys.rb +44 -0
  143. data/cookbooks/workstation/recipes/chef.rb +29 -0
  144. data/cookbooks/workstation/recipes/default.rb +16 -0
  145. data/cookbooks/workstation/recipes/dotnet.rb +17 -0
  146. data/cookbooks/workstation/recipes/editor.rb +19 -0
  147. data/cookbooks/workstation/recipes/profile.rb +42 -0
  148. data/cookbooks/workstation/recipes/terminal.rb +13 -0
  149. data/cookbooks/workstation/templates/default/bookmarks.html.erb +23 -0
  150. data/cookbooks/workstation/templates/default/data_collector.rb.erb +2 -0
  151. data/cookbooks/workstation/templates/default/ise_profile.ps1.erb +11 -0
  152. data/cookbooks/workstation/templates/default/knife.rb.erb +10 -0
  153. data/cookbooks/workstation/templates/default/master_preferences.json.erb +28 -0
  154. data/cookbooks/workstation/templates/default/ssh_config.erb +16 -0
  155. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/chef-server.crt +26 -0
  156. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/chef-server.key +27 -0
  157. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
  158. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
  159. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/delivery.crt +26 -0
  160. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/delivery.key +27 -0
  161. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
  162. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
  163. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/metadata.rb +2 -0
  164. data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -0
  165. data/cookbooks/workstation/test/integration/default/workstation_spec.rb +37 -0
  166. data/keys/.gitkeep +0 -0
  167. data/lib/wombat/build.rb +195 -0
  168. data/lib/wombat/cli.rb +169 -0
  169. data/lib/wombat/common.rb +163 -0
  170. data/lib/wombat/delete.rb +28 -0
  171. data/lib/wombat/deploy.rb +105 -0
  172. data/lib/wombat/output.rb +45 -0
  173. data/lib/wombat/version.rb +3 -0
  174. data/lib/wombat.rb +8 -0
  175. data/logs/.gitkeep +0 -0
  176. data/packer/automate.json +108 -0
  177. data/packer/build-node.json +114 -0
  178. data/packer/chef-server.json +106 -0
  179. data/packer/compliance.json +106 -0
  180. data/packer/files/.gitkeep +0 -0
  181. data/packer/infranodes.json +108 -0
  182. data/packer/mock-data/.gitignore +16 -0
  183. data/packer/mock-data/.kitchen.yml +21 -0
  184. data/packer/mock-data/Berksfile +3 -0
  185. data/packer/mock-data/README.md +4 -0
  186. data/packer/mock-data/chefignore +102 -0
  187. data/packer/mock-data/metadata.rb +7 -0
  188. data/packer/mock-data/recipes/default.rb +69 -0
  189. data/packer/mock-data/spec/spec_helper.rb +2 -0
  190. data/packer/mock-data/spec/unit/recipes/default_spec.rb +20 -0
  191. data/packer/mock-data/test/integration/default/serverspec/default_spec.rb +9 -0
  192. data/packer/mock-data/test/integration/helpers/serverspec/spec_helper.rb +8 -0
  193. data/packer/workstation.json +97 -0
  194. data/templates/bootstrap-aws.erb +36 -0
  195. data/templates/cfn.json.erb +661 -0
  196. data/terraform/README.md +13 -0
  197. data/terraform/templates/terraform.tfvars.erb +12 -0
  198. data/terraform/wombat.tf +328 -0
  199. data/wombat-cli.gemspec +32 -0
  200. data/wombat.example.yml +52 -0
  201. metadata +331 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6b93d81468007c7e0f2eacebc5b8d7a623f4ef2b
4
+ data.tar.gz: 22e16911954777a777d741f65e190a094479fb41
5
+ SHA512:
6
+ metadata.gz: e4639618f0e1555f2d830840fd3b74b9c761759b50bbe23710fd37fd320e4367249137d4d2f1b40aee5c25c72591ac4426f10a4b89c2018d5678edd2118f5acd
7
+ data.tar.gz: 2bc93afb35e83966a233564c2b7b5b4704d629c7633bbe6d129ba7ca7bcfe4b00325bde9df3128417322e5a66e06cc165f18a291af5421af6553e2388c3638c2
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ delivery.license
2
+ chefautomate-validator.pem
3
+ delivery-admin.creds
4
+ delivery-user.pem
5
+ delivery.creds
6
+ .vagrant
7
+ terraform.tfstate*
8
+ terraform.tfvars
9
+ vendored-cookbooks
10
+ *.log
11
+ cloudformation/*.json
12
+ wombat.yml
13
+ keys/*
14
+ packer/keys/*
15
+ *.lock
16
+ infranodes-info.json
17
+ output
18
+ bootstrap-aws.txt
19
+ *.gem
data/DESIGN.md ADDED
@@ -0,0 +1,40 @@
1
+ ## Anatomy of an Wombat
2
+
3
+ ### tl;dr
4
+
5
+ Wombat is a collection of code that builds Chef configured golden
6
+ images from packer templates that are then re-consumed by a Cloud service template such
7
+ as CloudFormation or Google Deployment Manager.
8
+
9
+ ### Design Goals
10
+
11
+ * coordination without coordination
12
+ * principle of least surprise
13
+ * dynamic templates over static files
14
+
15
+ ### A Stroll Down Architecture Lane
16
+
17
+ The core of wombat is the binary `bin/wombat`.
18
+
19
+
20
+ `wombat build -o BUILDER TEMPLATE`
21
+
22
+ 1. Generate x509 certificates for the domain and ssh keys if there are none
23
+ 2. Vendor cookbooks for template
24
+ 3. Build Packer images for -o BUILDER (amazon-ebs|googlecompute) with included cookbooks
25
+
26
+ * If the TEMPLATE argument is not provided it will execute against all templates in `./packer/`
27
+
28
+ `wombat deploy STACK`
29
+
30
+ 1. Create/update wombat.lock based on most recent Packer logs
31
+ 2. Create cfn/gdm configuration from lock data fed through template
32
+ 3. Deploy cfn/gdm stack
33
+
34
+ `wombat outputs STACK`
35
+
36
+ 1. List outputs, specifically Workstation IPs
37
+
38
+ `wombat delete STACK`
39
+
40
+ 1. Delete stack
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,132 @@
1
+ [![Stories in Ready](https://badge.waffle.io/chef-cft/wombat.png?label=ready&title=Ready)](https://waffle.io/chef-cft/wombat)
2
+ # `Project Wombat`
3
+ A combination of packer templates and terraform plan to configure a demo environment which includes:
4
+
5
+ * Chef Server
6
+ * Chef Automate
7
+ * Chef Compliance
8
+ * _N_ Automate Build Node(s)
9
+ * _N_ Infrastructure Nodes
10
+ * _N_ Windows Workstation
11
+
12
+
13
+ Usage
14
+ ------------
15
+
16
+ ##### Download your Automate license key
17
+ Automate requires a valid license to activate successfully. **If you do
18
+ not have a license key, you can request one from your CHEF account
19
+ representative.**
20
+
21
+ You will need to have the `delivery.license` file present inside `packer/files/`
22
+ directory.
23
+
24
+ ##### Install and Configure ChefDK
25
+
26
+ Follow the instructions at https://docs.chef.io/install_dk.html to install and configure ChefDK as your default version of ruby.
27
+
28
+ ##### Install Packer
29
+
30
+ Downloads are here: https://www.packer.io/downloads.html . Place in your path for direct execution.
31
+
32
+ ##### Create a wombat.yml
33
+
34
+ Create a wombat.yml - there is an example `wombat.example.yml` for reference and easy copying
35
+ ```
36
+ ---
37
+ name: wombat
38
+ # Uncomment domain_prefix if you wish to prepend your generated domain.
39
+ # Ex: The below example would create foo-chef.animals.biz.
40
+ # domain_prefix: foo-
41
+ domain: animals.biz
42
+ enterprise: mammals
43
+ org: marsupials
44
+ build-nodes: '1'
45
+ workstations: '1'
46
+ workstation-passwd: 'RL9@T40BTmXh'
47
+ version: 0.2.0
48
+ ttl: 8
49
+ products:
50
+ chef: stable-12.13.37
51
+ chef-server: stable-12.8.0
52
+ chefdk: stable-0.16.28
53
+ compliance: stable-1.3.1
54
+ automate: stable-0.5.1
55
+ aws:
56
+ region: ap-southeast-2
57
+ az: ap-southeast-2c
58
+ keypair: keypair-ap-southeast-2
59
+ source_ami:
60
+ ubuntu: ami-8c4cb0ec
61
+ windows: ami-87c037e7
62
+ ```
63
+
64
+ *NOTE:* workstation-passwd must meet the minimum Microsoft [Complexity Requirements](https://technet.microsoft.com/en-us/library/hh994562(v=ws.11).aspx)
65
+
66
+ *NOTE:* The `googlecompute` and `azure` builders exist but not all images will build nor is there deployment support for either at this time.
67
+
68
+ ##### Build images with Packer
69
+
70
+ ```
71
+ # build one or more templates
72
+ $ bin/wombat build [-o BUILDER] TEMPLATE [TEMPLATE2]
73
+
74
+ # build all templates (sequentially)
75
+ $ bin/wombat build [-o BUILDER]
76
+
77
+ # build all images (parallel)
78
+ $ bin/wombat build [-o BUILDER] --parallel
79
+ ```
80
+
81
+ *NOTE:* If the builder is not provided it defaults to `amazon-ebs`
82
+
83
+ ##### Deploy CloudFormation template
84
+
85
+ ###### via AWS CloudFormation Web UI
86
+
87
+ Upload the created template from the `cloudformation` directory.
88
+
89
+ ###### via CLI
90
+
91
+ ```
92
+ # Deploy CloudFormation template
93
+ $ bin/wombat deploy --cloud aws STACK
94
+ ==> Updating wombat.lock
95
+ ==> Generate CloudFormation JSON: STACK.json
96
+ ==> Creating CloudFormation stack
97
+ Created: arn:aws:cloudformation:us-east-1:862552916454:stack/STACK/2160c580-713e-11e6-b392-50a686e4bb82
98
+ ```
99
+
100
+ *NOTE:* If the cloud is not provided it defaults to `aws`
101
+
102
+ ##### Login to Windows Workstation
103
+
104
+ ```
105
+ # Get Windows Workstation(s) IP(s)
106
+ $ bin/wombat outputs STACK
107
+ WindowsWorkstation (i-xxxxxxxx) => XX.XXX.XX.XXX
108
+ ```
109
+
110
+ From the AWS CloudFormation UI, select the Outputs tab for the desired stack.
111
+ Use an RDP compatible client to login to the workstation with the embedded credentials.
112
+
113
+ LICENSE AND AUTHORS
114
+ ===================
115
+ * [Andre Elizondo](https://github.com/andrewelizondo)
116
+ * [Seth Thomas](https://github.com/cheeseplus)
117
+
118
+ ```text
119
+ Copyright:: 2016 Chef Software, Inc
120
+
121
+ Licensed under the Apache License, Version 2.0 (the "License");
122
+ you may not use this file except in compliance with the License.
123
+ You may obtain a copy of the License at
124
+
125
+ http://www.apache.org/licenses/LICENSE-2.0
126
+
127
+ Unless required by applicable law or agreed to in writing, software
128
+ distributed under the License is distributed on an "AS IS" BASIS,
129
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130
+ See the License for the specific language governing permissions and
131
+ limitations under the License.
132
+ ```
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ require 'erb'
2
+ require 'json'
3
+ require 'openssl'
4
+ require 'net/ssh'
5
+ require 'yaml'
6
+ require 'parallel'
7
+ require 'aws-sdk'
8
+
9
+ namespace :build do
10
+ desc 'Build an image'
11
+ task :image, :template, :builder do |_t, args|
12
+ sh "bin/wombat build -o #{args[:builder]} #{args[:template]}"
13
+ end
14
+
15
+ desc 'Build all images'
16
+ task :images, :builder, :parallel do |_t, args|
17
+ if parallel == 'true'
18
+ sh "bin/wombat build -o #{args[:builder]} --parallel"
19
+ else
20
+ sh "bin/wombat build -o #{args[:builder]}"
21
+ end
22
+ end
23
+ end
24
+
25
+ namespace :deploy do
26
+ desc 'Deploy a stack from template'
27
+ task :create, :stack,:cloud do |_t, args|
28
+ case args[:cloud]
29
+ when "gce", "gcp", "google", "gdm"
30
+ # TODO
31
+ when "aws", "amazon", "jeffbezosband", "cfn"
32
+ sh "bin/wombat deploy --cloud aws #{args[:stack]}"
33
+ end
34
+ end
35
+
36
+ desc 'Delete a stack'
37
+ task :delete, :stack, :cloud do |task, args|
38
+ cloud = args[:cloud] == 'gcp' ? 'gcp' : 'aws'
39
+ sh "bin/wombat delete --cloud #{cloud} #{args[:stack]}"
40
+ end
41
+
42
+ desc 'List workstation IPs of a stack'
43
+ task :outputs, :stack, :cloud do |task, args|
44
+ cloud = args[:cloud] == 'gcp' ? 'gcp' : 'aws'
45
+ case cloud
46
+ when "gce", "gcp", "google", "gdm"
47
+ puts "do google shit"
48
+ when "aws", "amazon", "jeffbezosband", "cfn"
49
+ sh "bin/wombat outputs --cloud aws #{args[:stack]}"
50
+ end
51
+ end
52
+ end
data/Vagrantfile ADDED
@@ -0,0 +1,121 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ # All Vagrant configuration is done below. The "2" in Vagrant.configure
5
+ # configures the configuration version (we support older styles for
6
+ # backwards compatibility). Please don't change it unless you know what
7
+ # you're doing.
8
+ Vagrant.configure(2) do |config|
9
+
10
+ config.vm.box = "bento/ubuntu-14.04"
11
+
12
+ # cache rules everything around me
13
+ if Vagrant.has_plugin?("vagrant-cachier")
14
+ config.cache.scope = :box
15
+ config.cache.auto_detect = true
16
+ config.cache.enable :apt
17
+ end
18
+
19
+ # Provision a Chef server with push jobs installed
20
+ config.vm.define "chef-server" do |cs|
21
+
22
+ cs.vm.hostname = "chef"
23
+ cs.vm.network "private_network", ip: "172.31.54.10"
24
+
25
+ cs.vm.provider "virtualbox" do |v|
26
+ v.memory = 2048
27
+ v.cpus = 2
28
+ end
29
+
30
+ cs.vm.provision "chef_solo" do |chef|
31
+ chef.cookbooks_path = "vendored-cookbooks/chef-server"
32
+ chef.add_recipe "mock-data"
33
+ chef.add_recipe "chef-server"
34
+ chef.json = {
35
+ "demo" => {
36
+ "admin-user" => "vagrant"
37
+ }
38
+ }
39
+ end
40
+
41
+ end
42
+
43
+ config.vm.define "automate" do |d|
44
+
45
+ d.vm.network "private_network", ip: "172.31.54.11"
46
+ d.vm.hostname = "automate"
47
+ d.vm.provider "virtualbox" do |v|
48
+ v.memory = 2048
49
+ v.cpus = 2
50
+ end
51
+
52
+ d.vm.provision "chef_solo" do |chef|
53
+ chef.cookbooks_path = "vendored-cookbooks/automate"
54
+ chef.add_recipe "mock-data"
55
+ chef.add_recipe "automate"
56
+ chef.json = {
57
+ "demo" => {
58
+ "admin-user" => "vagrant"
59
+ }
60
+ }
61
+ end
62
+
63
+ end
64
+
65
+ config.vm.define "compliance" do |cc|
66
+ cc.vm.hostname = "compliance"
67
+ cc.vm.network "private_network", ip: "172.31.54.12"
68
+
69
+ cc.vm.provider "virtualbox" do |v|
70
+ v.memory = 1024
71
+ v.cpus = 1
72
+ end
73
+
74
+ cc.vm.provision "chef_solo" do |chef|
75
+ chef.cookbooks_path = "vendored-cookbooks/compliance"
76
+ chef.add_recipe "mock-data"
77
+ chef.add_recipe "compliance"
78
+ chef.json = {
79
+ "demo" => {
80
+ "admin-user" => "vagrant"
81
+ }
82
+ }
83
+ end
84
+
85
+ end
86
+
87
+ config.vm.define "build-node-1" do |bn|
88
+ bn.vm.network "private_network", ip: "172.31.54.101"
89
+ bn.vm.hostname = "build-node-1"
90
+
91
+ bn.vm.provision "chef_solo" do |chef|
92
+ chef.cookbooks_path = "vendored-cookbooks/build-node"
93
+ chef.add_recipe "mock-data"
94
+ chef.add_recipe "build-node"
95
+ chef.json = {
96
+ "demo" => {
97
+ "admin-user" => "vagrant"
98
+ }
99
+ }
100
+ end
101
+ end
102
+
103
+ config.vm.define "workstation", primary: true do |wk|
104
+ wk.vm.network "private_network", ip: "172.31.54.99"
105
+ wk.vm.hostname = "workstation"
106
+
107
+ wk.vm.box = "mwrock/Windows2012R2"
108
+
109
+ wk.vm.provision "chef_solo" do |chef|
110
+ chef.cookbooks_path = "vendored-cookbooks/workstation"
111
+ chef.add_recipe "mock-data"
112
+ chef.add_recipe "workstation"
113
+ chef.json = {
114
+ "demo" => {
115
+ "admin-user" => "vagrant"
116
+ }
117
+ }
118
+ end
119
+ end
120
+
121
+ end
data/bin/wombat ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- encoding: utf-8 -*-
3
+ def shut_down
4
+ puts "\nShutting down gracefully..."
5
+ sleep 1
6
+ end
7
+
8
+ Signal.trap("INT") {
9
+ shut_down
10
+ exit
11
+ }
12
+
13
+ $stdout.sync = true
14
+ $stderr.sync = true
15
+
16
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), %w[.. lib])
17
+ require "wombat/cli"
18
+
19
+ begin
20
+ Runner.new(Options.parse(ARGV)).start
21
+ rescue => ex
22
+ $stderr.puts ">>> #{ex.message}"
23
+ exit(($? && $?.exitstatus) || 99)
24
+ end
@@ -0,0 +1,16 @@
1
+ .vagrant
2
+ Berksfile.lock
3
+ *~
4
+ *#
5
+ .#*
6
+ \#*#
7
+ .*.sw[a-z]
8
+ *.un~
9
+
10
+ # Bundler
11
+ Gemfile.lock
12
+ bin/*
13
+ .bundle/*
14
+
15
+ .kitchen/
16
+ .kitchen.local.yml
@@ -0,0 +1,27 @@
1
+ ---
2
+ driver:
3
+ name: ec2
4
+ aws_ssh_key_id: <%= ENV["EC2_SSH_KEY_NAME"] %>
5
+ region: us-east-1
6
+ availability_zone: e
7
+ instance_type: m3.large
8
+
9
+ provisioner:
10
+ name: chef_zero
11
+
12
+ verifier:
13
+ name: inspec
14
+
15
+ platforms:
16
+ - name: ubuntu-1404
17
+ driver:
18
+ image_id: ami-8e0b9499
19
+ transport:
20
+ ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
21
+
22
+ suites:
23
+ - name: default
24
+ run_list:
25
+ - recipe[apt]
26
+ - recipe[mock_data]
27
+ - recipe[automate]
@@ -0,0 +1,25 @@
1
+ ---
2
+ driver:
3
+ name: vagrant
4
+ customize:
5
+ memory: 2048
6
+ cpus: 2
7
+
8
+ provisioner:
9
+ name: chef_zero
10
+
11
+ verifier:
12
+ name: inspec
13
+
14
+ platforms:
15
+ - name: ubuntu-14.04
16
+
17
+ suites:
18
+ - name: default
19
+ run_list:
20
+ - recipe[apt::default]
21
+ - recipe[mock_data::default]
22
+ - recipe[automate::default]
23
+ attributes:
24
+ demo:
25
+ admin-user: 'vagrant'
@@ -0,0 +1,6 @@
1
+ source 'https://supermarket.chef.io'
2
+
3
+ metadata
4
+
5
+ cookbook 'wombat', path: '../wombat'
6
+ cookbook 'mock_data', path: 'test/fixtures/cookbooks/mock_data'
@@ -0,0 +1,4 @@
1
+ # automate
2
+
3
+ This is an ultralight automate cookbook that may or may not be replaced by existing
4
+ cookbooks in the future but is currently better than shell scripts
@@ -0,0 +1,102 @@
1
+ # Put files/directories that should be ignored in this file when uploading
2
+ # to a chef-server or supermarket.
3
+ # Lines that start with '# ' are comments.
4
+
5
+ # OS generated files #
6
+ ######################
7
+ .DS_Store
8
+ Icon?
9
+ nohup.out
10
+ ehthumbs.db
11
+ Thumbs.db
12
+
13
+ # SASS #
14
+ ########
15
+ .sass-cache
16
+
17
+ # EDITORS #
18
+ ###########
19
+ \#*
20
+ .#*
21
+ *~
22
+ *.sw[a-z]
23
+ *.bak
24
+ REVISION
25
+ TAGS*
26
+ tmtags
27
+ *_flymake.*
28
+ *_flymake
29
+ *.tmproj
30
+ .project
31
+ .settings
32
+ mkmf.log
33
+
34
+ ## COMPILED ##
35
+ ##############
36
+ a.out
37
+ *.o
38
+ *.pyc
39
+ *.so
40
+ *.com
41
+ *.class
42
+ *.dll
43
+ *.exe
44
+ */rdoc/
45
+
46
+ # Testing #
47
+ ###########
48
+ .watchr
49
+ .rspec
50
+ spec/*
51
+ spec/fixtures/*
52
+ test/*
53
+ features/*
54
+ examples/*
55
+ Guardfile
56
+ Procfile
57
+ .kitchen*
58
+ .rubocop.yml
59
+ spec/*
60
+ Rakefile
61
+ .travis.yml
62
+ .foodcritic
63
+ .codeclimate.yml
64
+
65
+ # SCM #
66
+ #######
67
+ .git
68
+ */.git
69
+ .gitignore
70
+ .gitmodules
71
+ .gitconfig
72
+ .gitattributes
73
+ .svn
74
+ */.bzr/*
75
+ */.hg/*
76
+ */.svn/*
77
+
78
+ # Berkshelf #
79
+ #############
80
+ Berksfile
81
+ Berksfile.lock
82
+ cookbooks/*
83
+ tmp
84
+
85
+ # Cookbooks #
86
+ #############
87
+ CONTRIBUTING*
88
+ CHANGELOG*
89
+ TESTING*
90
+ MAINTAINERS.toml
91
+
92
+ # Strainer #
93
+ ############
94
+ Colanderfile
95
+ Strainerfile
96
+ .colander
97
+ .strainer
98
+
99
+ # Vagrant #
100
+ ###########
101
+ .vagrant
102
+ Vagrantfile
@@ -0,0 +1,52 @@
1
+ #
2
+ # Cookbook Name:: automate
3
+ # Recipe:: _helper
4
+ #
5
+ # Author:: Salim Afiune (<afiune@chef.io>)
6
+ #
7
+ # Copyright 2015, Chef Software, Inc.
8
+ #
9
+ # All rights reserved - Do Not Redistribute
10
+ #
11
+
12
+ module Delivery
13
+
14
+ module Helper
15
+ # Delivery API helper
16
+ #
17
+ # This little helper will let us just type:
18
+ # e.g.
19
+ # delivery_api.get(...)
20
+ # delivery_api.put(...)
21
+ # delivery_api.post(...)
22
+ # delivery_api.delete(...)
23
+ #
24
+ def delivery_api
25
+ @api ||= begin
26
+ Delivery::API.new(delivery_fqdn, 'admin', delivery_admin_password, delivery_enterprise)
27
+ end
28
+ end
29
+
30
+ # Get delivery enterprise
31
+
32
+ def delivery_fqdn
33
+ "#{node['demo']['domain_prefix']}automate.#{node['demo']['domain']}"
34
+ end
35
+
36
+ def delivery_organization
37
+ node['demo']['org']
38
+ end
39
+
40
+ def delivery_enterprise
41
+ node['demo']['enterprise']
42
+ end
43
+
44
+ def delivery_admin_password
45
+ node['demo']['users']['admin']['password']
46
+ end
47
+
48
+ def return_key(key)
49
+ key =~ /\// ? File.read(key) : key
50
+ end
51
+ end
52
+ end