wombat-cli 0.2.0

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