elevage 0.1.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 (74) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +21 -0
  4. data/.rubocop.yml +8 -0
  5. data/.ruby-version +1 -0
  6. data/.simplecov +8 -0
  7. data/.travis.yml +3 -0
  8. data/.yardoc/checksums +12 -0
  9. data/.yardoc/object_types +0 -0
  10. data/.yardoc/objects/root.dat +0 -0
  11. data/.yardoc/proxy_types +0 -0
  12. data/Gemfile +4 -0
  13. data/Guardfile +10 -0
  14. data/LICENSE.txt +203 -0
  15. data/README.md +112 -0
  16. data/Rakefile +20 -0
  17. data/bin/elevage +4 -0
  18. data/coverage/.resultset.json.lock +0 -0
  19. data/doc/Elevage/Build.html +435 -0
  20. data/doc/Elevage/CLI.html +282 -0
  21. data/doc/Elevage/Environment.html +950 -0
  22. data/doc/Elevage/Generate.html +346 -0
  23. data/doc/Elevage/Health.html +359 -0
  24. data/doc/Elevage/New.html +411 -0
  25. data/doc/Elevage/Platform.html +1119 -0
  26. data/doc/Elevage/Provisioner.html +804 -0
  27. data/doc/Elevage/ProvisionerRunQueue.html +765 -0
  28. data/doc/Elevage/Runner.html +319 -0
  29. data/doc/Elevage.html +501 -0
  30. data/doc/_index.html +239 -0
  31. data/doc/class_list.html +58 -0
  32. data/doc/css/common.css +1 -0
  33. data/doc/css/full_list.css +57 -0
  34. data/doc/css/style.css +339 -0
  35. data/doc/file.README.html +187 -0
  36. data/doc/file_list.html +60 -0
  37. data/doc/frames.html +26 -0
  38. data/doc/index.html +187 -0
  39. data/doc/js/app.js +219 -0
  40. data/doc/js/full_list.js +181 -0
  41. data/doc/js/jquery.js +4 -0
  42. data/doc/method_list.html +369 -0
  43. data/doc/top-level-namespace.html +112 -0
  44. data/elevage.gemspec +39 -0
  45. data/features/archive +314 -0
  46. data/features/build.feature +237 -0
  47. data/features/elevage.feature +24 -0
  48. data/features/generate.feature +235 -0
  49. data/features/health_env_failure.feature +292 -0
  50. data/features/health_failure.feature +291 -0
  51. data/features/health_success.feature +279 -0
  52. data/features/list.feature +315 -0
  53. data/features/new.feature +68 -0
  54. data/features/step_definitions/elevage_steps.rb +27 -0
  55. data/features/support/env.rb +9 -0
  56. data/lib/elevage/build.rb +109 -0
  57. data/lib/elevage/constants.rb +113 -0
  58. data/lib/elevage/environment.rb +223 -0
  59. data/lib/elevage/generate.rb +48 -0
  60. data/lib/elevage/health.rb +27 -0
  61. data/lib/elevage/new.rb +30 -0
  62. data/lib/elevage/platform.rb +105 -0
  63. data/lib/elevage/provisioner.rb +169 -0
  64. data/lib/elevage/provisionerrunqueue.rb +114 -0
  65. data/lib/elevage/runner.rb +39 -0
  66. data/lib/elevage/templates/compute.yml.tt +18 -0
  67. data/lib/elevage/templates/environment.yml.tt +20 -0
  68. data/lib/elevage/templates/network.yml.tt +16 -0
  69. data/lib/elevage/templates/platform.yml.tt +110 -0
  70. data/lib/elevage/templates/vcenter.yml.tt +77 -0
  71. data/lib/elevage/version.rb +4 -0
  72. data/lib/elevage.rb +45 -0
  73. data/spec/spec_helper.rb +4 -0
  74. metadata +357 -0
