forj 1.0.3 → 1.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4a1fe0343f80a945b67a3f98b10b7f2b2f9c135
4
- data.tar.gz: dcaee3a1b90afe832babe588437cdfdeab38a4cc
3
+ metadata.gz: 502bfc6edeb25b5ff031e55b707cb8c27800dcea
4
+ data.tar.gz: a58602925d8e68d05907eb3834d959e46b080bf1
5
5
  SHA512:
6
- metadata.gz: 5de9a2ff618c7eb3f1c353a9245b950fa4f2606490d7577eec61ff17841819c5f2b3d1a5a93582356c95d4b62f8f163759b3035f8b1e47664466bcd691086ce9
7
- data.tar.gz: 17f9f2bfe2e7dd40ae4b7f297a75e0c0b99ccdc1bfadf5cee980ec094e2b7476813bc01715816786ec21128b72a9c49d28db207b4c7a27ca954e763ee5e15776
6
+ metadata.gz: f6112e2d51cf46da0c29b44be1221135c8cff7b6cb631725c4c3bbc8204242b61f107865673cfa7ca8f242ffb136ad8a0af9079df0548b404ac7b06be96c42f0
7
+ data.tar.gz: 895f7bc30b598051e49612b21b54a3ded559dd06556a3475b131367ada6490c7da02604c53f9a20228fbcb078a85aae1b0f61734bdfb20a0bbe170ee7da0c0b1
data/.rubocop.yml ADDED
@@ -0,0 +1,59 @@
1
+ # Copyright 2013 Hewlett-Packard Development Company, L.P.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # use: rubocop --show-cops
16
+ # to validate configuration.
17
+ # rubocop config
18
+ AllCops:
19
+ Include:
20
+ - '**/Rakefile'
21
+ - '**/config.ru'
22
+ Exclude:
23
+ - 'docker/**/*'
24
+ - 'bin/scripts/**/*'
25
+ - 'git/**/*'
26
+ - 'tmp/**/*'
27
+ #Documentation:
28
+ # Enabled: false
29
+ #Metrics/LineLength:
30
+ # Max: 99
31
+ Style/HashSyntax:
32
+ EnforcedStyle: hash_rockets
33
+
34
+ # lets start with 40, but 10 is way to small..
35
+ Metrics/MethodLength:
36
+ Max: 40
37
+ # allow arguments to be longer than 15
38
+ Metrics/AbcSize:
39
+ Max: 40
40
+ # allow nested methods and classes definition
41
+ ClassAndModuleChildren:
42
+ # EnforcedStyle: compact
43
+ Enabled: false
44
+
45
+ # some files names gets an exception
46
+ Style/FileName:
47
+ Exclude: ['Gemfile',
48
+ 'lib/forj/process/ForjProcess.rb',
49
+ 'lib/forj/ForjCore.rb',
50
+ 'lib/forj/ForjCli.rb',
51
+ 'lib/forj-settings.rb' ]
52
+
53
+ # this project defines these globals
54
+ Style/GlobalVars:
55
+ AllowedVariables: ['$RT_GEM_BIN',
56
+ '$RT_VERSION_SPEC',
57
+ '$FORJ_TEMP',
58
+ '$RT_VERSION',
59
+ '$RT_GEM_HOME']
data/Gemfile CHANGED
@@ -18,24 +18,23 @@
18
18
  source 'https://rubygems.org'
19
19
 
20
20
  gemspec
21
- #group(:development, :test) do
21
+ # group(:development, :test) do
22
22
  # gem 'rake'
23
23
  # gem 'debugger'
24
24
  # gem 'byebug'
25
25
  # gem 'rspec', "~> 3.1.0", :require => false
26
- #end
26
+ # end
27
27
 
28
28
  # if updating here, update forj.gemspec as well, to be coherent.
29
- #gem 'mime-types','1.25.1'
30
- #gem 'excon','0.31.0'
31
- #gem 'json','1.7.5'
32
- #gem 'nokogiri','1.5.11'
33
- #gem 'fog', '1.19.0'
34
- #gem 'git', '>=1.2.7'
35
- #gem 'rainbow'
36
- #gem 'thor', '>=0.16.0'
37
- #gem 'highline','>=1.6.21'
38
- #gem 'ansi','>=1.4.3'
39
- #gem 'encryptor','>=1.3.0'
40
- #gem 'bundler', '1.7.3'
41
-
29
+ # gem 'mime-types','1.25.1'
30
+ # gem 'excon','0.31.0'
31
+ # gem 'json','1.7.5'
32
+ # gem 'nokogiri','1.5.11'
33
+ # gem 'fog', '1.19.0'
34
+ # gem 'git', '>=1.2.7'
35
+ # gem 'rainbow'
36
+ # gem 'thor', '>=0.16.0'
37
+ # gem 'highline','>=1.6.21'
38
+ # gem 'ansi','>=1.4.3'
39
+ # gem 'encryptor','>=1.3.0'
40
+ # gem 'bundler', '1.7.3'
data/Rakefile CHANGED
@@ -15,17 +15,25 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- require 'rubygems'
19
- require 'bundler/setup'
18
+ require 'bundler/gem_tasks'
20
19
  require 'rspec/core/rake_task'
