forj 0.0.48 → 1.0.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.
data/lib/defaults.yaml CHANGED
@@ -31,7 +31,7 @@
31
31
  :ports: [22, 80, 443, 3000, 3131-3135, 4505-4506, 5000, 5666, 8000, 8080-8081, 8083, 8125, 8139-8140, 8773-8776, 9292, 29418, 35357]
32
32
 
33
33
  # Private key file path. Those files (private/public key) will be added to ~/.forj/keypairs/ as respectively 'keypair_name' and 'keypair_name'.pub
34
- :keypair_path: ~/.ssh/forj-id_rsa
34
+ :keypair_files: ~/.ssh/forj-id_rsa
35
35
  :keypair_name: forj
36
36
 
37
37
  # Network: If network doesn't exist, forj cli will try to create it, and attach it a router.
@@ -43,6 +43,8 @@
43
43
  :box_name: maestro
44
44
 
45
45
  :provider_name: hpcloud
46
+
47
+ :maestro_bootstrap_dir: build/maestro/bootstrap
46
48
  :description:
47
49
  # Description of build.sh environment variable defined by forj cli for build.sh. (~/.forj/infra/build/<Account>.build.env)
48
50
  :FORJ_HPC: "HPCloud cli Account used to build your Maestro box"
@@ -63,6 +65,14 @@
63
65
  # It defines the account file structure. section/key=value
64
66
  # All data can be predefined by default value (config.yaml/defaults.yaml) except
65
67
  # those identified by :account_exclusive: true
68
+ :setup:
69
+ :ask_step:
70
+ - :desc: "Provider configuration:"
71
+ - :desc: "Maestro Cloud compute configuration:"
72
+ - :desc: "Maestro and blueprint configuration:"
73
+ :add:
74
+ - :keypair_files
75
+ - :desc: "DNS Configuration for Maestro:"
66
76
  :sections:
67
77
  # This section define updatable data available from config.yaml. But will never be added in an account file.
68
78
  # Used by forj set/get functions
@@ -89,71 +99,119 @@
89
99
  :desc: "Generic service identification for compute"
90
100
  :account_exclusive: true
91
101
  :account: true
102
+ :ask_step: 0
92
103
  :network:
93
104
  :desc: "Generic service identification for network"
94
105
  :account_exclusive: true
95
106
  :account: true
107
+ :ask_step: 0
96
108
 
97
109
  # Defines ssh keys credentials
98
110
  :credentials:
111
+ :keypair_files:
112
+ :explanation: |-
113
+ A keypair is a combination of SSH public and private key files. Usually, generated in your '$HOME/.ssh/' directory.
114
+ The private key is used to identify yourself to access your box via ssh.
115
+ The public key is used to configure your server to authorize you to access the box with your private key.
116
+ This keypair files will be copied to '$HOME/.forj/keypairs/ under <keypair_name> files for 'forj' needs.
117
+
118
+ If the keypair does exists locally, it will be created for you.
119
+ :desc: "Base keypair file name"
120
+ :default_value: "~/.ssh/id_rsa-forj"
121
+ :validate_function: :forj_check_keypairs_files
122
+ :account: true
123
+ :ask_step: 2
124
+ :after: :keypair_name
125
+ :post_step_function: :forj_setup_keypairs_files
99
126
  :keypair_path:
100
- :desc: "public key file to send to the cloud under keypair name, and private key to keep on your local forj environment to access your boxes."
127
+ :desc: "Forj internal copy of private and public key pair files "
101
128
  :keypair_name:
102
- :desc: "keypair name defined in your cloud to access your server. By default we named it 'forj'. If it doesn't exist, it will be created."
129
+ :desc: "keypair name defined in your cloud to access your server. By default we named it 'forj'. If it doesn't exist, it will be created."
130
+ :validate: !ruby/regexp /^\w?\w*$/
131
+ :default_value: "forj"
132
+ :account: true
133
+ :ask_step: 2
103
134
  :auth_uri:
