bin/forj in forj-1.0.3 vs bin/forj in forj-1.0.4
- old
+ new
@@ -14,480 +14,373 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'rubygems'
-#require 'debugger' # Use to debug with Ruby < 2.0
-#require 'byebug' # Use to debug with Ruby >= 2.0
+# require 'debugger' # Use to debug with Ruby < 2.0
+# require 'byebug' # Use to debug with Ruby >= 2.0
require 'bundler/setup'
-#require 'require_relative'
require 'thor'
require 'ansi'
-$APP_PATH = File.dirname(File.dirname(__FILE__))
-$LIB_PATH = File.expand_path(File.join($APP_PATH, 'lib'))
+APP_PATH = File.dirname(File.dirname(__FILE__))
+LIB_PATH = File.expand_path(File.join(APP_PATH, 'lib'))
-require 'appinit.rb' # Load generic Application level function
+require 'lorj'
+PrcLib.app_name = 'forj'
+PrcLib.app_defaults = File.join(APP_PATH, 'forj')
# Initialize forj paths
-AppInit::forj_initialize()
+require 'appinit.rb' # Load Application settings features
+Forj.keypairs_path = File.join(PrcLib.data_path, 'keypairs')
+Forj.build_path = File.join(PrcLib.data_path, '.build')
-require 'lorj' # Use lorj library for Cloud agnostics feature.
-
-PrcLib.app_name = 'forj'
-PrcLib.app_defaults = File.join($APP_PATH, 'forj')
-
require 'forj-settings.rb' # Settings features
-require 'ssh.rb'
-
-$LIB_FORJ_DEBUG = 1 # less verbose
-
-
+# This is the main Forj class
+# it helps you to create and support your forge.
+# rubocop:disable ClassLength
class ForjThor < Thor
-
class_option :debug, :aliases => '-d', :desc => 'Set debug mode'
class_option :verbose, :aliases => '-v', :desc => 'Set verbose mode'
- class_option :config, :aliases => '-c', :desc => 'Path to a different forj config file. By default, use ~/.forj/config.yaml'
- class_option :lorj_debug, :desc => "Set lorj debug level verbosity. 1 to 5. Default is one."
-
-
- desc "help [action]", "Describe available FORJ actions or one specific action"
+ class_option :config, :aliases => '-c', :desc => 'Path to a different forj'\
+ ' config file. By default, use ~/.forj/config.yaml'
+ class_option :lorj_debug, :desc => 'Set lorj debug level verbosity. 1 to 5.'\
+ 'Default is one.'
+ desc 'help [action]', 'Describe available FORJ actions or one specific action'
def help(task = nil, subcommand = false)
if task
- self.class.task_help(shell, task)
+ self.class.task_help(shell, task)
else
- puts <<-LONGDESC
+ puts <<-LONGDESC
Quick steps: How to create a forj?
----------------------------------
To test a forj blueprint, you will need an account on a cloud solution.
-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)
+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)
1. Setup your FORJ account.
`$ forj setup [AccountName] [--provider Provider]`
- 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.
+ 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.
-**IMPORTANT NOTE** By default, forj setup will propose you to create your forge on HPHelion (provider 'hpcloud').
-If AccountName is not set, the account name will be proposed to be name 'hpcloud' as well!
+**IMPORTANT NOTE** By default, forj setup will propose you to create your forge
+ on HPHelion (provider 'hpcloud').
+If AccountName is not set, the account name will be proposed to be name
+ 'hpcloud' as well!
2. Create your forge on your default account
`$ forj boot <blueprint> <InstanceName>`
- Ex: `forj boot redstone MyForge`. In this example, forj will create a `redstone` blueprint forge named `MyForge`, using the default `MyForjAccount`
+ Ex: `forj boot redstone MyForge`. In this example:
+ Forj will create a `redstone` blueprint forge named `MyForge`,
+ using the default `MyForjAccount`.
forj command line details:
--------------------------
LONGDESC
- self.class.help(shell, subcommand)
+ self.class.help(shell, subcommand)
end
end
- desc 'version', 'get GEM version of forj.'
+ desc 'version', 'get GEM version of forj.'
- def version()
- if Gem.loaded_specs['forj']
- puts Gem.loaded_specs['forj'].version.to_s
- end
- end
+ def version
+ puts Gem.loaded_specs['forj'].version.to_s if Gem.loaded_specs['forj']
+ end
+ ################################# BOOT
+ desc 'boot <blueprint> <InstanceName> [options]', 'boot a Maestro box and' \
+ ' instruct it to provision the blueprint'
-################################# BOOT
- desc 'boot <blueprint> <InstanceName> [options]', 'boot a Maestro box and instruct it to provision the blueprint'
-
long_desc <<-LONGDESC
This task boot a new forge with the following options
\x5- blueprint : Is the name of the blueprint
\x5- InstanceName : name of the forge
Ex: forj boot redstone maestro_test -a dev
-When `forj boot` starts, some variables are loaded. If you want to check/updated them, use `forj get [-a account]`
+When `forj boot` starts, some variables are loaded.
+If you want to check/updated them, use `forj get [-a account]`
LONGDESC
- 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.
+ 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.' + "\n\n" + 'Following options superseed your' \
+ ' Account, config file or forj defaults.'
+ method_option :maestro_repo, :aliases => '-m', :desc => 'config: ' \
+ ' maestro_repo : To use a different Maestro repository already' \
+ ' cloned.' + "\n" + 'By default, Maestro is systematically cloned ' \
+ ' to ~/.forj/maestro from github.'
+ method_option :infra, :aliases => '-r', :desc => 'config:' \
+ ' infra_repo : Defines your Infra directory to use while' \
+ ' booting. You can also set FORJ_INFRA_DIR.'
+ method_option :key_name, :aliases => '-k', :desc => 'config:' \
+ ' keypair_name : Keypair name to use.'
+ method_option :key_path, :aliases => '-p', :desc => 'config:' \
+ ' keypair_path : Private or Public key file to use.'
+ method_option :security_group, :aliases => '-s', :desc => 'config:' \
+ ' security_group: Security group name to use and configure.'
+ method_option :image_name, :aliases => '-i', :desc => 'config:' \
+ ' image_name : Image name to use to build Maestro and blueprint nodes.'
+ method_option :maestro_flavor, :aliases => '-f', :desc => 'config:' \
+ ' flavor : Maestro flavor to use.'
+ method_option :bp_flavor, :aliases => '-b', :desc => 'config:' \
+ ' bp_flavor : Blueprint nodes default flavor to use.' \
+ + "\n\n" + ' Build system options:'
+ 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.'
+ method_option :build, :aliases => '-B', :desc => 'Replace' \
+ ' the default build.sh'
+ method_option :branch, :aliases => '-R', :desc => 'Branch' \
+ 'name to clone for maestro.' \
+ + "\n\n" + 'Maestro/infra bootstrap debugging:'
+ method_option :test_box, :aliases => '-T', :desc => 'Identify a' \
+ ' path to become your test-box repository.' \
+ "\n " \
+ 'Ex: if your maestro is in ~/src/forj-oss, --test_box' \
+ ' ~/src/forj-oss/maestro build.sh and' \
+ "\n " \
+ 'test-box will send your local maestro repo to your box, for boot.'
-Following options superseed your Account, config file or forj defaults."
- method_option :maestro_repo, :aliases => '-m', :desc => "config: maestro_repo : To use a different Maestro repository already cloned.
- By default, Maestro is systematically cloned to ~/.forj/maestro from github."
- method_option :infra, :aliases => '-r', :desc => 'config: infra_repo : Defines your Infra directory to use while booting. You can also set FORJ_INFRA_DIR.'
- method_option :key_name, :aliases => '-k', :desc => "config: keypair_name : Keypair name to use."
- method_option :key_path, :aliases => '-p', :desc => "config: keypair_path : Private or Public key file to use."
- method_option :security_group, :aliases => '-s', :desc => "config: security_group: Security group name to use and configure."
- method_option :image_name, :aliases => '-i', :desc => "config: image_name : Image name to use to build Maestro and blueprint nodes."
- method_option :maestro_flavor, :aliases => '-f', :desc => "config: flavor : Maestro flavor to use."
- method_option :bp_flavor, :aliases => '-b', :desc => "config: bp_flavor : Blueprint nodes default flavor to use.
+ def boot(blueprint, on_or_name, old_accountname = nil, as = nil,
+ old_name = nil)
+ Forj::Settings.common_options(options)
+ require 'boot.rb'
-Build system options:"
- 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.'
- method_option :build, :aliases => '-B', :desc => 'Replace the default build.sh'
- method_option :branch, :aliases => '-R', :desc => "Branch name to clone for maestro.
+ deprecated_name = [old_accountname, as, old_name]
-Maestro/infra bootstrap debugging:"
- method_option :test_box, :aliases => '-T', :desc => "Identify a path to become your test-box repository.
- Ex: if your maestro is in ~/src/forj-oss, --test_box ~/src/forj-oss/maestro build.sh and
- test-box will send your local maestro repo to your box, for boot."
-
- def boot(blueprint, on_or_name, old_accountname = nil, as = nil, old_name = nil)
- Forj::Settings.common_options(options)
-
- oConfig = Lorj::Config.new(options[:config])
-
- # depreciated: <BluePrint> on <AccountName> as <InstanceName>
- if old_accountname and as and old_name
- 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]
- if oConfig.get('account_name') == old_accountname
- PrcLib.warning("%s` instead." % msg)
- else
- PrcLib.warning("%s -a '%s'` instead." % [msg, old_accountname])
- end
- name = old_name
- oConfig.set(:account_name, old_accountname)
- else
- name = on_or_name
- end
-
- PrcLib.fatal( 1, "instance name '%s' not supported. Support only lower case, numeric and dash caracters." % [name]) if not (/^[\d[[:lower:]]-]+$/ =~ name)
-
- # Options are added if they are set. Otherwise, get will retrieve the default value.
- oConfig.set(:account_name, options[:account_name]) if options[:account_name]
- oForjAccount = Lorj::Account.new(oConfig)
- oForjAccount.ac_load()
-
- oConfig.set(:infra_repo, options[:infra])
- oConfig.set(:keypair_name, options[:key_name])
- oConfig.set(:keypair_path, options[:key_path])
- oConfig.set(:security_group, options[:security_group])
- oConfig.set(:image_name, options[:image_name])
- oConfig.set(:flavor, options[:maestro_flavor])
- oConfig.set(:bp_flavor, options[:bp_flavor])
- oConfig.set(:maestro_repo , options[:maestro_repo])
- oConfig.set(:branch , options[:branch])
- oConfig.set(:test_box, File.expand_path(options[:test_box])) if options[:test_box] and File.directory?(File.expand_path(options[:test_box]))
-
- PrcLib.warning("test_box is currently disabled in this version. It will be re-activated in newer version.") if options[:test_box]
-
- if options[:key_path]
- mFound = options[:key_path].match(/^(.*)(\.pub)?$/)
- if mFound
- key_path = File.expand_path(mFound[1])
- if mFound[2] and not File.exists?(File.expand_path(mFound[1]+mFound[2]))
- PrcLib.fatal(1, "'%s' is not a valid keypair files. At least the public key (.pub) is have to exist.")
- end
- oConfig.set(:keypair_path, key_path)
- else
- PrcLib.fatal(1, "'%s' is not a valid keypair files. At least the public key (.pub) is have to exist.")
- end
- end
- aProcesses = []
-
- # Defines how to manage Maestro and forges
- # create a maestro box. Identify a forge instance, delete it,...
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCore.rb')
-
- # Defines how cli will control FORJ features
- # boot/down/ssh/...
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCli.rb')
-
- #oCloud = ForjCloud.new(oForjAccount, oConfig[:account_name], aProcesses)
- oCloud = Lorj::CloudCore.new(oForjAccount, oConfig[:account_name], aProcesses)
-
- oConfig[:instance_name] = name
-
- if blueprint == 'maestro'
- PrcLib.info("Starting boot process of '%s'. No blueprint requested." % oConfig[:instance_name])
- else
- oConfig[:blueprint] = blueprint
- PrcLib.info("Starting boot process of '%s' with blueprint '%s'." % [oConfig[:instance_name], oConfig[:blueprint]])
- end
-
- 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")])
-
- oCloud.Create(:forge)
+ Forj::Boot.boot(blueprint, on_or_name, deprecated_name, options)
end
-################################# Show defaults
- desc 'show <Object> [name]', 'Show Object (default valuesr, account data, etc...) values.'
+ ################################# Show defaults
long_desc <<-LONGDESC
-This command helps to show values used by 'forj' to boot a blueprint (account data, default values, etc...)
+This command helps to show values used by 'forj' to boot a blueprint
+(account data, default values, etc...)
queriable Objects:
-- defaults : Provide the list of predefined values, configured by forj, or by you in your ~/.forj/config.yaml (or another config file with -c)
-- account [name] : without name, forj will give you the list of account saved. Otherwise print 'name' account data.
+- defaults : Provide the list of predefined values, configured by forj,
+ or by you in your ~/.forj/config.yaml (or another config file with -c)
+- account [name] : without name, forj will give you the list of account saved.
+ Otherwise print 'name' account data.
LONGDESC
+ desc 'show <Object> [name]', 'Show Object (default valuesr, account data,' \
+ ' etc...) values.'
+ def show(object, name = nil)
+ Forj::Settings.common_options(options)
- def show(object, name = nil)
- Settings.common_options(options)
+ case object
+ when 'defaults'
+ o_config = Lorj::Account.new
- case object
- when 'defaults'
- oConfig=Lorj::Config.new()
+ puts 'List of default values: (local refer to your config file.' \
+ ' hash refer to your FORJ account data)'
- puts 'List of default values: (local refer to your config file. hash refer to your FORJ account data)'
- puts oConfig.default_dump().to_yaml
- puts '---'
- puts "To change default values, use 'forj get' to check valid keys, and update with 'forj set'"
- when 'account'
- oConfig=Lorj::Config.new()
- if not name
- puts "List of FORJ accounts: Use 'forj account YourAccount' to see one account details."
- oAccounts = ForjAccounts.new()
- puts oAccounts.dump().to_yaml
- else
- oConfig.set(:account_name, name)
- oAccount = ForjAccount.new(oConfig)
- oAccount.ac_load()
+ dump = o_config.config_dump(%w(account local))
+ dump[:application] = o_config.config_dump(%w(default))[:default]
+ puts dump.to_yaml
+ puts '---'
+ puts "To change default values, use 'forj get' to check valid keys," \
+ " and update with 'forj set'"
+ when 'account'
+ unless name
+ puts "List of FORJ accounts: Use 'forj account YourAccount' " \
+ ' to see one account details.'
+ o_accounts = Lorj::Accounts.new
+ puts o_accounts.dump.to_yaml
+ return
+ end
+ o_config = Lorj::Account.new
+ o_config[:account_name] = name
- puts "Account value for '%s':" % name
- puts oAccount.dump().to_yaml
- puts '---'
- puts "To change those values, execute 'forj setup -a %s'." % options[:account_name]
- end
+ PrcLib.fatal(1, "Unable to load the account '%s'",
+ name) unless o_config.ac_load o_config[:account_name]
- else
- PrcLib.error("object '%s' unknown." % name)
- end
- end
+ puts format("Account value for '%s':", name)
+ puts o_config.config_dump([%(account)]).to_yaml
+ puts '---'
+ puts format("To change those values, execute 'forj setup -a %s'.",
+ options[:account_name])
-################################# DESTROY
- desc 'destroy <InstanceName> [options]', 'delete the Maestro box and all systems installed by the blueprint'
- long_desc <<-LONGDESC
-This action destroy all servers found under the instance name and allow you to destroy all of them or just one of them.
+ else
+ PrcLib.error("object '%s' unknown.", name)
+ end
+ end
+ ################################# DESTROY
+ desc 'destroy <InstanceName> [options]', 'delete the Maestro box and all' \
+ ' systems installed by the blueprint'
+ long_desc <<-LONGDESC
+This action destroy all servers found under the instance name and allow you
+to destroy all of them or just one of them.
+
Warning! This action do not remove any network/security groups cloud object.
LONGDESC
- method_option :force, :aliases => "-f", :desc => "force deletion of all servers for the given InstanceName"
+ method_option :force, :aliases => '-f', :desc => 'force deletion of all' \
+ ' servers for the given InstanceName'
+ def destroy(name)
+ require 'destroy.rb'
+ Forj::Settings.common_options(options)
+ Forj::Destroy.destroy(name, options)
+ end
- def destroy(name)
- Forj::Settings.common_options(options)
-
- oConfig = Lorj::Config.new(options[:config])
- oConfig.set(:account_name, options[:account_name]) if options[:account_name]
- oForjAccount = Lorj::Account.new(oConfig)
- oForjAccount.ac_load()
-
- aProcesses = []
-
- # Defines how to manage Maestro and forges
- # create a maestro box. Identify a forge instance, delete it,...
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCore.rb')
-
- # Defines how cli will control FORJ features
- # boot/down/ssh/...
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCli.rb')
-
- oCloud = Lorj::CloudCore.new(oForjAccount, oConfig[:account_name], aProcesses)
-
- oForge = oCloud.Get(:forge, name)
-
- if oForge[:servers].count > 0
-
- if options[:force]
- #Destroy all servers found
- oCloud.Delete(:forge)
- else
- #Ask the user to get server(s) to destroy
- serverList = []
- index = 0
-
- oForge[:servers].each{ |server|
- serverList[index] = server[:name]
- index = index + 1
- }
-
- serverList << "all"
- serverList << "esc"
-
- say("Select the index of the server you want to destroy")
- value = choose { | q |
- q.choices(*serverList)
- }
-
- oServerNumber = serverList.index(value)
-
- if oServerNumber >= 0 and oServerNumber < oForge[:servers].count
- #Destroy selected server
- oConfig.set(:forge_server, oForge[:servers][oServerNumber][:id] )
- oCloud.Delete(:forge)
- elsif oServerNumber == serverList.index("all")
- #Destroy all servers found
- oCloud.Delete(:forge)
- elsif oServerNumber == serverList.index("esc")
- #esc
- PrcLib.high_level_msg("No server destroyed on your demand.\n" % name )
- end
-
- end
-
- else
- PrcLib.high_level_msg("No server(s) found on forge instance '%s'.\n" % name )
- end
-
- end
-
-################################# SET
- desc 'set [key=value] [...] [options]', 'Set one or more variables in defaults or a forj account.'
+ ################################# SET
+ desc 'set [key=value] [...] [options]', 'Set one or more variables in' \
+ ' defaults or a forj account.'
long_desc <<-LONGDESC
-You can set some variables to change 'forj' defaults or specifically some account data.
+You can set some variables to change 'forj' defaults
+or specifically some account data.
-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.
- If you want to use a keypair that already exists, you can set it as your default, with:
+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.
+If you want to use a keypair that already exists,
+you can set it as your default, with:
+
`forj set keypair_name=~/.ssh/id_rsa`
If you want to set this key only for your account 'dev':
`forj set keypair_name=~/.ssh/id_rsa -a dev`
If you want to get the list of possible key to set:
`forj set`
- If you want to remove the key from dev, and ask for to re-use defaults (from your config or application default)
+ If you want to remove the key from dev, and ask for to re-use defaults
+ (from your config or application default)
`forj set keypair_name= -a dev`
- If you want to remove the key from your default, and re-use application default
+ If you want to remove the key from your default,
+ and re-use application default
`forj set keypair_name=`
LONGDESC
- 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."
+ 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.'
- def set(*p)
- Logging.set_level(Logger::INFO) if options[:verbose]
- Logging.set_level(Logger::DEBUG) if options[:debug]
+ def set(*p)
+ PrcLib.level = Logger::INFO if options[:verbose]
+ PrcLib.level = Logger::DEBUG if options[:debug]
- oConfig=Lorj::Config.new()
+ if p.length == 0
+ Forj::Settings.show_settings(options)
+ else
+ Forj::Settings.set_settings(options, p)
+ end
+ end
- if p.length == 0 and not options[:account_name]
- Forj::Settings::config_show_all(oConfig)
-
- elsif p.length == 0 and options[:account_name]
- Forj::Settings::account_show_all(oConfig, options[:account_name])
-
- elsif p.length != 0 and options[:account_name]
- Forj::Settings::account_set(oConfig, options[:account_name], p)
-
- else
- Forj::Settings::config_set(oConfig, p)
- end
- end
-
-################################# GET
- desc 'get', 'Get data from defaults or account values.'
- long_desc <<-LONGDESC
+ ################################# GET
+ desc 'get', 'Get data from defaults or account values.'
+ long_desc <<-LONGDESC
forj cli maintain a list of key/value at 3 Levels:
\x5- Application defaults
\x5- Local config defaults
\x5- Account data
-This function will help you identify which value has been retrieved from which level.
+This function will help you identify which value has been retrieved from
+which level.
-Ex: To get the default keypair_name, from your ~/.forj/config.yaml, or if not found, from application defaults.
+Ex: To get the default keypair_name, from your ~/.forj/config.yaml,
+or if not found, from application defaults.
`forj get keypair_name`
-Ex: To get the keypair_name defined from the account, or from your ~/.forj/config.yaml, or if not found, from application defaults.
+Ex: To get the keypair_name defined from the account,
+or from your ~/.forj/config.yaml, or if not found, from application defaults.
`forj get keypair_name -a dev`
LONGDESC
- 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."
+ 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.'
- def get(key = nil)
- PrcLib.set_level(Logger::INFO) if options[:verbose]
- PrcLib.set_level(Logger::DEBUG) if options[:debug]
+ def get(key = nil)
+ PrcLib.level = Logger::INFO if options[:verbose]
+ PrcLib.level = Logger::DEBUG if options[:debug]
- oConfig = Lorj::Config.new()
- if not options[:account_name] and not key
- Forj::Settings::config_get_all(oConfig)
+ require 'get.rb'
+ Forj::Get.get(options, key)
+ end
- elsif options[:account_name] and key
- Forj::Settings::account_get(oConfig, options[:account_name], key)
-
- elsif not options[:account_name] and key
- Forj::Settings::config_get(oConfig, key)
-
- else
- Forj::Settings::account_get_all(oConfig, options[:account_name])
- end
- end
-
-################################# SSH
- desc 'ssh <Instance> [options]', 'connect to your forge thru ssh'
- long_desc <<-LONGDESC
+ ################################# SSH
+ desc 'ssh <Instance> [options]', 'connect to your forge thru ssh'
+ long_desc <<-LONGDESC
Connect through ssh to a node attached to an instance
ex: forj ssh myforge -n review
LONGDESC
- method_option :box_name, :aliases => '-n', :desc => "box name to create ssh connection"
- method_option :identity, :aliases => '-i', :desc => "Private key file name."
+ method_option :box_name, :aliases => '-n', :desc => 'box name to' \
+ ' create ssh connection'
+ method_option :identity, :aliases => '-i', :desc => 'Private key' \
+ ' file name.'
- def ssh(oInstanceName)
- Forj::Settings.common_options(options)
+ def ssh(oInstanceName)
+ Forj::Settings.common_options(options)
+ require 'ssh.rb'
- oConfig = Lorj::Config.new(options[:config])
+ account = Lorj::Account.new(options[:config])
- oConfig.set(:box_ssh, options[:box_name]) if options[:box_name]
- oConfig.set(:identity, options[:identity]) if options[:identity]
+ # Setting account at runtime layer
+ account[:account_name] = options[:account_name] if options[:account_name]
+ # Setting account at account layer
+ account.ac_load account[:account_name]
- Forj::Ssh.connect(oInstanceName, oConfig)
- end
+ account.set(:box_ssh, options[:box_name]) if options[:box_name]
+ account.set(:identity, options[:identity]) if options[:identity]
-################################# SETUP
+ Forj::Ssh.connect(oInstanceName, account)
+ end
- desc 'setup [AccountName [Provider]] [options]', "Setup FORJ cloud account credentials and information."
+ ################################# SETUP
+ desc 'setup [AccountName [Provider]] [options]', 'Setup FORJ cloud account' \
+ ' credentials and information.'
+
long_desc <<-LONGDESC
This setup will configure a FORJ account used to connect to your cloud system.
\x5It will ask for your cloud provider credentials and services.
-If AccountName is not set, 'hpcloud' will be used for AccountName and provider name, by default.
-\x5If AccountName is not set without provider, 'hpcloud' provider will be used, by default.
+If AccountName is not set, 'hpcloud' will be used for AccountName
+and provider name, by default.
+\x5If AccountName is not set without provider, 'hpcloud' provider
+will be used, by default.
WARNING! Currently supports only hpcloud provider.
Several data will be requested like:
\x5- Cloud provider credentials and services.
\x5- user/password (password is encrypted)
\x5- DNS settings if you want Maestro to manage it.
\x5- domain name to add to each boxes hostname
LONGDESC
- def setup(sAccountName = 'hpcloud', sProvider = "hpcloud")
- Forj::Settings.common_options(options)
+ def setup(sAccountName = 'hpcloud', sProvider = 'hpcloud')
+ Forj::Settings.common_options(options)
+ require 'cloud_connection.rb'
- oConfig=Lorj::Config.new(options[:config])
- oConfig.set(:provider_name, sProvider)
- oConfig.set(:account_name, sAccountName)
+ account = Lorj::Account.new(options[:config])
+ account.set(:provider_name, sProvider)
+ account.set(:account_name, sAccountName)
- aProcesses = []
-
- # Defines how to manage Maestro and forges
- # create a maestro box. Identify a forge instance, delete it,...
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCore.rb')
-
- # Defines how cli will control FORJ features
- # boot/down/ssh/...
- aProcesses << File.join($LIB_PATH, 'forj', 'ForjCli.rb')
-
- # Loading CloudCore embedding provider controller + its process.
- oCloud = Lorj::CloudCore.new(oConfig, oConfig[:account_name], aProcesses)
-
-
- oCloud.Setup(:forge, sAccountName)
- oCloud.config.ac_save()
-
+ o_cloud = Forj::CloudConnection.connect(account)
+ o_cloud.setup(:forge, sAccountName)
+ o_cloud.config.ac_save
end
-
end
-
ForjThor.start