20
+ require 'rubocop/rake_task'
21
21
 
22
22
  $stdout.sync = true
23
23
  $stderr.sync = true
24
24
  Bundler::GemHelper.install_tasks
25
25
 
26
- task :default => [:spec]
26
+ task :default => [:lint, :spec]
27
27
 
28
28
  desc 'Run the specs.'
29
29
  RSpec::Core::RakeTask.new do |t|
30
30
  t.pattern = 'spec/*_spec.rb'
31
+ t.rspec_opts = '-f doc'
32
+ end
33
+
34
+ desc 'Run RuboCop on the project'
35
+ RuboCop::RakeTask.new(:lint) do |task|
36
+ task.formatters = ['progress']
37
+ task.verbose = true
38
+ task.fail_on_error = true
31
39
  end
data/bin/forj CHANGED
@@ -16,84 +16,84 @@
16
16
  # limitations under the License.
17
17
 
18
18
  require 'rubygems'
19
- #require 'debugger' # Use to debug with Ruby < 2.0
20
- #require 'byebug' # Use to debug with Ruby >= 2.0
19
+ # require 'debugger' # Use to debug with Ruby < 2.0
20
+ # require 'byebug' # Use to debug with Ruby >= 2.0
21
21
  require 'bundler/setup'
22
- #require 'require_relative'
23
22
  require 'thor'
24
23
  require 'ansi'
25
24
 
26
- $APP_PATH = File.dirname(File.dirname(__FILE__))
27
- $LIB_PATH = File.expand_path(File.join($APP_PATH, 'lib'))
25
+ APP_PATH = File.dirname(File.dirname(__FILE__))
26
+ LIB_PATH = File.expand_path(File.join(APP_PATH, 'lib'))
28
27
 
29
- require 'appinit.rb' # Load generic Application level function
28
+ require 'lorj'
29
+ PrcLib.app_name = 'forj'
30
+ PrcLib.app_defaults = File.join(APP_PATH, 'forj')
30
31
 
31
32
  # Initialize forj paths
32
- AppInit::forj_initialize()
33
-
34
- require 'lorj' # Use lorj library for Cloud agnostics feature.
35
-
36
- PrcLib.app_name = 'forj'
37
- PrcLib.app_defaults = File.join($APP_PATH, 'forj')
33
+ require 'appinit.rb' # Load Application settings features
34
+ Forj.keypairs_path = File.join(PrcLib.data_path, 'keypairs')
35
+ Forj.build_path = File.join(PrcLib.data_path, '.build')
38
36
 
39
37
  require 'forj-settings.rb' # Settings features
40
- require 'ssh.rb'
41
-
42
-
43
- $LIB_FORJ_DEBUG = 1 # less verbose
44
-
45
38
 
39
+ # This is the main Forj class
40
+ # it helps you to create and support your forge.
41
+ # rubocop:disable ClassLength
46
42
  class ForjThor < Thor
47
-
48
43
  class_option :debug, :aliases => '-d', :desc => 'Set debug mode'
49
44
  class_option :verbose, :aliases => '-v', :desc => 'Set verbose mode'
50
- class_option :config, :aliases => '-c', :desc => 'Path to a different forj config file. By default, use ~/.forj/config.yaml'
51
- class_option :lorj_debug, :desc => "Set lorj debug level verbosity. 1 to 5. Default is one."
52
-
53
-
54
- desc "help [action]", "Describe available FORJ actions or one specific action"
45
+ class_option :config, :aliases => '-c', :desc => 'Path to a different forj'\
46
+ ' config file. By default, use ~/.forj/config.yaml'
47
+ class_option :lorj_debug, :desc => 'Set lorj debug level verbosity. 1 to 5.'\
48
+ 'Default is one.'
49
+ desc 'help [action]', 'Describe available FORJ actions or one specific action'
55
50
  def help(task = nil, subcommand = false)
56
51
  if task
57
- self.class.task_help(shell, task)
52
+ self.class.task_help(shell, task)
58
53
  else
59
- puts <<-LONGDESC
54
+ puts <<-LONGDESC
60
55
  Quick steps: How to create a forj?
61
56
  ----------------------------------
62
57
 
63
58
  To test a forj blueprint, you will need an account on a cloud solution.