104
- :desc: "Generic service auth url"
105
- :account_exclusive: true
106
- :account: true
107
- :required: true
108
- :ask_sort: 0
135
+ :desc: "Generic service auth url"
136
+ :account_exclusive: true
137
+ :account: true
138
+ :required: true
139
+ :ask_sort: 0
109
140
  :account_id:
110
- :desc: "Generic Cloud Account name."
111
- :account_exclusive: true
112
- :account: true
113
- :required: true
141
+ :desc: "Generic Cloud Account name."
142
+ :account_exclusive: true
143
+ :account: true
144
+ :required: true
114
145
  :account_key:
115
- :desc: "Generic cloud account key"
116
- :account_exclusive: true
117
- :account: true
118
- :required: true
146
+ :desc: "Generic cloud account key"
147
+ :account_exclusive: true
148
+ :account: true
149
+ :required: true
119
150
  :tenant:
120
- :desc: "Generic Tenant identification"
121
- :account_exclusive: true
122
- :account: true
123
- :required: true
151
+ :explanation: |-
152
+
153
+ Maestro is currently configured to access your cloud Compute service with fog openstack.
154
+ Fog openstack is compatible with hpcloud services
155
+
156
+ It requires the openstack project name to use, user and password.
157
+
158
+ :desc: "Openstack Tenant name"
159
+ :account_exclusive: true
160
+ :account: true
161
+ :required: true
162
+ :ask_step: 1
124
163
  :os_user:
125
- :desc: "User name required by Maestro to access the cloud compute via openstack. Will be obsoleted soon."
126
- :account_exclusive: true
127
- :account: true
128
- :required: true
129
- :validate: !ruby/regexp /\w+/
164
+ :desc: "Openstack compute cloud User name"
165
+ :account_exclusive: true
166
+ :account: true
167
+ :required: true
168
+ :validate: !ruby/regexp /\w+/
169
+ :ask_step: 1
130
170
  :os_enckey:
131
- :desc: "Encrypted password required by Maestro to access the cloud compute via openstack. Will be obsoleted soon."
132
- :account_exclusive: true
133
- :encrypted: true
134
- :account: true
135
- :required: true
171
+ :desc: "Openstack compute cloud password"
172
+ :account_exclusive: true
173
+ :encrypted: true
174
+ :account: true
175
+ :required: true
176
+ :ask_step: 1
136
177
 
137
178
  # Defines DNS services for maestro
138
179
  :dns:
139
- :service:
140
- :desc: "DNS service region name Maestro will use."
141
- :account_exclusive: true
142
- :tenant_id:
143
- :desc: "DNS Tenant ID Maestro will use"
144
- :account_exclusive: true
145
- :domain_name:
146
- :desc: "Domain name added to each hosts."
147
- :account_exclusive: true
180
+ :domain_name:
181
+ :desc: "Domain name added to each hosts."
182
+ :account_exclusive: true
183
+ :account: true
184
+ :post_step_function: :forj_DNS_settings
185
+ :ask_step: 3
186
+ :dns_service:
187
+ :desc: "DNS service region name Maestro will use."
188
+ :account_exclusive: true
189
+ :account: true
190
+ :pre_step_function: :forj_DNS_settings?
191
+ :ask_step: 3
192
+ :dns_tenant_id:
193
+ :desc: "DNS Tenant ID Maestro will use"
194
+ :account_exclusive: true
195
+ :account: true
196
+ :pre_step_function: :forj_DNS_settings?
197
+ :ask_step: 3
148
198
 
149
199
  :maestro:
150
200
  :tenant_name:
151
- :desc: "Tenant name required by fog/openstack on gardener"
201
+ :desc: "Tenant name required by fog/openstack on gardener"
152
202
  :network_name:
153
- :desc: "Network name to attach to each forge boxes. By default we use 'forj'. If it doesn't exist, it will be created."
154
- :default: network
203
+ :desc: "Network name to attach to each forge boxes. By default we use 'forj'. If it doesn't exist, it will be created."
204
+ :default: network
205
+ :account: true
206
+ :validate: !ruby/regexp /^\w?\w*$/
207
+ :default_value: "forj"
208
+ :ask_step: 2
155
209
  :security_group:
