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.
- checksums.yaml +4 -4
- data/Gemfile +3 -2
- data/bin/forj +59 -17
- data/lib/appinit.rb +2 -0
- data/lib/build_tmpl/bootstrap_build.sh +145 -0
- data/lib/build_tmpl/write-mime-multipart.py +128 -0
- data/lib/connection.rb +6 -8
- data/lib/defaults.yaml +130 -46
- data/lib/down.rb +1 -3
- data/{spec/yaml_parse_spec.rb → lib/forj/ForjCli.rb} +22 -0
- data/lib/forj/ForjCore.rb +111 -0
- data/lib/forj/process/ForjProcess.rb +623 -0
- data/lib/forj-account.rb +3 -380
- data/lib/forj-config.rb +6 -6
- data/lib/lib-forj/lib/core/core.rb +1687 -0
- data/lib/lib-forj/lib/core/definition.rb +441 -0
- data/lib/lib-forj/lib/core/definition_internal.rb +306 -0
- data/lib/lib-forj/lib/core_process/CloudProcess.rb +311 -0
- data/lib/lib-forj/lib/core_process/global_process.rb +403 -0
- data/lib/lib-forj/lib/core_process/network_process.rb +606 -0
- data/lib/lib-forj/lib/lib-forj.rb +37 -0
- data/lib/lib-forj/lib/providers/hpcloud/Hpcloud.rb +406 -0
- data/lib/lib-forj/lib/providers/hpcloud/compute.rb +108 -0
- data/lib/lib-forj/lib/providers/hpcloud/network.rb +107 -0
- data/lib/lib-forj/lib/providers/hpcloud/security_groups.rb +67 -0
- data/lib/lib-forj/lib/providers/templates/compute.rb +42 -0
- data/lib/lib-forj/lib/providers/templates/core.rb +61 -0
- data/lib/{yaml_parse.rb → lib-forj/lib/providers/templates/network.rb} +14 -26
- data/lib/log.rb +12 -1
- data/lib/repositories.rb +0 -6
- data/lib/ssh.rb +18 -15
- metadata +35 -6
- data/lib/boot.rb +0 -263
- data/lib/setup.rb +0 -45
data/lib/forj-account.rb
CHANGED
@@ -16,22 +16,6 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
require 'rubygems'
|
19
|
-
require 'highline/import'
|
20
|
-
|
21
|
-
require 'yaml_parse.rb'
|
22
|
-
include YamlParse
|
23
|
-
require 'helpers.rb'
|
24
|
-
include Helpers
|
25
|
-
|
26
|
-
require 'encryptor' # gem install encryptor
|
27
|
-
require 'base64'
|
28
|
-
|
29
|
-
# TODO: To move to a specific module driven by providers.
|
30
|
-
require 'hpcloud/version'
|
31
|
-
require 'hpcloud/config'
|
32
|
-
require 'hpcloud/accounts'
|
33
|
-
require 'hpcloud/connection'
|
34
|
-
include HP::Cloud
|
35
19
|
|
36
20
|
class ForjAccounts
|
37
21
|
# Class to query FORJ Accounts list.
|
@@ -262,7 +246,7 @@ class ForjAccount
|
|
262
246
|
@hAccountData = {:account => {:name => sAccountName, :provider => @oConfig.get(:provider_name)}}
|
263
247
|
end
|
264
248
|
|
265
|
-
def ac_load(sAccountName = @sAccountName
|
249
|
+
def ac_load(sAccountName = @sAccountName)
|
266
250
|
# Load Account Information
|
267
251
|
|
268
252
|
if sAccountName != @sAccountName
|
@@ -275,7 +259,7 @@ class ForjAccount
|
|
275
259
|
sProvider = @oConfig.get(:provider, 'hpcloud')
|
276
260
|
rhSet(@hAccountData, @sAccountName, :account, :name) if rhExist?(@hAccountData, :account, :name) != 2
|
277
261
|
rhSet(@hAccountData, sProvider, :account, :provider) if rhExist?(@hAccountData, :account, :provider) != 2
|
278
|
-
|
262
|
+
|
279
263
|
if rhKeyToSymbol?(@hAccountData, 2)
|
280
264
|
@hAccountData = rhKeyToSymbol(@hAccountData, 2)
|
281
265
|
self.ac_save()
|
@@ -286,7 +270,7 @@ class ForjAccount
|
|
286
270
|
end
|
287
271
|
|
288
272
|
def dump()
|
289
|
-
{ :forj_account => @hAccountData
|
273
|
+
{ :forj_account => @hAccountData }
|
290
274
|
end
|
291
275
|
|
292
276
|
def ac_save()
|
@@ -299,367 +283,6 @@ class ForjAccount
|
|
299
283
|
end
|
300
284
|
end
|
301
285
|
|
302
|
-
def setup()
|
303
|
-
# Full setup to make it work.
|
304
|
-
|
305
|
-
# setting up provider account - Required, while calling external provider tool, like hpcloud.
|
306
|
-
self.setup_provider_account()
|
307
|
-
|
308
|
-
# Implementation of simple credential encoding for build.sh/maestro
|
309
|
-
self.setup_maestro_creds()
|
310
|
-
|
311
|
-
# DNS Setting for Gardener
|
312
|
-
self.setup_dns()
|
313
|
-
|
314
|
-
# Check/create keypair
|
315
|
-
self.keypair_setup()
|
316
|
-
|
317
|
-
# Checking cloud connection
|
318
|
-
Logging.message("Checking cloud connection")
|
319
|
-
ForjConnection.new(self)
|
320
|
-
|
321
|
-
Logging.message("Setup '%s' done. Thank you." % @sAccountName)
|
322
|
-
end
|
323
|
-
|
324
|
-
def setup_provider_account()
|
325
|
-
# TODO: Support of multiple providers thanks to fog.
|
326
|
-
# TODO: Replace this code by our own forj account setup, inspired/derived from hpcloud account::setup
|
327
|
-
|
328
|
-
# delegate the initial configuration to hpcloud (unix_cli)
|
329
|
-
if File.exists?(File.join($HPC_ACCOUNTS, 'hp')) and not File.exists?(File.join($HPC_ACCOUNTS, @sAccountName)) and @sAccountName != 'hp'
|
330
|
-
Logging.info("hpcloud: Copying 'hp' account setup to '%s'" % @sAccountName)
|
331
|
-
Kernel.system('hpcloud account:copy hp %s' % [@sAccountName])
|
332
|
-
end
|
333
|
-
|
334
|
-
Logging.info("Configuring hpcloud account '%s'" % [@sAccountName] )
|
335
|
-
command = 'hpcloud account:setup %s' % [@sAccountName]
|
336
|
-
Logging.debug("Executing : '%s'" % command)
|
337
|
-
case Kernel.system(command)
|
338
|
-
when false
|
339
|
-
Logging.fatal(1, "Unable to setup your '%s' account" % [@sAccountName])
|
340
|
-
when nil
|
341
|
-
Logging.fatal(1, "Unable to execute 'hpcloud' cli. Please check hpcloud installation.")
|
342
|
-
end
|
343
|
-
|
344
|
-
provider_load() # To ensure latest provider data are loaded
|
345
|
-
|
346
|
-
setup_tenant_name()
|
347
|
-
end
|
348
|
-
|
349
|
-
def provider_load()
|
350
|
-
# TODO: Should be provider agnostic
|
351
|
-
# Loading HPCloud account setting in Config.
|
352
|
-
hpc_account_file = File.join($HPC_ACCOUNTS, @sAccountName)
|
353
|
-
|
354
|
-
# Maestro compute use openstack. It requires meta tenant_name (not ID). Need to query HPC to get the Project Name from the ID.
|
355
|
-
@oConfig.ExtraLoad(hpc_account_file, :hpc_accounts, @sAccountName)
|
356
|
-
end
|
357
|
-
|
358
|
-
# Maestro uses fog/openstack to connect to the cloud. It needs Tenant name instead of tenant ID.
|
359
|
-
# Getting it from Compute connection and set it
|
360
|
-
def setup_tenant_name()
|
361
|
-
oSSLError=SSLErrorMgt.new # Retry object
|
362
|
-
Logging.debug("Getting tenants from hpcloud cli libraries")
|
363
|
-
begin
|
364
|
-
tenants = Connection.instance.tenants(@sAccountName)
|
365
|
-
rescue => e
|
366
|
-
if not oSSLError.ErrorDetected(e.message,e.backtrace)
|
367
|
-
retry
|
368
|
-
end
|
369
|
-
Logging.fatal(1, 'Network: Unable to connect.')
|
370
|
-
end
|
371
|
-
tenant_id = rhGet(@oConfig.ExtraGet(:hpc_accounts, @sAccountName, :credentials), :tenant_id)
|
372
|
-
tenant_name = nil
|
373
|
-
tenants.each { |elem| tenant_name = elem['name'] if elem['id'] == tenant_id }
|
374
|
-
if tenant_name
|
375
|
-
Logging.debug("Tenant ID '%s': '%s' found." % [tenant_id, tenant_name])
|
376
|
-
hCompute = { :tenant_name => tenant_name }
|
377
|
-
rhSet(@hAccountData, hCompute, :maestro)
|
378
|
-
else
|
379
|
-
Logging.error("Unable to find the tenant Name for '%s' ID." % tenant_id)
|
380
|
-
end
|
381
|
-
@oConfig.set('tenants', tenants)
|
382
|
-
end
|
383
|
-
|
384
|
-
# Setting up DNS information
|
385
|
-
def setup_dns()
|
386
|
-
# Get HPCloud account definition
|
387
|
-
yHPC = @oConfig.ExtraGet(:hpc_accounts, @sAccountName)
|
388
|
-
# Get Forj account definition
|
389
|
-
yDNS = rhGet(@hAccountData, :dns)
|
390
|
-
yDNS = {} if not yDNS
|
391
|
-
|
392
|
-
sAsk = "Optionally, you can ask Maestro to use/manage a domain name on your cloud. It requires your DNS cloud service to be enabled.\nDo you want to configure it?"
|
393
|
-
if agree(sAsk)
|
394
|
-
# Getting tenants
|
395
|
-
tenants = @oConfig.get(:tenants)
|
396
|
-
|
397
|
-
# Question about DNS Tenant ID
|
398
|
-
# In HPCloud : credentials/tenant_id
|
399
|
-
aDNS_TenantIDs = []
|
400
|
-
sDNS_TenantIDs = rhGet(yDNS, :tenant_id)
|
401
|
-
sDNS_TenantIDs = rhGet(yHPC, :credentials, :tenant_id) if not sDNS_TenantIDs and rhExist?(yHPC, :credentials, :tenant_id) > 0
|
402
|
-
|
403
|
-
Logging.message("Following are the list of know project attached to your credentials:")
|
404
|
-
tenants.each do | elem |
|
405
|
-
aDNS_TenantIDs.push(elem['id'])
|
406
|
-
if sDNS_TenantIDs and elem['id'] == sDNS_TenantIDs
|
407
|
-
Logging.message("%s - %s" % [ANSI.bold+elem['id']+ANSI.reset, elem['name']])
|
408
|
-
else
|
409
|
-
Logging.message("%s - %s" % [elem['id'], elem['name']])
|
410
|
-
end
|
411
|
-
end
|
412
|
-
|
413
|
-
sOption = ' [%s]' % aDNS_TenantIDs.join(', ') if aDNS_TenantIDs.length() == 2
|
414
|
-
sDNS_TenantID = ask('Enter DNS Tenant ID:%s' % sOption) do |q|
|
415
|
-
q.default = sDNS_TenantIDs
|
416
|
-
q.validate = /[\w\d]+/
|
417
|
-
end
|
418
|
-
yDNS[:tenant_id] = sDNS_TenantID.to_s
|
419
|
-
|
420
|
-
# Question about DNS Service
|
421
|
-
# In HPCloud : regions/dns
|
422
|
-
if sDNS_TenantID == rhGet(yHPC, :credentials, :tenant_id)
|
423
|
-
sDNS_Service = rhGet(yHPC, :regions, :dns)
|
424
|
-
else
|
425
|
-
aDNS_Services = []
|
426
|
-
aDNS_Services.push(rhGet(yDNS, :service)) if rhExist?(yDNS, :service) > 0
|
427
|
-
|
428
|
-
sDNS_Service = ask("Enter DNS Service for the Tenant ID '%s' (ex: region-a.geo-1): " % sDNS_TenantID) do |q|
|
429
|
-
q.validate = /[\w.-]+/
|
430
|
-
end
|
431
|
-
end
|
432
|
-
yDNS[:service] = sDNS_Service.to_s
|
433
|
-
|
434
|
-
else
|
435
|
-
yDNS.delete(:service)
|
436
|
-
yDNS.delete(:tenant_id)
|
437
|
-
Logging.message("Maestro won't manage any Domain with '%s' provider." % [ rhGet(@hAccountData, [:account, :provider])])
|
438
|
-
end
|
439
|
-
# Question about Domain name
|
440
|
-
previousDomainName = rhGet(yDNS, :domain_name) if rhExist?(yDNS, :domain_name) > 0
|
441
|
-
|
442
|
-
sDNS_DomainName = ask('Enter Domain name to add to hostnames (puppet requirement) (ex: dev.forj.io):') do |q|
|
443
|
-
q.default = previousDomainName if previousDomainName
|
444
|
-
q.validate = /[\w._]+/
|
445
|
-
end
|
446
|
-
yDNS[:domain_name] = sDNS_DomainName.to_s
|
447
|
-
|
448
|
-
# Attaching to the account.
|
449
|
-
rhSet(@hAccountData, yDNS, :dns)
|
450
|
-
end
|
451
|
-
|
452
|
-
# manage keypair attached to a FORJ account.
|
453
|
-
def keypair_setup()
|
454
|
-
|
455
|
-
# Getting Account keypair information
|
456
|
-
yCreds = rhGet(@hAccountData, :credentials)
|
457
|
-
key_name = @oConfig.get(:keypair_name, yCreds )
|
458
|
-
orig_key_path = File.expand_path(@oConfig.get(:keypair_path, yCreds))
|
459
|
-
|
460
|
-
Logging.warning("'keypair_path' is missing at least from defaults.yaml. To fix it, set it in your configuration file ~/.forj/config.yaml under default section") if not orig_key_path
|
461
|
-
|
462
|
-
key_name = ask ("Please provide the keypair name used by default on this account:") do | q |
|
463
|
-
q.default = key_name
|
464
|
-
q.validate = /.*+/
|
465
|
-
end
|
466
|
-
key_name = key_name.to_s
|
467
|
-
|
468
|
-
key_path = nil
|
469
|
-
while not key_path
|
470
|
-
key_path = ask ("Please provide the SSH private key path used by default on this account:") do | q |
|
471
|
-
q.default = orig_key_path
|
472
|
-
q.validate = /.*+/
|
473
|
-
end
|
474
|
-
keys_entered = keypair_detect(key_name, key_path)
|
475
|
-
if not keys_entered[:private_key_exist? ] and not keys_entered[:public_key_exist? ]
|
476
|
-
if agree("The key you entered was not found. Do you want to create this one?")
|
477
|
-
base_dir = keys_entered[:keypair_path]
|
478
|
-
if not File.directory?(base_dir)
|
479
|
-
if agree("'%s' doesn't exist. Do you want to create it?" % base_dir)
|
480
|
-
AppInit.ensure_dir_exists(base_dir)
|
481
|
-
end
|
482
|
-
end
|
483
|
-
else
|
484
|
-
key_path = nil
|
485
|
-
end
|
486
|
-
end
|
487
|
-
end
|
488
|
-
keys_imported = nil
|
489
|
-
keys_imported = keypair_detect(key_name, @oConfig.LocalGet(key_name, :imported_keys)) if @oConfig.LocalExist?(key_name, :imported_keys)
|
490
|
-
|
491
|
-
if keys_imported and keys_imported[:key_basename] != keys_entered[:key_basename] and $FORJ_KEYPAIRS_PATH != keys_entered[:keypair_path]
|
492
|
-
Logging.warning("The private key '%s' was imported from a different private key file '%s'.\nTo not overwrite it, we recommend you to choose a different keypair name." % [key_name, sImportedKey])
|
493
|
-
key_name = nil
|
494
|
-
end
|
495
|
-
|
496
|
-
|
497
|
-
keys = keypair_detect(key_name, key_path)
|
498
|
-
|
499
|
-
Logging.info("Configuring forj keypair '%s'" % [ keys[:keypair_name] ] )
|
500
|
-
|
501
|
-
|
502
|
-
private_key_file = File.join(keys[:keypair_path], keys[:private_key_name])
|
503
|
-
public_key_file = File.join(keys[:keypair_path], keys[:public_key_name])
|
504
|
-
|
505
|
-
|
506
|
-
# Creation sequences
|
507
|
-
if not keys[:private_key_exist? ]
|
508
|
-
# Need to create a key. ask if we need so.
|
509
|
-
Logging.message("The private key file attached to keypair named '%s' is not found. forj will propose to create one for you. Please review the proposed private key file name and path.\nYou can press Enter to accept the default value." % keys[:keypair_name])
|
510
|
-
real_key_path = File.expand_path(ask("Private key file path:") do |q|
|
511
|
-
q.validate = /\w+/
|
512
|
-
q.default = private_key_file
|
513
|
-
end)
|
514
|
-
if not File.exists?(real_key_path)
|
515
|
-
AppInit.ensure_dir_exists(File.dirname(real_key_path))
|
516
|
-
command = 'ssh-keygen -t rsa -f %s' % real_key_path
|
517
|
-
Logging.debug("Executing '%s'" % command)
|
518
|
-
system(command)
|
519
|
-
end
|
520
|
-
if not File.exists?(real_key_path)
|
521
|
-
Logging.fatal(1, "'%s' not found. Unable to add your keypair to hpcloud. Create it yourself and provide it with -p option. Then retry." % [real_key_path])
|
522
|
-
else
|
523
|
-
if real_key_path != key_path and not @oConfig.LocalDefaultExist?('keypair_path')
|
524
|
-
Logging.debug("Saving forj keypair '%s' as default." % [real_key_path] )
|
525
|
-
@oConfig.LocalSet('keypair_path', real_key_path)
|
526
|
-
@oConfig.SaveConfig()
|
527
|
-
end
|
528
|
-
end
|
529
|
-
end
|
530
|
-
|
531
|
-
if not keys[:public_key_exist? ]
|
532
|
-
Logging.message("Your public key '%s' was not found. Getting it from the private one. It may require your passphrase." % [public_key_file])
|
533
|
-
command = 'ssh-keygen -y -f %s > %s' % [private_key_file,public_key_file ]
|
534
|
-
Logging.debug("Executing '%s'" % command)
|
535
|
-
system(command)
|
536
|
-
end
|
537
|
-
|
538
|
-
forj_private_key_file = File.join($FORJ_KEYPAIRS_PATH, key_name )
|
539
|
-
forj_public_key_file = File.join($FORJ_KEYPAIRS_PATH, key_name + ".pub")
|
540
|
-
|
541
|
-
# Saving sequences
|
542
|
-
if keys[:keypair_path] != $FORJ_KEYPAIRS_PATH
|
543
|
-
if not File.exists?(forj_private_key_file)
|
544
|
-
Logging.info("Importing key pair to FORJ keypairs list.")
|
545
|
-
FileUtils.copy(private_key_file, forj_private_key_file)
|
546
|
-
FileUtils.copy(public_key_file, forj_public_key_file)
|
547
|
-
# Attaching this keypair to the account
|
548
|
-
rhSet(@hAccountData, key_name, :credentials, 'keypair_name')
|
549
|
-
rhSet(@hAccountData, forj_private_key_file, :credentials, 'keypair_path')
|
550
|
-
@oConfig.LocalSet(key_name.to_s, private_key_file, :imported_keys)
|
551
|
-
@oConfig.SaveConfig()
|
552
|
-
end
|
553
|
-
end
|
554
|
-
end
|
555
|
-
|
556
|
-
def setup_maestro_creds()
|
557
|
-
# Check required global data
|
558
|
-
if not $FORJ_CREDS_PATH
|
559
|
-
Logging.fatal(1, "Internal error: '$FORJ_CREDS_PATH' missing.")
|
560
|
-
end
|
561
|
-
if not Helpers.dir_exists?($FORJ_CREDS_PATH)
|
562
|
-
Logging.fatal(1, "Internal error: '%s' doesn't exist." % $FORJ_CREDS_PATH)
|
563
|
-
end
|
564
|
-
|
565
|
-
Logging.info("Completing hpcloud account '%s' information." % [@sAccountName] )
|
566
|
-
|
567
|
-
forj_user = rhGet(@hAccountData, :credentials, :os_user)
|
568
|
-
enc_hpcloud_os_key = rhGet(@hAccountData, :credentials, :os_enckey)
|
569
|
-
|
570
|
-
hpcloud_os_user = ask('Enter hpcloud username: ') do |q|
|
571
|
-
q.validate = /\w+/
|
572
|
-
q.default = forj_user if forj_user
|
573
|
-
end
|
574
|
-
|
575
|
-
# Checking key file used to encrypt/decrypt passwords
|
576
|
-
key_file = File.join($FORJ_CREDS_PATH, '.key')
|
577
|
-
if not File.exists?(key_file)
|
578
|
-
# Need to create a random key.
|
579
|
-
entr = {
|
580
|
-
:key => rand(36**10).to_s(36),
|
581
|
-
:salt => Time.now.to_i.to_s,
|
582
|
-
:iv => Base64::strict_encode64(OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv)
|
583
|
-
}
|
584
|
-
|
585
|
-
Logging.debug("Writing '%s' key file" % key_file)
|
586
|
-
File.open(key_file, 'w') do |out|
|
587
|
-
out.write(Base64::encode64(entr.to_yaml))
|
588
|
-
end
|
589
|
-
else
|
590
|
-
Logging.debug("Loading '%s' key file" % key_file)
|
591
|
-
encoded_key = IO.read(key_file)
|
592
|
-
entr = YAML.load(Base64::decode64(encoded_key))
|
593
|
-
end
|
594
|
-
|
595
|
-
if enc_hpcloud_os_key
|
596
|
-
begin
|
597
|
-
hpcloud_os_key_hidden = '*' * Encryptor.decrypt(
|
598
|
-
:value => Base64::strict_decode64(enc_hpcloud_os_key),
|
599
|
-
:key => entr[:key],
|
600
|
-
:iv => Base64::strict_decode64(entr[:iv]),
|
601
|
-
:salt => entr[:salt]
|
602
|
-
).length
|
603
|
-
rescue => e
|
604
|
-
Logging.error("Unable to decrypt your password. You will need to re-enter it.")
|
605
|
-
enc_hpcloud_os_key = ""
|
606
|
-
else
|
607
|
-
hpcloud_os_key_hidden="[%s]" % hpcloud_os_key_hidden
|
608
|
-
Logging.message("A password is already set for '%s'. If you want to keep it, just press Enter" % [hpcloud_os_user])
|
609
|
-
end
|
610
|
-
else
|
611
|
-
hpcloud_os_key_hidden = ""
|
612
|
-
end
|
613
|
-
|
614
|
-
hpcloud_os_key = ""
|
615
|
-
while hpcloud_os_key == ""
|
616
|
-
# ask for password.
|
617
|
-
hpcloud_os_key = ask("Enter hpcloud password for '%s': %s" % [hpcloud_os_user, hpcloud_os_key_hidden]) do |q|
|
618
|
-
q.echo = '*'
|
619
|
-
end
|
620
|
-
if hpcloud_os_key == "" and enc_hpcloud_os_key
|
621
|
-
hpcloud_os_key = Encryptor.decrypt(
|
622
|
-
:value => Base64::strict_decode64(enc_hpcloud_os_key),
|
623
|
-
:key => entr[:key],
|
624
|
-
:iv => Base64::strict_decode64(entr[:iv]),
|
625
|
-
:salt => entr[:salt]
|
626
|
-
)
|
627
|
-
else
|
628
|
-
Logging.message("The password cannot be empty.") if hpcloud_os_key == ""
|
629
|
-
end
|
630
|
-
end
|
631
|
-
enc_hpcloud_os_key = Base64::strict_encode64(
|
632
|
-
Encryptor.encrypt(
|
633
|
-
:value => hpcloud_os_key,
|
634
|
-
:key => entr[:key],
|
635
|
-
:iv => Base64::strict_decode64(entr[:iv]),
|
636
|
-
:salt => entr[:salt]
|
637
|
-
)
|
638
|
-
)
|
639
|
-
|
640
|
-
cloud_fog = File.join($FORJ_CREDS_PATH, @sAccountName+'.g64')
|
641
|
-
|
642
|
-
# Security fix: Remove old temp file with clear password.
|
643
|
-
old_file = '%s/master.forj-13.5' % [$FORJ_CREDS_PATH]
|
644
|
-
File.delete(old_file) if File.exists?(old_file)
|
645
|
-
old_file = '%s/creds' % [$FORJ_CREDS_PATH]
|
646
|
-
File.delete(old_file) if File.exists?(old_file)
|
647
|
-
|
648
|
-
provider_load() if not @oConfig.ExtraExist?(:hpc_accounts, @sAccountName)
|
649
|
-
hpc_creds = @oConfig.ExtraGet(:hpc_accounts, @sAccountName, :credentials)
|
650
|
-
|
651
|
-
rhSet(@hAccountData, hpcloud_os_user.to_s, :credentials, :os_user)
|
652
|
-
rhSet(@hAccountData, enc_hpcloud_os_key, :credentials, :os_enckey)
|
653
|
-
|
654
|
-
IO.popen('gzip -c | base64 -w0 > %s' % [cloud_fog], 'r+') {|pipe|
|
655
|
-
pipe.puts('HPCLOUD_OS_USER=%s' % [hpcloud_os_user] )
|
656
|
-
pipe.puts('HPCLOUD_OS_KEY=%s' % [hpcloud_os_key] )
|
657
|
-
pipe.puts('DNS_KEY=%s' % [hpc_creds[:account_id]] )
|
658
|
-
pipe.puts('DNS_SECRET=%s' % [hpc_creds[:secret_key]])
|
659
|
-
pipe.close_write
|
660
|
-
}
|
661
|
-
Logging.info("'%s' written." % cloud_fog)
|
662
|
-
end
|
663
286
|
# private functions
|
664
287
|
private
|
665
288
|
def _set(section, key, value)
|
data/lib/forj-config.rb
CHANGED
@@ -64,18 +64,18 @@ def rhSet(yVal, value, *p)
|
|
64
64
|
p=p.flatten
|
65
65
|
if p.length() == 1
|
66
66
|
if not yVal.nil?
|
67
|
-
if value
|
67
|
+
if not value.nil?
|
68
68
|
yVal[p[0]] = value
|
69
69
|
else
|
70
70
|
yVal.delete(p[0])
|
71
71
|
end
|
72
72
|
return yVal
|
73
73
|
end
|
74
|
-
if value
|
75
|
-
|
76
|
-
else
|
77
|
-
ret = {}
|
78
|
-
end
|
74
|
+
#~ if value
|
75
|
+
ret = { p[0] => value }
|
76
|
+
#~ else
|
77
|
+
#~ ret = {}
|
78
|
+
#~ end
|
79
79
|
return ret
|
80
80
|
end
|
81
81
|
if not yVal.nil?
|