@@ -0,0 +1,315 @@
1
+ Feature: LIST platform definition file items
2
+
3
+ As an Infracoder developing a command line tool
4
+ I want to display vcenters, networks, components, and other desired elements in the platform files
5
+ In order to maintain the health of the elevage platform definition files
6
+
7
+ Scenario: list desired state items for platform and environment definitions
8
+
9
+ Given a file named "platform.yml" with:
10
+ """
11
+ platform:
12
+ name: app
13
+ description: 'description of the app'
14
+
15
+ environments:
16
+ - int
17
+ - prod
18
+
19
+ tiers:
20
+ - Web
21
+ - App
22
+
23
+ nodenameconvention:
24
+ - environment
25
+ - '-'
26
+ - component
27
+ - '-'
28
+ - instance
29
+ - geo
30
+
31
+ pools:
32
+ webvmdefaults: &webvmdefaults
33
+ count: 2
34
+ tier: Web
35
+ image: 'centos-6.5-x86_64-20140714'
36
+ compute: nonprodweb
37
+ port: 80
38
+ runlist:
39
+ - 'role[loc_uswest]'
40
+ - 'role[base]'
41
+ componentrole: 'role[#]'
42
+
43
+ appvmdefaults: &appvmdefaults
44
+ <<: *webvmdefaults
45
+ tier: App
46
+ compute: nonprodapp
47
+
48
+ components:
49
+ api:
50
+ <<: *webvmdefaults
51
+ port: 8080
52
+
53
+ cui:
54
+ <<: *webvmdefaults
55
+ port: 8082
56
+
57
+ terracotta:
58
+ <<: *webvmdefaults
59
+ compute: nonprodtc
60
+ image: 'centos32g-6.5-x86_64-20140714'
61
+
62
+ email:
63
+ <<: *appvmdefaults
64
+ port: 8130
65
+
66
+ mq:
67
+ <<: *appvmdefaults
68
+ port: 1234
69
+ compute: nonprodmq
70
+ image: 'centos32g-6.5-x86_64-20140714'
71
+ """
72
+ Given a file named "infrastructure/vcenter.yml" with:
73
+ """
74
+ vcenter:
75
+ nonprod: &vcenter
76
+ geo: west
77
+ timezone: 085
78
+
79
+ host: 'www.google.com'
80
+ datacenter: 'WCDC NonProd'
81
+ imagefolder: 'Corporate/Platform Services/Templates'
82
+ destfolder: 'Corporate/Platform Services/app'
83
+ resourcepool: 'App-Web Linux/Corporate'
84
+ appendenv: true
85
+ appenddomain: true
86
+ datastores:
87
+ - NonProd_Cor_25
88
+ - NonProd_Cor_26
89
+ - NonProd_Cor_38
90
+ - NonProd_Cor_39
91
+
92
+ domain: dev.corp.local
93
+ dnsips:
94
+ - 10.10.10.5
95
+ - 10.10.10.6
96
+
97
+ prod:
98
+ <<: *vcenter
99
+
100
+ datacenter: 'WCDC Prod'
101
+ datastores:
102
+ - Prod_Cor_03
103
+ - Prod_Cor_04
104
+
105
+ domain: corp.local
106
+ dnsips:
107
+ - 10.20.100.5
108
+ - 10.20.100.6
109
+ """
110
+ Given a file named "infrastructure/network.yml" with:
111
+ """
112
+ network:
113
+ devweb:
114
+ vlanid: DEV_WEB_NET
115
+ gateway: '10.10.128.1'
116
+ netmask: 19
117
+
118
+ devapp:
119
+ vlanid: DEV_APP_NET
120
+ gateway: '10.10.160.1'
121
+ netmask: 20
122
+
123
+ prodweb:
124
+ vlanid: PRD_WEB_NET
125
+ gateway: '10.119.128.1'
126
+ netmask: 19
127
+
128
+ prodapp:
129
+ vlanid: PRD_APP_NET
130
+ gateway: '10.119.160.1'
131
+ netmask: 20
132
+ """
133
+ Given a file named "infrastructure/compute.yml" with:
134
+ """
135
+ compute:
136
+ default: &default
137
+ cpu: 2
138
+ ram: 2
139
+
140
+ nonprodweb:
141
+ <<: *default
142
+
143
+ nonprodapp:
144
+ <<: *default
145
+ ram: 6
146
+
147
+ nonprodtc:
148
+ <<: *default
149
+ ram: 8
150
+
151
+ nonprodmq:
152
+ <<: *default
153
+ ram: 12
154
+
155
+ prodweb:
156
+ <<: *default
157
+ ram: 6
158
+
159
+ prodapp:
160
+ <<: *default
161
+ ram: 6
162
+
163
+ prodtc:
164
+ <<: *default
165
+ ram: 32
166
+
167
+ prodmq:
168
+ <<: *default
169
+ cpu: 8
170
+ ram: 32
171
+ """
172
+ Given a file named "environments/int.yml" with:
173
+ """
174
+ environment:
175
+ vcenter: nonprod
176
+
177
+ pool:
178
+ webvmdefaults: &webvmdefaults
179
+ network: devweb
180
+ compute: nonprodweb
181
+
182
+ appvmdefaults: &appvmdefaults
183
+ <<: *webvmdefaults
184
+ network: devapp
185
+ compute: nonprodapp
186
+
187
+ components:
188
+ api:
189
+ addresses:
190
+ - 10.10.137.42
191
+ - 10.10.137.43
192
+
193
+ cui:
194
+ addresses:
195
+ - 10.10.137.64
196
+ - 10.10.137.65
197
+
198
+ terracotta:
199
+ addresses:
200
+ - 10.10.137.95
201
+ - 10.10.137.96
202
+
203
+ email:
204
+ addresses:
205
+ - 10.10.161.53
206
+ - 10.10.161.54
207
+
208
+ mq:
209
+ addresses:
210
+ - 10.10.161.77
211
+ - 10.10.161.78
212
+ """
213
+ Given a file named "environments/prod.yml" with:
214
+ """
215
+ environment:
216
+ vcenter: prod
217
+
218
+ pool:
219
+ webvmdefaults: &webvmdefaults
220
+ network: prodweb
221
+ count: 4
222
+ compute: prodweb
223
+
224
+ appvmdefaults: &appvmdefaults
225
+ <<: *webvmdefaults
226
+ network: prodapp
227
+ compute: prodapp
228
+
229
+
230
+ components:
231
+ api:
232
+ addresses:
233
+ - 10.119.137.72
234
+ - 10.119.137.73
235
+ - 10.119.137.74
236
+ - 10.119.137.75
237
+
238
+ cui:
239
+ addresses:
240
+ - 10.119.137.133
241
+ - 10.119.137.134
242
+ - 10.119.137.135
243
+ - 10.119.137.136
244
+
245
+ terracotta:
246
+ count: 2
247
+ compute: prodtc
248
+ addresses:
249
+ - 10.119.137.218
250
+ - 10.119.137.219
251
+ port: 0000
252
+
253
+ email:
254
+ addresses:
255
+ - 10.119.161.137
256
+ - 10.119.161.138
257
+ - 10.119.161.139
258
+ - 10.119.161.140
259
+
260
+ mq:
261
+ count: 2
262
+ compute: prodmq
263
+ addresses:
264
+ - 10.119.161.206
265
+ - 10.119.161.207
266
+ """
267
+
268
+ When I run `elevage list environments`
269
+ Then the exit status should be 0
270
+ And the output should contain "- int\n- prod"
271
+
272
+ When I run `elevage list tiers`
273
+ Then the exit status should be 0
274
+ And the output should contain "- Web\n- App"
275
+
276
+ When I run `elevage list pools`
277
+ Then the exit status should be 0
278
+ And the output should contain "appvmdefaults:\n count: 2\n tier: App\n image: centos-6.5-x86_64-20140714\n compute: nonprodapp\n port: 80"
279
+
280
+ When I run `elevage list components`
281
+ Then the exit status should be 0
282
+ And the output should contain "terracotta:\n count: 2\n tier: Web\n image: centos32g-6.5-x86_64-20140714\n compute: nonprodtc\n port: 80"
283
+
284
+ When I run `elevage list vcenter`
285
+ Then the exit status should be 0
286
+ And the output should contain "prod:\n geo: west\n timezone: 085\n host: www.google.com\n datacenter: WCDC Prod"
287
+
288
+ When I run `elevage list compute`
289
+ Then the exit status should be 0
290
+ And the output should contain "prodtc:\n cpu: 2\n ram: 32"
291
+
292
+ When I run `elevage list network`
293
+ Then the exit status should be 0
294
+ And the output should contain "prodweb:\n vlanid: PRD_WEB_NET"
295
+
296
+ When I run `elevage list prod`
297
+ Then the exit status should be 0
298
+ And the output should contain "vlanid: PRD_WEB_NET"
299
+ And the output should contain "cpu: 2"
300
+ And the output should contain "datacenter: WCDC Prod"
301
+ And the output should contain "runlist: role[loc_uswest],role[base],role[api]"
302
+
303
+ When I run `elevage list prod -n`
304
+ Then the exit status should be 0
305
+ And the output should contain "10.119.161.137"
306
+ And the output should contain "prod-email-01w.app.corp.local"
307
+
308
+ When I run `elevage list int -n`
309
+ Then the exit status should be 0
310
+ And the output should contain "10.10.161.53"
311
+ And the output should contain "int-email-01w.app.dev.corp.local"
312
+
313
+ When I run `elevage list random`
314
+ Then the exit status should be 1
315
+ And the output should contain "unknown LIST command"
@@ -0,0 +1,68 @@
1
+ Feature: creating NEW platform definition files
2
+
3
+ As an Infracoder developing a command line tool
4
+ I want to test the accuracy of the files and folders created by the NEW command
5
+ In order to maintain the health of the elevage generator commands
6
+
7
+ Scenario: generating new platform
8
+
9
+ When I run `elevage new app`
10
+ Then the following files should exist:
11
+ |platform.yml|
12
+ |infrastructure/vcenter.yml|
13
+ |infrastructure/compute.yml|
14
+ |infrastructure/network.yml|
15
+ And the file "platform.yml" should contain:
16
+ """
17
+ platform:
18
+ name: app
19
+ """
20
+ And the file "infrastructure/vcenter.yml" should contain:
21
+ """
22
+ vcenter:
23
+ """
24
+ And the file "infrastructure/network.yml" should contain:
25
+ """
26
+ network:
27
+ """
28
+ And the file "infrastructure/compute.yml" should contain:
29
+ """
30
+ compute:
31
+ """
32
+
33
+ Scenario: generating new platform called when platform already exists
34
+
35
+ Given a file named "platform.yml" with:
36
+ """
37
+ platform:
38
+ name: app
39
+ """
40
+ When I run `elevage new app`
41
+ Then the exit status should be 1
42
+ And the output should contain "elevage: platform files already exist!"
43
+
44
+ # Scenario: generating new platform with -chef option
45
+ #
46
+ # When I run `elevage new app -chef`
47
+ # Then the following files should exist:
48
+ # |app_definition/platform.yml|
49
+ # |app_definition/infrastructure/vcenter.yml|
50
+ # |app_definition/infrastructure/compute.yml|
51
+ # |app_definition/infrastructure/network.yml|
52
+ # And the file "app_definition/platform.yml" should contain:
53
+ # """
54
+ # platform:
55
+ # name: app
56
+ # """
57
+ # And the file "app_definition/infrastructure/vcenter.yml" should contain:
58
+ # """
59
+ # vcenter:
60
+ # """
61
+ # And the file "app_definition/infrastructure/network.yml" should contain:
62
+ # """
63
+ # network:
64
+ # """
65
+ # And the file "app_definition/infrastructure/compute.yml" should contain:
66
+ # """
67
+ # compute:
68
+ # """
@@ -0,0 +1,27 @@
1
+ # rubocop:disable LineLength, StringLiterals
2
+ When(/^I get general help for "([^"]*)"$/) do |app_name|
3
+ @app_name = app_name
4
+ step %(I run `#{app_name} --help`)
5
+ step %(I run `#{app_name}`)
6
+ end
7
+
8
+ Then(/^the banner should be present$/) do
9
+ step %(the output should match /elevage commands:/)
10
+ end
11
+
12
+ Then(/^the following commands should be documented:$/) do |options|
13
+ options.raw.each do |option|
14
+ step %(the command "#{option[0]}" should be documented)
15
+ end
16
+ end
17
+
18
+ Then(/^the command "([^"]*)" should be documented$/) do |options|
19
+ options.split(',').map(&:strip).each do |option|
20
+ step %(the output should match /\\s*#{Regexp.escape(option)}[\\s\\W]+\\w[\\s\\w][\\s\\w]+/)
21
+ end
22
+ end
23
+
24
+ Then(/^the output should display the version$/) do
25
+ step %(the output should match /\\d+\\.\\d+\\.\\d+/)
26
+ end
27
+ # rubocop:enable LineLength, StringLiterals
@@ -0,0 +1,9 @@
1
+ require 'aruba/cucumber'
2
+ require 'aruba/in_process'
3
+ require 'elevage/runner'
4
+ require 'coveralls'
5
+
6
+ Coveralls.wear!
7
+
8
+ Aruba::InProcess.main_class = Elevage::Runner
9
+ Aruba.process = Aruba::InProcess
@@ -0,0 +1,109 @@
1
+ require 'thor/group'
2
+
3
+ module Elevage
4
+ # Create new platform definition files and environments folder structure
5
+ class Build < Thor::Group
6
+ include Thor::Actions
7
+
8
+ # Build subcommand arguments and options
9
+ # rubocop:disable LineLength
10
+ argument :env, type: :string, desc: DESC_BUILD
11
+ class_option :all, type: :boolean, aliases: '-a', desc: DESC_BUILD_ALL
12
+ class_option :tier, type: :string, aliases: '-t', desc: DESC_BUILD_TIER
13
+ class_option :component, type: :string, aliases: '-c', desc: DESC_BUILD_COMPONENT
14
+ class_option :node, type: :numeric, aliases: '-n', desc: DESC_BUILD_NODE
15
+ class_option :concurrency, type: :numeric, aliases: '-C', default: 8, desc: DESC_BUILD_CONCURRENCY
16
+ class_option :logfiles, type: :string, aliases: '-l', default: 'logs', desc: DESC_BUILD_LOGFILES
17
+ class_option :verbose, type: :boolean, aliases: '-v', default: false
18
+ # rubocop:enable LineLength
19
+
20
+ # dry-run
21
+ class_option 'dry-run', type: :boolean, desc: DESC_BUILD_DRY_RUN
22
+
23
+ # Additional options for passing to the knife command
24
+ # rubocop:disable LineLength
25
+ class_option 'vsuser', default: 'svc_provisioner', type: :string, desc: DESC_BUILD_VSUSER
26
+ class_option 'vspass', default: 'changeme', type: :string, desc: DESC_BUILD_VSPASS
27
+ class_option 'ssh-user', default: 'knife', type: :string, aliases: '-x', desc: DESC_BUILD_SSH_USER
28
+ class_option 'ssh-key', default: 'knife_rsa', type: :string, aliases: '-i', desc: DESC_BUILD_SSH_KEY
29
+ class_option 'template-file', default: 'chef-full.erb', type: :string, aliases: '-t', desc: DESC_BUILD_TEMPLATE_FILE
30
+ class_option 'bootstrap-version', default: '11.4.0', type: :string, aliases: '-b', desc: DESC_BUILD_BOOTSTRAP_VERSION
31
+ # rubocop:enable LineLength
32
+
33
+ def self.source_root
34
+ File.dirname(__FILE__)
35
+ end
36
+
37
+ # rubocop:disable MethodLength, LineLength, CyclomaticComplexity, PerceivedComplexity
38
+ def build
39
+ # Make the logfile directory if it doesn't exist
40
+ Dir.mkdir(options[:logfiles]) unless Dir.exist?(options[:logfiles])
41
+
42
+ # Fetch the environment and make sure it passes basic health checks
43
+ @environment = Elevage::Environment.new(env)
44
+ fail(IOError) unless @environment.healthy?
45
+
46
+ # =============================================================
47
+ # Option sanity checking.
48
+ #
49
+ # What are we going to reject as invalid options?
50
+ #
51
+ if options[:all] && options[:tier] || options[:all] && options[:component] || options[:tier] && options[:component]
52
+ warn 'The --all, --tier and --component options may not be specified together.'
53
+ exit false
54
+ end
55
+
56
+ if options[:node] && !options[:component]
57
+ warn 'When requesting a --node you must specify which --component.'
58
+ exit false
59
+ end
60
+
61
+ unless options[:all] || options[:tier] || options[:component]
62
+ warn 'You must specify one of --all, --tier=<tier>, or --component=<component>'
63
+ exit false
64
+ end
65
+
66
+ # Determine what, exactly, we're supposed to build
67
+ if options[:all]
68
+ # =============================================================
69
+ # Build ALL THE THINGS!
70
+ #
71
+ @environment.provision(type: :all,
72
+ options: options)
73
+
74
+ elsif options[:tier]
75
+ # =============================================================
76
+ # Build most of the things...
77
+ #
78
+ if options[:tier].eql?('tier')
79
+ warn 'Was asked to build a tier, but was not told which one!'
80
+ exit false
81
+ end
82
+ @environment.provision(type: :tier,
83
+ tier: options[:tier],
84
+ options: options)
85
+
86
+ elsif options[:component]
87
+ # =============================================================
88
+ # Build a few things...
89
+ #
90
+ if options[:component].eql?('component')
91
+ warn 'Was asked to build a component, but was not told which one!'
92
+ exit false
93
+ end
94
+ # See if we're actually only supposed to build just one thing...
95
+ if options[:node]
96
+ @environment.provision(type: :node,
97
+ component: options[:component],
98
+ instance: options[:node],
99
+ options: options)
100
+ else
101
+ @environment.provision(type: :component,
102
+ component: options[:component],
103
+ options: options)
104
+ end
105
+ end
106
+ end
107
+ # rubocop:enable MethodLength, LineLength, CyclomaticComplexity, PerceivedComplexity
108
+ end
109
+ end
@@ -0,0 +1,113 @@
1
+ # rubocop:disable LineLength, StringLiterals
2
+ module Elevage
3
+ # options description messages
4
+ # DESC_followed by command and the description
5
+ DESC_VERSION = 'Display installed elevage gem version (Can also use -v)'
6
+ DESC_NEW = 'Prepare new platform files and folder structure at current location'
7
+ DESC_LIST = 'List ITEMs from platform desired state yml files'
8
+ DESC_LIST_NODES = 'used with environment name to list node names and ip addresses'
9
+ DESC_HEALTH = 'Health check of the Platform desired state yml files'
10
+ DESC_GENERATE = 'Generate new environment file based on platform template'
11
+ DESC_BUILD = 'Provision vms in an environment definition'
12
+ DESC_BUILD_DRY_RUN = 'Do not actually do anything, just display the commands that would be run.'
13
+ DESC_BUILD_ENV = 'Name of the platform environment to provision'
14
+ DESC_BUILD_USER = 'User name for vSphere'
15
+ DESC_BUILD_PASSWD = 'Password for vSphere'
16
+ DESC_BUILD_ALL = 'Build everything for the named environment'
17
+ DESC_BUILD_TIER = 'Build everything for the specified tier in the named environment'
18
+ DESC_BUILD_COMPONENT = 'Build all nodes for the specified component'
19
+ DESC_BUILD_NODE = 'Build the single specified node'
20
+ DESC_BUILD_VSUSER = 'Username for vSphere'
21
+ DESC_BUILD_VSPASS = 'Password for vSphere'
22
+ DESC_BUILD_SSH_USER = 'Unix username for ssh for chef-client bootstrap (must have sudo NOPASSWD access for root)'
23
+ DESC_BUILD_SSH_KEY = 'Path to SSH private key for ssh username for key-based authentication'
24
+ DESC_BUILD_TEMPLATE_FILE = 'File to be used as the chef-client bootstrap template script'
25
+ DESC_BUILD_BOOTSTRAP_VERSION = 'Version of chef-client to bootstrap on node'
26
+ DESC_BUILD_CONCURRENCY = 'Maximum number of simultaneous provisioning tasks'
27
+ DESC_BUILD_LOGFILES = 'Path where log files should be written'
28
+
29
+ # available List commands
30
+ LIST_CMDS = %w(environments tiers pools components network vcenter compute)
31
+
32
+ # Health check range settings
33
+ TIMEZONE_LIMIT = 159
34
+ CPU_LIMIT = 16
35
+ RAM_LIMIT = 128
36
+ POOL_LIMIT = 256
37
+
38
+ # Health check messages
39
+ MSG_HEALTHY = 'All base platform desired state files created and syntactically correct'
40
+ MSG_ENV_HEALTHY = ' specific definition yml syntactically correct'
41
+ MSG = {
42
+ empty_environments: "Empty environment definitions\n",
43
+ empty_tiers: "Empty tier definitions\n",
44
+ empty_nodenameconvention: "Empty nodenameconvention definitions\n",
45
+ pool_count_size: "Must define 1 or more nodes in a pool\n",
46
+ invalid_tiers: "Pool contains invalid tier reference\n",
47
+ no_image_ref: "No vm image referenced in pool definition\n",
48
+ invalid_compute: "Pool contains invalid compute reference\n",
49
+ invalid_port: "Pool contains invalid port definition\n",
50
+ invalid_runlist: "No pool runlist definition\n",
51
+ invalid_componentrole: "Pool Componentrole missing #\n",
52
+ invalid_geo: "no vCenter geo defined\n",
53
+ invalid_timezone: "Invalid vCenter timezone\n",
54
+ invalid_host: "vCenter host not accessible\n",
55
+ invalid_datacenter: "No datacenter defined for vCenter\n",
56
+ invalid_imagefolder: "No image location defined for vCenter build\n",
57
+ invalid_destfolder: "No destination folder defined for vCenter build\n",
58
+ invalid_appendenv: "Append environment to destination folder must be true or false\n",
59
+ invalid_appenddomain: "prepend app name to domain must be true or false\n",
60
+ empty_datastores: "No data stores defined for vCenter build\n",
61
+ invalid_domain: "No domain defined for node fqdn\n",
62
+ invalid_ip: "Invalid IP's defined for DNS lookup\n",
63
+ empty_network: "Empty Network defintions\n",
64
+ invalid_gateway: "Invalid gateway defined in network\n",
65
+ invalid_cpu: "Invalid compute cpu settings\n",
66
+ invalid_ram: "Invalid compute ram settings\n",
67
+ invalid_env_vcenter: "Environment contains invalid vcenter definition\n",
68
+ invalid_env_network: "Environment contains invalid network definition\n",
69
+ invalid_env_count: "Environment contains invalid number of nodes in pool\n",
70
+ invalid_env_compute: "Environment component pool contains invalid compute definition\n",
71
+ invalid_env_ip: "Environment component pool contains invalid or missing ip address definition\n",
72
+ invalid_env_tier: "Environment component pool contains invalid tier definition\n",
73
+ invalid_env_image: "Environment component pool contains invalid image definition\n",
74
+ invalid_env_port: "Environment component pool contains invalid port definition\n",
75
+ invalid_env_runlist: "Environment component pool contains invalid runlist specification\n",
76
+ invalid_env_componentrole: "Environment component pool contains invalid componentrole definition\n",
77
+ env_component_mismatch: "Environment components do not match platform definition\n"
78
+ }
79
+
80
+ # Templates
81
+ TEMPLATE_PLATFORM = 'templates/platform.yml.tt'
82
+ TEMPLATE_VCENTER = 'templates/vcenter.yml.tt'
83
+ TEMPLATE_NETWORK = 'templates/network.yml.tt'
84
+ TEMPLATE_COMPUTE = 'templates/compute.yml.tt'
85
+ TEMPLATE_ENV = 'templates/environment.yml.tt'
86
+
87
+ # filename defaults
88
+ YML_PLATFORM = 'platform.yml'
89
+ YML_VCENTER = 'infrastructure/vcenter.yml'
90
+ YML_NETWORK = 'infrastructure/network.yml'
91
+ YML_COMPUTE = 'infrastructure/compute.yml'
92
+ ENV_FOLDER = 'environments/'
93
+
94
+ # Build defaults
95
+ BUILD_CONCURRENT_DEFAULT = 4
96
+ BUILD_CHILD_WAIT_TIMEOUT = 0.5
97
+ BUILD_STATUS_INTERVAL = 60
98
+
99
+ # error messages
100
+ ERR = {
101
+ platform_exists: 'elevage: platform files already exist!',
102
+ not_list_cmd: 'elevage: used an unknown LIST command',
103
+ no_platform_file: 'elevage: platform.yml file not found!',
104
+ no_vcenter_file: 'elevage: infastructure/vcenter.yml file not found!',
105
+ no_network_file: 'elevage: infastructure/network.yml file not found!',
106
+ no_compute_file: 'elevage: infastructure/compute.yml file not found!',
107
+ env_exists: 'elevage: environment file already exists!',
108
+ env_not_defined: 'elevage: environment file not defined in platform',
109
+ no_env_file: 'elevage: Environment file in platform.yml not found',
110
+ fail_health_check: 'elevage: health check revealed errors'
111
+ }
112
+ end
113
+ # rubocop:enable LineLength, StringLiterals