156
- :desc: "Security group name to configure and attach to each forge boxes."
210
+ :desc: "Security group name to configure and attach to each forge boxes."
211
+ :account: true
212
+ :validate: !ruby/regexp /^\w?\w*$/
213
+ :default_value: "forj"
214
+ :ask_step: 2
157
215
  :maestro_repo:
158
216
  :desc: "To use a different Maestro repository already cloned."
159
217
  :infra_repo:
@@ -164,12 +222,38 @@
164
222
  :desc: "forj cli use 'build.sh' to create Maestro. See build_config option on build.sh to get more information. By default 'box'"
165
223
  :bp_flavor:
166
224
  :desc: "Blueprint nodes default flavor. Usually, blueprint node are smaller than Maestro."
225
+ :account: true
226
+ :list_values:
227
+ :query_type: :query_call # Will execute a query on flavor, query_params is empty for all.
228
+ :object: :flavor
229
+ :value: :name
230
+ :validate: :list_strict
231
+ :ask_step: 2
167
232
  :flavor_name:
168
233
  :desc: "Maestro Flavor name. This flavor is for Maestro only. Your blueprint layout defines each node flavors on needs."
169
234
  :default: :flavor
235
+ :account: true
236
+ :list_values:
237
+ :query_type: :query_call # Will execute a query on flavor, query_params is empty for all.
238
+ :object: :flavor
239
+ :value: :name
240
+ :validate: :list_strict
241
+ :ask_step: 2
170
242
  :image_name:
171
- :desc: "Image used to create Maestro and all forge boxes. By default, it is 'Ubuntu Precise 12.04.4 LTS Server 64-bit 20140414 (Rescue Image)'"
243
+ :desc: "Ubuntu image used to create Maestro and all forge boxes. By default, it is 'Ubuntu Precise 12.04.4 LTS Server 64-bit 20140414 (Rescue Image)'"
244
+ :account: true
245
+ :ask_step: 2
246
+ :list_values:
247
+ :query_type: :query_call # Will execute a query on flavor, query_params is empty for all. No filter currently working.
248
+ :object: :image
249
+ :value: :name
250
+ :validate: :list_strict
251
+ :ask_step: 2
172
252
  :ports:
173
- :desc: "List of security group rules (1 port or range of ports) to open to the external network."
253
+ :desc: "List of security group rules (1 port or range of ports) to open to the external network."
174
254
  :branch:
175
- :desc: "Branch to use to build your forge"
255
+ :desc: "Branch to use to build your forge"
256
+ :bootstrap_dirs:
257
+ :desc: "Additional bootstrap directories (separated by space) to add in the bootstrap loop."
258
+ :bootstrap_extra_dir:
259
+ :desc: "Additional bootstrap directory to add in the bootstrap loop, before :bootstrap_dirs and after maestro default bootstrap directory."
data/lib/down.rb CHANGED
@@ -20,8 +20,6 @@ require 'require_relative'
20
20
 
21
21
  require_relative 'network.rb'
22
22
  include Network
23
- require_relative 'yaml_parse.rb'
24
- include YamlParse
25
23
  require_relative 'security.rb'
26
24
  include SecurityGroup
27
25
  #require_relative 'log.rb'
@@ -48,7 +46,7 @@ module Down
48
46
  #~ router = Network.get_router(oFC, 'private-ext')
49
47
  #~ subnet = Network.get_subnet(oFC, name)
50
48
  #~ Network.delete_router_interface(subnet.id, router)
51
- #~
49
+ #~
52
50
  #~ Network.delete_subnet(oFC, subnet.id)
53
51
  #~ network = Network.get_network(oFC, name)
54
52
  #~ Network.delete_network(oFC, network.name)