64
- Currently forj cli supports only HPHelion (https://horizon.hp.com) but will be expanded to support most of known clouds supported by FOG. (http://fog.io)
59
+ Currently forj cli supports only HPHelion (https://horizon.hp.com) but will
60
+ be expanded to support most of known clouds supported by FOG. (http://fog.io)
65
61
 
66
62
  1. Setup your FORJ account.
67
63
  `$ forj setup [AccountName] [--provider Provider]`
68
64
 
69
- Ex: `forj setup MyForjAccount`. In this example, you will setup 'MyForjAccount' with your HPHelion account. The first time, this account will become the default one.
65
+ Ex: `forj setup MyForjAccount`. In this example:
66
+ You will setup 'MyForjAccount' with your HPHelion account.
67
+ The first time, this account will become the default one.
70
68
 
71
- **IMPORTANT NOTE** By default, forj setup will propose you to create your forge on HPHelion (provider 'hpcloud').
72
- If AccountName is not set, the account name will be proposed to be name 'hpcloud' as well!
69
+ **IMPORTANT NOTE** By default, forj setup will propose you to create your forge
70
+ on HPHelion (provider 'hpcloud').
71
+ If AccountName is not set, the account name will be proposed to be name
72
+ 'hpcloud' as well!
73
73
 
74
74
  2. Create your forge on your default account
75
75
  `$ forj boot <blueprint> <InstanceName>`
76
76
 
77
- Ex: `forj boot redstone MyForge`. In this example, forj will create a `redstone` blueprint forge named `MyForge`, using the default `MyForjAccount`
77
+ Ex: `forj boot redstone MyForge`. In this example:
78
+ Forj will create a `redstone` blueprint forge named `MyForge`,
79
+ using the default `MyForjAccount`.
78
80
 
79
81
  forj command line details:
80
82
  --------------------------
81
83
  LONGDESC
82
- self.class.help(shell, subcommand)
84
+ self.class.help(shell, subcommand)
83
85
  end
84
86
  end
85
87
 
86
- desc 'version', 'get GEM version of forj.'
87
-
88
- def version()
89
- if Gem.loaded_specs['forj']
90
- puts Gem.loaded_specs['forj'].version.to_s
91
- end
92
- end
88
+ desc 'version', 'get GEM version of forj.'
93
89
 
90
+ def version
91
+ puts Gem.loaded_specs['forj'].version.to_s if Gem.loaded_specs['forj']
92
+ end
94
93
 
95
- ################################# BOOT
96
- desc 'boot <blueprint> <InstanceName> [options]', 'boot a Maestro box and instruct it to provision the blueprint'
94
+ ################################# BOOT
95
+ desc 'boot <blueprint> <InstanceName> [options]', 'boot a Maestro box and' \
96
+ ' instruct it to provision the blueprint'
97
97
 
98
98
  long_desc <<-LONGDESC
99
99
  This task boot a new forge with the following options
@@ -102,239 +102,147 @@ This task boot a new forge with the following options
102
102
 
103
103
  Ex: forj boot redstone maestro_test -a dev
104
104
 
105
- When `forj boot` starts, some variables are loaded. If you want to check/updated them, use `forj get [-a account]`
105
+ When `forj boot` starts, some variables are loaded.
106
+ If you want to check/updated them, use `forj get [-a account]`
106
107
 
107
108
  LONGDESC
108
109
 
109
- method_option :account_name, :aliases => '-a', :desc => "Set the forj account name to use. By default, uses the default account set in your local config file.
110
-
111
- Following options superseed your Account, config file or forj defaults."
112
- method_option :maestro_repo, :aliases => '-m', :desc => "config: maestro_repo : To use a different Maestro repository already cloned.
113
- By default, Maestro is systematically cloned to ~/.forj/maestro from github."
114
- method_option :infra, :aliases => '-r', :desc => 'config: infra_repo : Defines your Infra directory to use while booting. You can also set FORJ_INFRA_DIR.'
115
- method_option :key_name, :aliases => '-k', :desc => "config: keypair_name : Keypair name to use."
116
- method_option :key_path, :aliases => '-p', :desc => "config: keypair_path : Private or Public key file to use."
117
- method_option :security_group, :aliases => '-s', :desc => "config: security_group: Security group name to use and configure."
118
- method_option :image_name, :aliases => '-i', :desc => "config: image_name : Image name to use to build Maestro and blueprint nodes."
119
- method_option :maestro_flavor, :aliases => '-f', :desc => "config: flavor : Maestro flavor to use."
120
- method_option :bp_flavor, :aliases => '-b', :desc => "config: bp_flavor : Blueprint nodes default flavor to use.
121
-
122
- Build system options:"
123
- method_option :boothook, :aliases => '-H', :desc => 'By default, boothook file used is build/bin/build-tools/boothook.sh. Use this option to set another one.'
124
- method_option :build, :aliases => '-B', :desc => 'Replace the default build.sh'
125
- method_option :branch, :aliases => '-R', :desc => "Branch name to clone for maestro.
126
-
127
- Maestro/infra bootstrap debugging:"
128
- method_option :test_box, :aliases => '-T', :desc => "Identify a path to become your test-box repository.
129
- Ex: if your maestro is in ~/src/forj-oss, --test_box ~/src/forj-oss/maestro build.sh and
130
- test-box will send your local maestro repo to your box, for boot."
131
-
132
- def boot(blueprint, on_or_name, old_accountname = nil, as = nil, old_name = nil)
133
- Forj::Settings.common_options(options)
134
-
135
- oConfig = Lorj::Config.new(options[:config])
136
-
137
- # depreciated: <BluePrint> on <AccountName> as <InstanceName>
138
- if old_accountname and as and old_name
139
- msg = "The syntax `forj boot '%s' on '%s' as '%s'` is depreciated.\nUse `forj boot '%s' '%s'" % [blueprint, old_accountname, old_name, blueprint, old_name]
140
- if oConfig.get('account_name') == old_accountname
141
- PrcLib.warning("%s` instead." % msg)
142
- else
143
- PrcLib.warning("%s -a '%s'` instead." % [msg, old_accountname])
144
- end
145
- name = old_name
146
- oConfig.set(:account_name, old_accountname)
147
- else
148
- name = on_or_name
149
- end
150
-
151
- PrcLib.fatal( 1, "instance name '%s' not supported. Support only lower case, numeric and dash caracters." % [name]) if not (/^[\d[[:lower:]]-]+$/ =~ name)
152
-
153
- # Options are added if they are set. Otherwise, get will retrieve the default value.
154
- oConfig.set(:account_name, options[:account_name]) if options[:account_name]
155
- oForjAccount = Lorj::Account.new(oConfig)
156
- oForjAccount.ac_load()
157
-
158
- oConfig.set(:infra_repo, options[:infra])
159
- oConfig.set(:keypair_name, options[:key_name])
160
- oConfig.set(:keypair_path, options[:key_path])
161
- oConfig.set(:security_group, options[:security_group])
162
- oConfig.set(:image_name, options[:image_name])
163
- oConfig.set(:flavor, options[:maestro_flavor])
164
- oConfig.set(:bp_flavor, options[:bp_flavor])
165
- oConfig.set(:maestro_repo , options[:maestro_repo])
166
- oConfig.set(:branch , options[:branch])
167
- oConfig.set(:test_box, File.expand_path(options[:test_box])) if options[:test_box] and File.directory?(File.expand_path(options[:test_box]))
168
-
169
- PrcLib.warning("test_box is currently disabled in this version. It will be re-activated in newer version.") if options[:test_box]
170
-
171
- if options[:key_path]
172
- mFound = options[:key_path].match(/^(.*)(\.pub)?$/)
173
- if mFound
174
- key_path = File.expand_path(mFound[1])
175
- if mFound[2] and not File.exists?(File.expand_path(mFound[1]+mFound[2]))
176
- PrcLib.fatal(1, "'%s' is not a valid keypair files. At least the public key (.pub) is have to exist.")
177
- end
178
- oConfig.set(:keypair_path, key_path)
179
- else
180
- PrcLib.fatal(1, "'%s' is not a valid keypair files. At least the public key (.pub) is have to exist.")
181
- end
182
- end
183
- aProcesses = []
184
-
185
- # Defines how to manage Maestro and forges
186
- # create a maestro box. Identify a forge instance, delete it,...
187
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCore.rb')
188
-
189
- # Defines how cli will control FORJ features
190
- # boot/down/ssh/...
191
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCli.rb')
192
-
193
- #oCloud = ForjCloud.new(oForjAccount, oConfig[:account_name], aProcesses)
194
- oCloud = Lorj::CloudCore.new(oForjAccount, oConfig[:account_name], aProcesses)
195
-
196
- oConfig[:instance_name] = name
197
-
198
- if blueprint == 'maestro'
199
- PrcLib.info("Starting boot process of '%s'. No blueprint requested." % oConfig[:instance_name])
200
- else
201
- oConfig[:blueprint] = blueprint
202
- PrcLib.info("Starting boot process of '%s' with blueprint '%s'." % [oConfig[:instance_name], oConfig[:blueprint]])
203
- end
204
-
205
- PrcLib.high_level_msg ("Preparing your forge '%s'. Please be patient. more output in '%s'\n" % [oConfig[:instance_name], File.join($FORJ_DATA_PATH, "forj.log")])
206
-
207
- oCloud.Create(:forge)
110
+ method_option :account_name, :aliases => '-a', :desc => 'Set the forj' \
111
+ ' account name to use. By default, uses the default account set in' \
112
+ ' your local config file.' + "\n\n" + 'Following options superseed your' \
113
+ ' Account, config file or forj defaults.'
114
+ method_option :maestro_repo, :aliases => '-m', :desc => 'config: ' \
115
+ ' maestro_repo : To use a different Maestro repository already' \
116
+ ' cloned.' + "\n" + 'By default, Maestro is systematically cloned ' \
117
+ ' to ~/.forj/maestro from github.'
118
+ method_option :infra, :aliases => '-r', :desc => 'config:' \
119
+ ' infra_repo : Defines your Infra directory to use while' \
120
+ ' booting. You can also set FORJ_INFRA_DIR.'
121
+ method_option :key_name, :aliases => '-k', :desc => 'config:' \
122
+ ' keypair_name : Keypair name to use.'
123
+ method_option :key_path, :aliases => '-p', :desc => 'config:' \
124
+ ' keypair_path : Private or Public key file to use.'
125
+ method_option :security_group, :aliases => '-s', :desc => 'config:' \
126
+ ' security_group: Security group name to use and configure.'
127
+ method_option :image_name, :aliases => '-i', :desc => 'config:' \
128
+ ' image_name : Image name to use to build Maestro and blueprint nodes.'
129
+ method_option :maestro_flavor, :aliases => '-f', :desc => 'config:' \
130
+ ' flavor : Maestro flavor to use.'
131
+ method_option :bp_flavor, :aliases => '-b', :desc => 'config:' \
132
+ ' bp_flavor : Blueprint nodes default flavor to use.' \
133
+ + "\n\n" + ' Build system options:'
134
+ method_option :boothook, :aliases => '-H', :desc => 'By default, ' \
135
+ ' boothook file used is build/bin/build-tools/boothook.sh. ' \
136
+ ' Use this option to set another one.'
137
+ method_option :build, :aliases => '-B', :desc => 'Replace' \
138
+ ' the default build.sh'
139
+ method_option :branch, :aliases => '-R', :desc => 'Branch' \
140
+ 'name to clone for maestro.' \
141
+ + "\n\n" + 'Maestro/infra bootstrap debugging:'
142
+ method_option :test_box, :aliases => '-T', :desc => 'Identify a' \
143
+ ' path to become your test-box repository.' \
144
+ "\n " \
145
+ 'Ex: if your maestro is in ~/src/forj-oss, --test_box' \
146
+ ' ~/src/forj-oss/maestro build.sh and' \
147
+ "\n " \
148
+ 'test-box will send your local maestro repo to your box, for boot.'
149
+
150
+ def boot(blueprint, on_or_name, old_accountname = nil, as = nil,
151
+ old_name = nil)
152
+ Forj::Settings.common_options(options)
153
+ require 'boot.rb'
154
+
155
+ deprecated_name = [old_accountname, as, old_name]
156
+
157
+ Forj::Boot.boot(blueprint, on_or_name, deprecated_name, options)
208
158
  end
209
159
 
210
- ################################# Show defaults
211
- desc 'show <Object> [name]', 'Show Object (default valuesr, account data, etc...) values.'
160
+ ################################# Show defaults
212
161
  long_desc <<-LONGDESC
213
- This command helps to show values used by 'forj' to boot a blueprint (account data, default values, etc...)
162
+ This command helps to show values used by 'forj' to boot a blueprint
163
+ (account data, default values, etc...)
214
164
 
215
165
  queriable Objects:
216
166
 
217
- - defaults : Provide the list of predefined values, configured by forj, or by you in your ~/.forj/config.yaml (or another config file with -c)
218
- - account [name] : without name, forj will give you the list of account saved. Otherwise print 'name' account data.
167
+ - defaults : Provide the list of predefined values, configured by forj,
168
+ or by you in your ~/.forj/config.yaml (or another config file with -c)
169
+ - account [name] : without name, forj will give you the list of account saved.
170
+ Otherwise print 'name' account data.
219
171
  LONGDESC
220
-
221
- def show(object, name = nil)
222
- Settings.common_options(options)
223
-
224
- case object
225
- when 'defaults'
226
- oConfig=Lorj::Config.new()
227
-
228
- puts 'List of default values: (local refer to your config file. hash refer to your FORJ account data)'
229
- puts oConfig.default_dump().to_yaml
230
- puts '---'
231
- puts "To change default values, use 'forj get' to check valid keys, and update with 'forj set'"
232
- when 'account'
233
- oConfig=Lorj::Config.new()
234
- if not name
235
- puts "List of FORJ accounts: Use 'forj account YourAccount' to see one account details."
236
- oAccounts = ForjAccounts.new()
237
- puts oAccounts.dump().to_yaml
238
- else
239
- oConfig.set(:account_name, name)
240
- oAccount = ForjAccount.new(oConfig)
241
- oAccount.ac_load()
242
-
243
- puts "Account value for '%s':" % name
244
- puts oAccount.dump().to_yaml
245
- puts '---'
246
- puts "To change those values, execute 'forj setup -a %s'." % options[:account_name]
247
- end
248
-
249
- else
250
- PrcLib.error("object '%s' unknown." % name)
172
+ desc 'show <Object> [name]', 'Show Object (default valuesr, account data,' \
173
+ ' etc...) values.'
174
+ def show(object, name = nil)
175
+ Forj::Settings.common_options(options)
176
+
177
+ case object
178
+ when 'defaults'
179
+ o_config = Lorj::Account.new
180
+
181
+ puts 'List of default values: (local refer to your config file.' \
182
+ ' hash refer to your FORJ account data)'
183
+
184
+ dump = o_config.config_dump(%w(account local))
185
+ dump[:application] = o_config.config_dump(%w(default))[:default]
186
+ puts dump.to_yaml
187
+ puts '---'
188
+ puts "To change default values, use 'forj get' to check valid keys," \
189
+ " and update with 'forj set'"
190
+ when 'account'
191
+ unless name
192
+ puts "List of FORJ accounts: Use 'forj account YourAccount' " \
193
+ ' to see one account details.'
194
+ o_accounts = Lorj::Accounts.new
195
+ puts o_accounts.dump.to_yaml
196
+ return
251
197
  end
252
- end
253
-
254
- ################################# DESTROY
255
- desc 'destroy <InstanceName> [options]', 'delete the Maestro box and all systems installed by the blueprint'
256
- long_desc <<-LONGDESC
257
- This action destroy all servers found under the instance name and allow you to destroy all of them or just one of them.
258
-
259
- Warning! This action do not remove any network/security groups cloud object.
260
- LONGDESC
261
-
262
- method_option :force, :aliases => "-f", :desc => "force deletion of all servers for the given InstanceName"
263
-
264
- def destroy(name)
265
- Forj::Settings.common_options(options)
266
-
267
- oConfig = Lorj::Config.new(options[:config])
268
- oConfig.set(:account_name, options[:account_name]) if options[:account_name]
269
- oForjAccount = Lorj::Account.new(oConfig)
270
- oForjAccount.ac_load()
271
-
272
- aProcesses = []
273
-
274
- # Defines how to manage Maestro and forges
275
- # create a maestro box. Identify a forge instance, delete it,...
276
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCore.rb')
277
-
278
- # Defines how cli will control FORJ features
279
- # boot/down/ssh/...
280
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCli.rb')
281
-
282
- oCloud = Lorj::CloudCore.new(oForjAccount, oConfig[:account_name], aProcesses)
283
-
284
- oForge = oCloud.Get(:forge, name)
285
-
286
- if oForge[:servers].count > 0
198
+ o_config = Lorj::Account.new
199
+ o_config[:account_name] = name
287
200
 
288
- if options[:force]
289
- #Destroy all servers found
290
- oCloud.Delete(:forge)
291
- else
292
- #Ask the user to get server(s) to destroy
293
- serverList = []
294
- index = 0
201
+ PrcLib.fatal(1, "Unable to load the account '%s'",
202
+ name) unless o_config.ac_load o_config[:account_name]
295
203
 
296
- oForge[:servers].each{ |server|
297
- serverList[index] = server[:name]
298
- index = index + 1
299
- }
204
+ puts format("Account value for '%s':", name)
205
+ puts o_config.config_dump([%(account)]).to_yaml
206
+ puts '---'
207
+ puts format("To change those values, execute 'forj setup -a %s'.",
208
+ options[:account_name])
300
209
 
301
- serverList << "all"
302
- serverList << "esc"
303
-
304
- say("Select the index of the server you want to destroy")
305
- value = choose { | q |
306
- q.choices(*serverList)
307
- }
308
-
309
- oServerNumber = serverList.index(value)
310
-
311
- if oServerNumber >= 0 and oServerNumber < oForge[:servers].count
312
- #Destroy selected server
313
- oConfig.set(:forge_server, oForge[:servers][oServerNumber][:id] )
314
- oCloud.Delete(:forge)
315
- elsif oServerNumber == serverList.index("all")
316
- #Destroy all servers found
317
- oCloud.Delete(:forge)
318
- elsif oServerNumber == serverList.index("esc")
319
- #esc
320
- PrcLib.high_level_msg("No server destroyed on your demand.\n" % name )
321
- end
210
+ else
211
+ PrcLib.error("object '%s' unknown.", name)
212
+ end
213
+ end
322
214
 
323
- end
215
+ ################################# DESTROY
216
+ desc 'destroy <InstanceName> [options]', 'delete the Maestro box and all' \
217
+ ' systems installed by the blueprint'
218
+ long_desc <<-LONGDESC
219
+ This action destroy all servers found under the instance name and allow you
220
+ to destroy all of them or just one of them.
324
221
 
325
- else
326
- PrcLib.high_level_msg("No server(s) found on forge instance '%s'.\n" % name )
327
- end
222
+ Warning! This action do not remove any network/security groups cloud object.
223
+ LONGDESC
328
224
 
329
- end
225
+ method_option :force, :aliases => '-f', :desc => 'force deletion of all' \
226
+ ' servers for the given InstanceName'
227
+ def destroy(name)
228
+ require 'destroy.rb'
229
+ Forj::Settings.common_options(options)
230
+ Forj::Destroy.destroy(name, options)
231
+ end
330
232
 
331
- ################################# SET
332
- desc 'set [key=value] [...] [options]', 'Set one or more variables in defaults or a forj account.'
233
+ ################################# SET
234
+ desc 'set [key=value] [...] [options]', 'Set one or more variables in' \
235
+ ' defaults or a forj account.'
333
236
  long_desc <<-LONGDESC
334
- You can set some variables to change 'forj' defaults or specifically some account data.
237
+ You can set some variables to change 'forj' defaults
238
+ or specifically some account data.
239
+
240
+ Ex: By default, forj use ~/.ssh/forj-id_rsa as keypair for all forge instance.
241
+ During setup, if this keypair doesn't exist, it proposes to create it for you,
242
+ with ssh-keygen.
335
243
 
336
- Ex: By default, forj use ~/.ssh/forj-id_rsa as keypair for all forge instance. During setup, if this keypair doesn't exist, it proposes to create it for you, with ssh-keygen.
337
- If you want to use a keypair that already exists, you can set it as your default, with:
244
+ If you want to use a keypair that already exists,
245
+ you can set it as your default, with:
338
246
 
339
247
  `forj set keypair_name=~/.ssh/id_rsa`
340
248
 
@@ -346,112 +254,112 @@ Ex: By default, forj use ~/.ssh/forj-id_rsa as keypair for all forge instance. D
346
254
 
347
255
  `forj set`
348
256
 
349
- If you want to remove the key from dev, and ask for to re-use defaults (from your config or application default)
257
+ If you want to remove the key from dev, and ask for to re-use defaults
258
+ (from your config or application default)
350
259
 
351
260
  `forj set keypair_name= -a dev`
352
261
 
353
- If you want to remove the key from your default, and re-use application default
262
+ If you want to remove the key from your default,
263
+ and re-use application default
354
264
 
355
265
  `forj set keypair_name=`
356
266
 
357
267
  LONGDESC
358
268
 
359
- method_option :account_name, :aliases => '-a', :desc => "Set the forj account name to use. By default, uses the default account set in your local config file."
360
-
361
- def set(*p)
362
- Logging.set_level(Logger::INFO) if options[:verbose]
363
- Logging.set_level(Logger::DEBUG) if options[:debug]
364
-
365
- oConfig=Lorj::Config.new()
366
-
367
- if p.length == 0 and not options[:account_name]
368
- Forj::Settings::config_show_all(oConfig)
269
+ method_option :account_name, :aliases => '-a', :desc => 'Set the forj' \
270
+ ' account name to use. By default, uses the default account set in your' \
271
+ ' local config file.'
369
272
 
370
- elsif p.length == 0 and options[:account_name]
371
- Forj::Settings::account_show_all(oConfig, options[:account_name])
273
+ def set(*p)
274
+ PrcLib.level = Logger::INFO if options[:verbose]
275
+ PrcLib.level = Logger::DEBUG if options[:debug]
372
276
 
373
- elsif p.length != 0 and options[:account_name]
374
- Forj::Settings::account_set(oConfig, options[:account_name], p)
375
-
376
- else
377
- Forj::Settings::config_set(oConfig, p)
378
- end
379
- end
277
+ if p.length == 0
278
+ Forj::Settings.show_settings(options)
279
+ else
280
+ Forj::Settings.set_settings(options, p)
281
+ end
282
+ end
380
283
 
381
- ################################# GET
382
- desc 'get', 'Get data from defaults or account values.'
383
- long_desc <<-LONGDESC
284
+ ################################# GET
285
+ desc 'get', 'Get data from defaults or account values.'
286
+ long_desc <<-LONGDESC
384
287
  forj cli maintain a list of key/value at 3 Levels:
385
288
  \x5- Application defaults
386
289
  \x5- Local config defaults
387
290
  \x5- Account data
388
291
 
389
- This function will help you identify which value has been retrieved from which level.
292
+ This function will help you identify which value has been retrieved from
293
+ which level.
390
294
 
391
- Ex: To get the default keypair_name, from your ~/.forj/config.yaml, or if not found, from application defaults.
295
+ Ex: To get the default keypair_name, from your ~/.forj/config.yaml,
296
+ or if not found, from application defaults.
392
297
 
393
298
  `forj get keypair_name`
394
299
 
395
- Ex: To get the keypair_name defined from the account, or from your ~/.forj/config.yaml, or if not found, from application defaults.
300
+ Ex: To get the keypair_name defined from the account,
301
+ or from your ~/.forj/config.yaml, or if not found, from application defaults.
396
302
 
397
303
  `forj get keypair_name -a dev`
398
304
 
399
305
 
400
306
  LONGDESC
401
307
 
402
- method_option :account_name, :aliases => '-a', :desc => "Set the forj account name to use. By default, uses the default account set in your local config file."
403
-
404
- def get(key = nil)
405
- PrcLib.set_level(Logger::INFO) if options[:verbose]
406
- PrcLib.set_level(Logger::DEBUG) if options[:debug]
407
-
408
- oConfig = Lorj::Config.new()
409
- if not options[:account_name] and not key
410
- Forj::Settings::config_get_all(oConfig)
411
-
412
- elsif options[:account_name] and key
413
- Forj::Settings::account_get(oConfig, options[:account_name], key)
308
+ method_option :account_name, :aliases => '-a', :desc => 'Set the forj' \
309
+ ' account name to use. By default, uses the default account set in your' \
310
+ ' local config file.'
414
311
 
415
- elsif not options[:account_name] and key
416
- Forj::Settings::config_get(oConfig, key)
312
+ def get(key = nil)
313
+ PrcLib.level = Logger::INFO if options[:verbose]
314
+ PrcLib.level = Logger::DEBUG if options[:debug]
417
315
 
418
- else
419
- Forj::Settings::account_get_all(oConfig, options[:account_name])
420
- end
421
- end
316
+ require 'get.rb'
317
+ Forj::Get.get(options, key)
318
+ end
422
319
 
423
- ################################# SSH
424
- desc 'ssh <Instance> [options]', 'connect to your forge thru ssh'
425
- long_desc <<-LONGDESC
320
+ ################################# SSH
321
+ desc 'ssh <Instance> [options]', 'connect to your forge thru ssh'
322
+ long_desc <<-LONGDESC
426
323
  Connect through ssh to a node attached to an instance
427
324
 
428
325
  ex: forj ssh myforge -n review
429
326
  LONGDESC
430
327
 
431
- method_option :box_name, :aliases => '-n', :desc => "box name to create ssh connection"
432
- method_option :identity, :aliases => '-i', :desc => "Private key file name."
328
+ method_option :box_name, :aliases => '-n', :desc => 'box name to' \
329
+ ' create ssh connection'
330
+ method_option :identity, :aliases => '-i', :desc => 'Private key' \
331
+ ' file name.'
332
+
333
+ def ssh(oInstanceName)
334
+ Forj::Settings.common_options(options)
335
+ require 'ssh.rb'
433
336
 
434
- def ssh(oInstanceName)
435
- Forj::Settings.common_options(options)
337
+ account = Lorj::Account.new(options[:config])
436
338
 
437
- oConfig = Lorj::Config.new(options[:config])
339
+ # Setting account at runtime layer
340
+ account[:account_name] = options[:account_name] if options[:account_name]
341
+ # Setting account at account layer
342
+ account.ac_load account[:account_name]
438
343
 
439
- oConfig.set(:box_ssh, options[:box_name]) if options[:box_name]
440
- oConfig.set(:identity, options[:identity]) if options[:identity]
344
+ account.set(:box_ssh, options[:box_name]) if options[:box_name]
345
+ account.set(:identity, options[:identity]) if options[:identity]
441
346
 
442
- Forj::Ssh.connect(oInstanceName, oConfig)
443
- end
347
+ Forj::Ssh.connect(oInstanceName, account)
348
+ end
444
349
 
445
- ################################# SETUP
350
+ ################################# SETUP
446
351
 
447
- desc 'setup [AccountName [Provider]] [options]', "Setup FORJ cloud account credentials and information."
352
+ desc 'setup [AccountName [Provider]] [options]', 'Setup FORJ cloud account' \
353
+ ' credentials and information.'
448
354
 
449
355
  long_desc <<-LONGDESC
450
356
  This setup will configure a FORJ account used to connect to your cloud system.
451
357
  \x5It will ask for your cloud provider credentials and services.
452
358
 
453
- If AccountName is not set, 'hpcloud' will be used for AccountName and provider name, by default.
454
- \x5If AccountName is not set without provider, 'hpcloud' provider will be used, by default.
359
+ If AccountName is not set, 'hpcloud' will be used for AccountName
360
+ and provider name, by default.
361
+ \x5If AccountName is not set without provider, 'hpcloud' provider
362
+ will be used, by default.
455
363
 
456
364
  WARNING! Currently supports only hpcloud provider.
457
365
 
@@ -461,33 +369,18 @@ Several data will be requested like:
461
369
  \x5- DNS settings if you want Maestro to manage it.
462
370
  \x5- domain name to add to each boxes hostname
463
371
  LONGDESC
464
- def setup(sAccountName = 'hpcloud', sProvider = "hpcloud")
465
- Forj::Settings.common_options(options)
466
-
467
- oConfig=Lorj::Config.new(options[:config])
468
- oConfig.set(:provider_name, sProvider)
469
- oConfig.set(:account_name, sAccountName)
470
-
471
- aProcesses = []
472
-
473
- # Defines how to manage Maestro and forges
474
- # create a maestro box. Identify a forge instance, delete it,...
475
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCore.rb')
476
-
477
- # Defines how cli will control FORJ features
478
- # boot/down/ssh/...
479
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCli.rb')
372
+ def setup(sAccountName = 'hpcloud', sProvider = 'hpcloud')
373
+ Forj::Settings.common_options(options)
374
+ require 'cloud_connection.rb'
480
375
 
481
- # Loading CloudCore embedding provider controller + its process.
482
- oCloud = Lorj::CloudCore.new(oConfig, oConfig[:account_name], aProcesses)
483
-
484
-
485
- oCloud.Setup(:forge, sAccountName)
486
- oCloud.config.ac_save()
376
+ account = Lorj::Account.new(options[:config])
377
+ account.set(:provider_name, sProvider)
378
+ account.set(:account_name, sAccountName)
487
379
 
380
+ o_cloud = Forj::CloudConnection.connect(account)
381
+ o_cloud.setup(:forge, sAccountName)
382
+ o_cloud.config.ac_save
488
383
  end
489
-
490
384
  end
491
385
 
492
-
493
386
  ForjThor.start