@@ -14,3 +14,25 @@
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
+
18
+ # Defines how cli will control FORJ features
19
+ # boot/down/ssh/...
20
+
21
+ # Define framework object on BaseDefinition
22
+ # See lib/core/definition.rb for function details usage.
23
+
24
+ class ForjCliProcess
25
+ def connect_to(sObjectType, hParams)
26
+ end
27
+ end
28
+
29
+ class BaseDefinition
30
+
31
+ define_obj :box_ssh,
32
+ {
33
+ :create_e => :connect_to
34
+ }
35
+ obj_needs :CloudObject, :forge
36
+ obj_needs :data, :box_name
37
+
38
+ end
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ # Defines how to manage Maestro and forges
19
+ # create a maestro box. Identify a forge instance, delete it,...
20
+
21
+ # Define framework object on BaseDefinition
22
+ # See lib/core/definition.rb for function details usage.
23
+
24
+ $FORJCORE_PATH = File.expand_path(File.dirname(__FILE__))
25
+
26
+ require File.join($FORJCORE_PATH, "process", "ForjProcess.rb")
27
+
28
+ class BaseDefinition
29
+
30
+ process_default :use_controller => false
31
+
32
+ # ******************* Maestro Repository object
33
+ define_obj :maestro_repository,
34
+ {
35
+ :create_e => :clone_or_use_maestro_repo
36
+ }
37
+
38
+ obj_needs :data, :maestro_url
39
+
40
+ obj_needs_optional
41
+ obj_needs :data, :maestro_repo
42
+
43
+ # ******************* Infra Repository object
44
+ define_obj :infra_repository,
45
+ {
46
+ :create_e => :create_or_use_infra
47
+ }
48
+
49
+ obj_needs :CloudObject, :maestro_repository
50
+ obj_needs :data, :infra_repo
51
+ obj_needs :data, :branch
52
+
53
+ # ******************* metadata object
54
+ define_obj :metadata,
55
+ {
56
+ :create_e => :build_metadata
57
+ }
58
+
59
+ obj_needs :data, :instance_name
60
+ obj_needs :data, :network_name
61
+ obj_needs :data, :security_group
62
+ obj_needs :data, :keypair_name
63
+ obj_needs :data, :image_name
64
+ obj_needs :data, :bp_flavor
65
+ obj_needs :data, :compute
66
+ obj_needs :data, :branch
67
+ obj_needs :data, :domain_name
68
+ obj_needs :data, :tenant_name
69
+ # sent in base64
70
+ obj_needs :data, :os_user
71
+ obj_needs :data, :os_enckey
72
+ obj_needs :data, :account_id
73
+ obj_needs :data, :account_key
74
+ obj_needs_optional
75
+
76
+ # If requested by user, ask Maestro to manage the DNS.
77
+ obj_needs :data, :dns_service
78
+ obj_needs :data, :dns_tenant_id
79
+
80
+ # If requested by user, ask Maestro to instantiate a blueprint.
81
+ obj_needs :data, :blueprint
82
+ # Add init bootstrap additional steps
83
+ obj_needs :data, :bootstrap
84
+ # Add init additional git clone steps.
85
+ obj_needs :data, :repos
86
+
87
+ # ******************* userdata object
88
+ define_obj :userdata,
89
+ {
90
+ :create_e => :build_userdata
91
+ }
92
+
93
+ obj_needs :CloudObject, :maestro_repository
94
+ obj_needs :CloudObject, :metadata
95
+ obj_needs :CloudObject, :infra_repository
96
+
97
+ # ******************* forge object
98
+ define_obj :forge,
99
+ {
100
+ :create_e => :build_forge
101
+ # :delete_e => :drop_forge
102
+ }
103
+ obj_needs :CloudObject, :metadata
104
+ obj_needs :CloudObject, :userdata
105
+ obj_needs :data, :instance_name
106
+
107
+ obj_needs_optional
108
+ obj_needs :CloudObject, :server
109
+ obj_needs :data, :blueprint
110
+
111
+ end