forj 0.0.44 → 0.0.47

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: 2a1aeb1a399ecfab67138cf2cb50b12deff71212
4
- data.tar.gz: 9c46f0ccaeaaca2775b4d897065b10f1d4aea93e
3
+ metadata.gz: a158eb6d8db91610bf6d6b64ccf3454fc5ad4c8a
4
+ data.tar.gz: 86f77c9bac06ba4e14a8e8040fe48da673b428e9
5
5
  SHA512:
6
- metadata.gz: dd00c4f1f397736bf1f3b6cb0fce7c65a1545c927544afafb42cad52271632dcbded52531d643e5a674d3fe39f106e5e1139eae43cd082124555e5da0c9b7ccd
7
- data.tar.gz: b840b30588d58ed512bb1890688aeb50596675d3376cbcaf9bbeb51ab2677723d1c0cef819b2cd5a18ce97755a7cb29d19dced034a8c38e66e8b8a702454583c
6
+ metadata.gz: 961aaf4d7e623dc4a2f6ce7077c9067345d024fce67937bf570e09c5418b1d347ed38b190f526e776a6687f7bec4fe2fecbaf60826d7bdf5f111373b316840d1
7
+ data.tar.gz: 3ee7247de4d5483777eb07f972dac20cd81f1796f37cdfa3fe48700ccf8ef958ee353e6beed692c28d90e7d35057d5300568fd98494804d5e919b7a23c60aa0e
data/Gemfile CHANGED
@@ -19,7 +19,7 @@ source 'https://rubygems.org'
19
19
  group(:development, :test) do
20
20
  gem 'rake'
21
21
  gem 'debugger'
22
- gem 'rspec', "~> 2.10.0", :require => false
22
+ gem 'rspec', "~> 3.1.0", :require => false
23
23
  end
24
24
 
25
25
  gem 'mime-types','1.25.1'
data/bin/forj CHANGED
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
 
18
18
  require 'rubygems'
19
+ require 'bundler/setup'
19
20
  require 'require_relative'
20
21
  require 'thor'
21
22
  require 'ansi'
@@ -93,7 +94,7 @@ forj command line details:
93
94
  end
94
95
 
95
96
  desc 'version', 'get GEM version of forj.'
96
-
97
+
97
98
  def version()
98
99
  if Gem.loaded_specs['forj']
99
100
  puts Gem.loaded_specs['forj'].version.to_s
@@ -111,7 +112,7 @@ This task boot a new forge with the following options
111
112
 
112
113
  Ex: forj boot redstone maestro_test -a dev
113
114
 
114
- When `forj boot` starts, some variables are loaded. If you want to check/updated them, use `forj get [-a account]`
115
+ When `forj boot` starts, some variables are loaded. If you want to check/updated them, use `forj get [-a account]`
115
116
 
116
117
  LONGDESC
117
118
 
@@ -124,7 +125,7 @@ Following options superseed your Account, config file or forj defaults."
124
125
  method_option :key_name, :aliases => '-k', :desc => "config: keypair_name : Keypair name to use."
125
126
  method_option :key_path, :aliases => '-p', :desc => "config: keypair_path : Private or Public key file to use."
126
127
  method_option :security_group, :aliases => '-s', :desc => "config: security_group: Security group name to use and configure."
127
- method_option :image, :aliases => '-i', :desc => "config: image : Image name to use to build Maestro and blueprint nodes."
128
+ method_option :image_name, :aliases => '-i', :desc => "config: image_name : Image name to use to build Maestro and blueprint nodes."
128
129
  method_option :maestro_flavor, :aliases => '-f', :desc => "config: flavor : Maestro flavor to use."
129
130
  method_option :bp_flavor, :aliases => '-b', :desc => "config: bp_flavor : Blueprint nodes default flavor to use.
130
131
 
@@ -166,12 +167,12 @@ Maestro/infra bootstrap debugging:"
166
167
  oConfig.set(:account_name, options[:account_name]) if options[:account_name]
167
168
  oForjAccount = ForjAccount.new(oConfig)
168
169
  oForjAccount.ac_load()
169
-
170
+
170
171
  oConfig.set(:infra_repo, options[:infra])
171
172
  oConfig.set(:keypair_name, options[:key_name])
172
173
  oConfig.set(:keypair_path, options[:key_path])
173
174
  oConfig.set(:security_group, options[:security_group])
174
- oConfig.set(:image, options[:image])
175
+ oConfig.set(:image_name, options[:image])
175
176
  oConfig.set(:flavor, options[:maestro_flavor])
176
177
  oConfig.set(:bp_flavor, options[:bp_flavor])
177
178
  oConfig.set(:maestro_repo , options[:maestro_repo])
@@ -252,7 +253,7 @@ Warning! This action don't removed any network/security groups cloud object.
252
253
  oConfig = ForjConfig.new(options[:config])
253
254
  oConfig.set(:account_name, options[:account_name]) if options[:account_name]
254
255
  oForjAccount = ForjAccount.new(oConfig)
255
- oForjAccount.ac_load()
256
+ oForjAccount.ac_load()
256
257
 
257
258
  Down.down(oForjAccount, name)
258
259
  end
@@ -297,7 +298,7 @@ Ex: By default, forj use ~/.ssh/forj-id_rsa as keypair for all forge instance. D
297
298
  Forj::Settings::config_show_all(oConfig)
298
299
 
299
300
  elsif p.length == 0 and options[:account_name]
300
- Forj::Settings::account_show_all(oConfig, options[:account_name])
301
+ Forj::Settings::account_show_all(oConfig, options[:account_name])
301
302
 
302
303
  elsif p.length != 0 and options[:account_name]
303
304
  Forj::Settings::account_set(oConfig, options[:account_name], p)
@@ -337,13 +338,13 @@ Ex: To get the keypair_name defined from the account, or from your ~/.forj/confi
337
338
  oConfig = ForjConfig.new()
338
339
  if not options[:account_name] and not key
339
340
  Forj::Settings::config_get_all(oConfig)
340
-
341
+
341
342
  elsif options[:account_name] and key
342
343
  Forj::Settings::account_get(oConfig, options[:account_name], key)
343
-
344
+
344
345
  elsif not options[:account_name] and key
345
346
  Forj::Settings::config_get(oConfig, key)
346
-
347
+
347
348
  else
348
349
  Forj::Settings::account_get_all(oConfig, options[:account_name])
349
350
  end
data/lib/boot.rb CHANGED
@@ -54,20 +54,29 @@ module Boot
54
54
 
55
55
  infra_dir = File.expand_path(oConfig.get(:infra_repo))
56
56
 
57
-
58
- # Check about infra repo compatibility with forj cli
59
- bBuildInfra = Repositories.infra_rebuild_required?(oConfig, infra_dir)
60
-
61
57
  # Ask information if needed.
62
58
  if not Dir.exist?(File.expand_path(infra_dir))
63
- sAsk = 'Your \'%s\' infra directory doesn\'t exist. Do you want to create a new one from Maestro(repo github)/templates/infra (yes/no)?' % [infra_dir]
59
+ Logging.warning(<<-END
60
+ Your infra workspace directory is missing.
61
+
62
+ Forj uses an infra workspace directory to store any kind of data that are private to you.
63
+ We provides ways to send those data securily to your new Forge instance, as metadata.
64
+ In production case, we suggest you to keep it safe in your SCM preferred database.
65
+
66
+ If you already have an existing infra workspace, use 'forj set infra_repo=<PathToYourRepo>' to set it and restart.
67
+
68
+ Otherwise, we will build a new one with some predefined data, you can review and update later.
69
+ END
70
+ )
71
+ sAsk = "Do you want to create a new one from Maestro (yes/no)?" % [infra_dir]
64
72
  bBuildInfra=agree(sAsk)
73
+ if not bBuildInfra
74
+ puts 'Process aborted on your demand.'
75
+ exit 0
76
+ end
65
77
  else
66
- Logging.info('Re-using your infra... in \'%s\'' % [infra_dir]) if not bBuildInfra
67
- end
68
- if not Dir.exist?(File.expand_path(infra_dir)) and not bBuildInfra
69
- Logging.info('Exiting.')
70
- return
78
+ # Check about infra repo compatibility with forj cli
79
+ bBuildInfra = Repositories.infra_rebuild_required?(oConfig, infra_dir)
71
80
  end
72
81
 
73
82
  # Get FORJ DNS setting
@@ -78,22 +87,41 @@ module Boot
78
87
 
79
88
  # Step Maestro Clone
80
89
  if not oConfig.get(:maestro_repo)
81
- Logging.info('cloning maestro repo from \'%s\'...' % maestro_url)
82
- Repositories.clone_repo(maestro_url)
90
+ Logging.state("cloning maestro repo from '%s' - branch '%s'" % [maestro_url, branch])
91
+ Repositories.clone_repo(maestro_url, oConfig)
83
92
  maestro_repo=File.expand_path('~/.forj/maestro')
84
93
  else
85
94
  maestro_repo=File.expand_path(oConfig.get(:maestro_repo))
86
- if not File.exists?('%s/templates/infra/maestro.box.%s.env' % [maestro_repo, branch])
87
- Logging.fatal(1, "'%s' is not a recognized Maestro repository. forj cli searched for templates/infra/maestro.box.%s.env" % [maestro_repo, branch])
95
+ if not File.exists?('%s/templates/infra/maestro.box.master.env' % [maestro_repo])
96
+ msg = <<-END
97
+ '#{maestro_repo}' is not a recognized Maestro repository or is too old. forj cli searched for templates/infra/maestro.box.master.env
98
+
99
+ Suggestion:
100
+ 1. Clone #{maestro_url} to a different location.
101
+ $ mkdir -p ~/src/forj-oss
102
+ $ cd ~/src/forj-oss
103
+ $ git clone #{maestro_url}
104
+ 2. Use this master branch of maestro repository with forj
105
+ $ forj set maestro_repo=~/src/forj-oss/maestro
106
+
107
+ then retry your boot.
108
+ END
109
+ Logging.fatal(1, msg)
88
110
  end
89
- Logging.info('Using your maestro cloned repo \'%s\'...' % maestro_repo)
111
+ Logging.info("Using your maestro cloned repo '%s'" % maestro_repo)
90
112
  end
91
113
 
114
+ bBuildInfra = Repositories.infra_rebuild(oConfig, infra_dir) unless bBuildInfra
115
+
92
116
  if bBuildInfra
93
- Logging.info('Building your infra... in \'%s\'' % [infra_dir])
117
+ Logging.info("Building your infra... in '%s'" % [infra_dir])
94
118
  Repositories.create_infra(maestro_repo, branch)
119
+ else
120
+ Logging.info("Re-using your infra... in '%s'" % [infra_dir]) if not bBuildInfra
95
121
  end
96
122
 
123
+ Repositories.ensure_build_env_file(maestro_url, maestro_repo, branch)
124
+
97
125
  # Connect to services
98
126
  oFC=ForjConnection.new(oConfig)
99
127
 
@@ -135,8 +163,8 @@ module Boot
135
163
  oBuildEnv.set('FORJ_SECURITY_GROUP', oConfig.get('security_group'))
136
164
  oBuildEnv.set('FORJ_KEYPAIR', oConfig.get('keypair_name'))
137
165
  oBuildEnv.set('FORJ_HPC_NOVA_KEYPUB', oConfig.get('keypair_path') + '.pub')
138
- oBuildEnv.set('FORJ_BASE_IMG', oConfig.get('image'))
139
- oBuildEnv.set('FORJ_FLAVOR', oConfig.get('flavor'))
166
+ oBuildEnv.set('FORJ_BASE_IMG', oConfig.get('image_name'))
167
+ oBuildEnv.set('FORJ_FLAVOR', oConfig.get('flavor_name'))
140
168
  oBuildEnv.set('FORJ_BP_FLAVOR', oConfig.get('bp_flavor'))
141
169
  oBuildEnv.set('FORJ_TENANT_NAME', oConfig.get(:tenant_name))
142
170
  oBuildEnv.set('FORJ_HPC_COMPUTE', rhGet(oConfig.oConfig.ExtraGet(:hpc_accounts, oFC.sAccountName, :regions), :compute))
data/lib/defaults.yaml CHANGED
@@ -19,12 +19,12 @@
19
19
  :infra_repo: ~/.forj/infra
20
20
 
21
21
  # You can set proto2b in your ~/.forj/config.yaml if you built it from maestro/build. Read the maestro/README.md to create it.
22
- :image: Ubuntu Precise 12.04.4 LTS Server 64-bit 20140414 (Rescue Image)
22
+ :image_name: Ubuntu Precise 12.04.4 LTS Server 64-bit 20140414 (Rescue Image)
23
23
 
24
24
  # Flavor to use for Maestro
25
- :flavor: standard.medium
25
+ :flavor: medium
26
26
  # Default flavor to use for all Blueprint nodes.
27
- :bp_flavor: standard.small
27
+ :bp_flavor: small
28
28
 
29
29
  # Ports to open for Maestro, added to the security group
30
30
  :security_group: forj
@@ -164,9 +164,10 @@
164
164
  :desc: "forj cli use 'build.sh' to create Maestro. See build_config option on build.sh to get more information. By default 'box'"
165
165
  :bp_flavor:
166
166
  :desc: "Blueprint nodes default flavor. Usually, blueprint node are smaller than Maestro."
167
- :flavor:
167
+ :flavor_name:
168
168
  :desc: "Maestro Flavor name. This flavor is for Maestro only. Your blueprint layout defines each node flavors on needs."
169
- :image:
169
+ :default: :flavor
170
+ :image_name:
170
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)'"
171
172
  :ports:
172
173
  :desc: "List of security group rules (1 port or range of ports) to open to the external network."
data/lib/forj-account.rb CHANGED
@@ -132,6 +132,10 @@ class ForjAccount
132
132
  @oConfig.get(default_key , default )
133
133
  end
134
134
 
135
+ def [](key, default = nil)
136
+ get(key, default)
137
+ end
138
+
135
139
  def exist?(key)
136
140
  return nil if not key
137
141
 
@@ -232,6 +236,10 @@ class ForjAccount
232
236
  _set(section, key, value)
233
237
  end
234
238
 
239
+ def []=(key, value)
240
+ set(key, value)
241
+ end
242
+
235
243
  def del(key)
236
244
  return nil if not key
237
245
 
data/lib/forj-config.rb CHANGED
@@ -372,6 +372,10 @@ class ForjConfig
372
372
  true
373
373
  end
374
374
 
375
+ def []=(key, value)
376
+ set(key, value)
377
+ end
378
+
375
379
  def runtimeExist?(key)
376
380
  (rhExist?(@yRuntime, key) == 1)
377
381
  end
@@ -419,6 +423,10 @@ class ForjConfig
419
423
  default
420
424
  end
421
425
 
426
+ def [](key, default = nil)
427
+ get(key, default)
428
+ end
429
+
422
430
  def getAppDefault(section, key = nil)
423
431
 
424
432
  key = key.to_sym if key.class == String
data/lib/log.rb CHANGED
@@ -35,12 +35,12 @@ module Logging
35
35
 
36
36
  class ForjLog
37
37
  # Class used to create 2 log object, in order to keep track of error in a log file and change log output to OUTPUT on needs (option flags).
38
-
38
+
39
39
  attr_reader :level
40
40
 
41
41
  def initialize(sLogFile = 'forj.log', level = Logger::WARN)
42
-
43
- if not $FORJ_DATA_PATH
42
+
43
+ if not $FORJ_DATA_PATH
44
44
  raise "Internal Error: Unable to initialize ForjLog - global FORJ_DATA_PATH not set"
45
45
  end
46
46
 
@@ -50,16 +50,16 @@ module Logging
50
50
 
51
51
  @oFileLogger = Logger.new(File.join($FORJ_DATA_PATH, sLogFile), 'weekly')
52
52
  @oFileLogger.level = Logger::DEBUG
53
- @oFileLogger.formatter = proc do |severity, datetime, progname, msg|
53
+ @oFileLogger.formatter = proc do |severity, datetime, progname, msg|
54
54
  "#{progname} : #{datetime}: #{severity}: #{msg} \n"
55
- end
56
-
55
+ end
56
+
57
57
  @oOutLogger = Logger.new(STDOUT)
58
58
  @level = level
59
59
  @oOutLogger.level = @level
60
- @oOutLogger.formatter = proc do |severity, datetime, progname, msg|
60
+ @oOutLogger.formatter = proc do |severity, datetime, progname, msg|
61
61
  severity == 'ANY'?"#{msg} \n":"#{severity}: #{msg} \n"
62
- end
62
+ end
63
63
  end
64
64
 
65
65
  def info?
@@ -74,7 +74,7 @@ module Logging
74
74
  def fatal?
75
75
  return(@oOutLogger.fatal?)
76
76
  end
77
-
77
+
78
78
  def info(message)
79
79
  @oOutLogger.info(message + ANSI.clear_line)
80
80
  @oFileLogger.info(message)
@@ -90,7 +90,7 @@ module Logging
90
90
  def fatal(message, e)
91
91
  @oOutLogger.fatal(message + ANSI.clear_line)
92
92
  @oFileLogger.fatal("%s\n%s\n%s" % [message, e.message, e.backtrace.join("\n")]) if e
93
- @oFileLogger.fatal(message)
93
+ @oFileLogger.fatal(message)
94
94
  end
95
95
 
96
96
  def warn(message)
@@ -106,21 +106,21 @@ module Logging
106
106
  def unknown(message)
107
107
  @oOutLogger.unknown(message + ANSI.clear_line)
108
108
  end
109
-
109
+
110
110
  end
111
-
111
+
112
112
  def message(message)
113
113
  $FORJ_LOGGER.unknown(message)
114
114
  end
115
-
115
+
116
116
  def info(message)
117
117
  $FORJ_LOGGER.info(message)
118
118
  end
119
-
119
+
120
120
  def debug(message)
121
121
  $FORJ_LOGGER.debug(message)
122
122
  end
123
-
123
+
124
124
  def warning(message)
125
125
  $FORJ_LOGGER.warn(message)
126
126
  end
@@ -128,7 +128,7 @@ module Logging
128
128
  def error(message)
129
129
  $FORJ_LOGGER.error(message)
130
130
  end
131
-
131
+
132
132
  def fatal(rc, message, e = nil)
133
133
  $FORJ_LOGGER.fatal(message, e)
134
134
  puts 'Issues found. Please fix it and retry. Process aborted.'
@@ -138,11 +138,11 @@ module Logging
138
138
  def set_level(level)
139
139
  $FORJ_LOGGER.set_level(level)
140
140
  end
141
-
141
+
142
142
  def state(message)
143
- print("%s ...%s\r" % [message, ANSI.clear_line]) if $FORJ_LOGGER.level == Logger::INFO
143
+ print("%s ...%s\r" % [message, ANSI.clear_line]) if $FORJ_LOGGER.level <= Logger::INFO
144
144
  end
145
-
145
+
146
146
  def high_level_msg(message)
147
147
  # Not DEBUG and not INFO. Just printed to the output.
148
148
  puts ("%s" % [message]) if $FORJ_LOGGER.level > 1
data/lib/repositories.rb CHANGED
@@ -30,10 +30,10 @@ include YamlParse
30
30
  #
31
31
 
32
32
  # Current version of the infra. Compatible with forj version or higher.
33
- INFRA_VERSION = "37"
33
+ $INFRA_VERSION = "0.0.37"
34
34
 
35
35
  module Repositories
36
- def clone_repo(maestro_url)
36
+ def clone_repo(maestro_url, oConfig)
37
37
  current_dir = Dir.pwd
38
38
 
39
39
  home = File.expand_path('~')
@@ -44,7 +44,9 @@ module Repositories
44
44
  if File.directory?(path + 'maestro')
45
45
  FileUtils.rm_r path + 'maestro'
46
46
  end
47
- Git.clone(maestro_url, 'maestro', :path => path)
47
+ git = Git.clone(maestro_url, 'maestro', :path => path)
48
+ git.checkout(oConfig[:branch]) if oConfig[:branch] != 'master'
49
+ Logging.info("Maestro repo '%s' cloned on branch '%s'" % [path, oConfig[:branch]])
48
50
  end
49
51
  rescue => e
50
52
  Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
@@ -54,7 +56,35 @@ module Repositories
54
56
  Dir.chdir(current_dir)
55
57
  end
56
58
 
59
+ def ensure_build_env_file(maestro_url, maestro_repo, branch)
60
+ infra = File.join($FORJ_DATA_PATH, 'infra')
61
+ template = File.join(maestro_repo, 'templates', 'infra')
62
+
63
+ template_file = 'maestro.box.master.env'
64
+ env_file = 'maestro.box.' + branch + '.env'
65
+
66
+ source_build_env = File.join(template, template_file)
67
+ dest_build_env = File.join(infra, env_file)
68
+
69
+ if not File.exist?(source_build_env)
70
+ raise <<-END
71
+ Your Maestro repository branch is too old.
72
+ Suggestion:
73
+ 1. Clone #{maestro_url} to a different location.
74
+ $ mkdir -p ~/src/forj-oss
75
+ $ cd ~/src/forj-oss
76
+ $ git clone #{maestro_url}
77
+ 2. Use this master branch of maestro repository with forj
78
+ $ forj set maestro_repo=~/src/forj-oss/maestro
79
+
80
+ then retry your boot.
81
+ END
82
+ end
83
+ return if File.exist?(dest_build_env)
57
84
 
85
+ Logging.info("Creating '%s' to '%s'" % [source_build_env, dest_build_env])
86
+ FileUtils.copy(source_build_env, dest_build_env)
87
+ end
58
88
 
59
89
  def create_infra(maestro_repo, branch)
60
90
  # Build our own infra from maestro infra templates.
@@ -68,26 +98,39 @@ module Repositories
68
98
  FileUtils.rm_r(infra)
69
99
  end
70
100
  AppInit.ensure_dir_exists(dest_cloud_init)
101
+ if not File.exist?(cloud_init)
102
+ raise <<-END
103
+ Your Maestro repository branch is too old.
104
+ Suggestion:
105
+ 1. Clone %s to a different location.
106
+ $ mkdir -p ~/src/forj-oss
107
+ $ cd ~/src/forj-oss
108
+ $ git clone %s
109
+ 2. Use this master branch of maestro repository with forj
110
+ $ forj set maestro_repo=~/src/forj-oss/maestro
111
+
112
+ then retry your boot.
113
+ END
114
+ end
71
115
  Logging.debug("Copying recursively '%s' to '%s'" % [cloud_init, infra])
72
116
  FileUtils.copy_entry(cloud_init, dest_cloud_init)
73
117
 
74
- template_file = 'maestro.box.' + branch + '.env'
75
- build_env = File.join(template,template_file)
76
- Logging.debug("Copying '%s' to '%s'" % [build_env, infra])
77
- FileUtils.copy(build_env, infra)
78
-
79
118
  file_ver = File.join(infra, 'forj-cli.ver')
80
119
  File.write(file_ver, $INFRA_VERSION)
81
120
  end
82
-
121
+
122
+ # Infra repository compatibility
123
+ # < 0.0.37 - Use a template file of build env file.
124
+ # => Migration required.
125
+ # >= 0.0.37 - Using a generic version of build env file, fully managed by forj cli.
126
+ # => No migration
127
+
83
128
  def infra_rebuild_required?(oConfig, infra_dir)
84
129
  # This function check if the current infra is compatible with current gem version.
85
-
86
- # prior 0.0.37 - Use a template file of build env file.
87
- # 0.0.37 - Using a generic version of build env file, fully managed by forj cli.
130
+
88
131
  return false if not File.exists?(infra_dir)
89
-
90
- if infra_dir != File.join($FORJ_DATA_PATH, 'infra')
132
+
133
+ if infra_dir != File.join($FORJ_DATA_PATH, 'infra')
91
134
  # Do not take care. We do not manage it, ourself.
92
135
  return false
93
136
  end
@@ -97,23 +140,33 @@ module Repositories
97
140
  forj_infra_version = File.read(file_ver) if File.exist?(file_ver)
98
141
 
99
142
  if forj_infra_version
100
- case forj_infra_version
101
- when $INFRA_VERSION
102
- return false
103
- else
104
- old_infra_data_update(oConfig, forj_infra_version, infra_dir)
105
- end
106
- else # Prior version 37
107
- old_infra_data_update(oConfig, 36, infra_dir)
108
- end
143
+ return false if Gem::Version.new(forj_infra_version) == Gem::Version.new($INFRA_VERSION)
144
+ return true if Gem::Version.new(forj_infra_version) < Gem::Version.new($INFRA_VERSION)
145
+ end
146
+ # Before version 0.0.37, version file did not exist. So return true
109
147
  true
110
148
  end
111
-
149
+
150
+ def infra_rebuild(oConfig, infra_dir)
151
+ return false if not File.exists?(infra_dir)
152
+
153
+ file_ver = File.join(infra_dir, 'forj-cli.ver')
154
+ forj_infra_version = nil
155
+ forj_infra_version = File.read(file_ver) if File.exist?(file_ver)
156
+
157
+ if forj_infra_version.nil? or forj_infra_version == ""
158
+ # Prior version 37
159
+ return(old_infra_data_update(oConfig, '0.0.36', infra_dir))
160
+ elsif Gem::Version.new(forj_infra_version) < Gem::Version.new($INFRA_VERSION)
161
+ return(old_infra_data_update(oConfig, forj_infra_version, infra_dir))
162
+ end
163
+ end
164
+
112
165
  def old_infra_data_update(oConfig, version, infra_dir)
113
- Logging.info("Migrating your local infra repo to the latest version.")
114
- # Supporting old version.
166
+ Logging.info("Migrating your local infra repo (%s) to the latest version." % version)
167
+ bRebuild = false # Be default migration is successful. No need to rebuild it.
115
168
  case version
116
- when 36
169
+ when '0.0.36'
117
170
  # Moving from 0.0.36 or less to 0.0.37 or higher.
118
171
  # SET_COMPUTE="{SET_COMPUTE!}" => Setting for Compute. ignored. Coming from HPC
119
172
  # SET_TENANT_NAME="{SET_TENANT_NAME!}" => Setting for Compute. ignored. Need to query HPC from current Tenant ID
@@ -124,46 +177,52 @@ module Repositories
124
177
  # SET_DNS_ZONE="{SET_DNS_ZONE!}" => Setting for DNS. meta = dns_zone
125
178
  # ==> :forj_accounts, sAccountName, :dns, :service
126
179
 
127
- # SET_DOMAIN="{SET_DOMAIN!}" => Setting for Maestro (required) and DNS if enabled.
180
+ # SET_DOMAIN="{SET_DOMAIN!}" => Setting for Maestro (required) and DNS if enabled.
128
181
  # ==> :forj_accounts, sAccountName, :dns, :domain_name
129
182
  sAccountName = oConfig.get(:account_name)
130
183
 
131
184
  yDns = {}
132
185
  yDns = oConfig.oConfig.ExtraGet(:forj_accounts, sAccountName, :dns) if oConfig.oConfig.ExtraExist?(:forj_accounts, sAccountName, :dns)
133
- build_env = File.join(infra_dir, 'maestro.box.master.env')
134
- Logging.debug("Reading data from '%s'" % build_env)
135
- tags = {'SET_DNS_TENANTID' => :tenant_id,
136
- 'SET_DNS_ZONE' => :service,
137
- 'SET_DOMAIN' => :domain_name
138
- }
139
- begin
140
- bUpdate = nil
141
-
142
- File.open(build_env) do |f|
143
- f.each_line do |line|
144
- mObj = line.match(/^(SET_[A-Z_]+)=["'](.*)["'].*$/)
145
- if mObj
146
- Logging.debug("Reviewing detected '%s' tag" % [mObj[1]])
147
- tag = (tags[mObj[1]]? tags[mObj[1]] : nil)
148
- if tag and mObj[2]
149
- if bUpdate == nil and rhGet(yDns, tag) and rhGet(yDns, tag) != mObj[2]
150
- Logging.message("Your account setup is different than build env.")
151
- Logging.message("We suggest you to update your account setup with data from your build env.")
152
- bUpdate = agree("Do you want to update your setup with those build environment data?")
153
- end
154
- if bUpdate != nil and bUpdate
155
- Logging.debug("Saved: '%s' = '%s'" % [mObj[1],mObj[2]])
156
- rhSet(yDns, mObj[2], tag)
186
+ Dir.foreach(infra_dir) do | file |
187
+ next if not /^maestro\.box\..*\.env$/ =~ file
188
+ build_env = File.join(infra_dir, file)
189
+ Logging.debug("Reading data from '%s'" % build_env)
190
+ tags = {'SET_DNS_TENANTID' => :tenant_id,
191
+ 'SET_DNS_ZONE' => :service,
192
+ 'SET_DOMAIN' => :domain_name
193
+ }
194
+ begin
195
+ bUpdate = nil
196
+
197
+ File.open(build_env) do |f|
198
+ f.each_line do |line|
199
+ mObj = line.match(/^(SET_[A-Z_]+)=["'](.*)["'].*$/)
200
+ if mObj
201
+ Logging.debug("Reviewing detected '%s' tag" % [mObj[1]])
202
+ tag = (tags[mObj[1]]? tags[mObj[1]] : nil)
203
+ if tag and mObj[2]
204
+ if bUpdate == nil and rhGet(yDns, tag) and rhGet(yDns, tag) != mObj[2]
205
+ Logging.message("Your account setup is different than build env.")
206
+ Logging.message("We suggest you to update your account setup with data from your build env.")
207
+ bUpdate = agree("Do you want to update your setup with those build environment data?")
208
+ end
209
+ if bUpdate != nil and bUpdate
210
+ Logging.debug("Saved: '%s' = '%s'" % [mObj[1],mObj[2]])
211
+ rhSet(yDns, mObj[2], tag)
212
+ end
157
213
  end
158
214
  end
159
215
  end
160
216
  end
217
+ rescue => e
218
+ Logging.fatal(1, "Failed to open the build environment file '%s'" % build_env, e)
161
219
  end
162
- rescue => e
163
- Logging.fatal(1, "Unable to open the build environment file to migrate it", e)
164
220
  end
165
- oConfig.ExtraSet(:forj_accounts, sAccountName, :dns, yDns)
166
- oConfig.ExtraSave(File.join($FORJ_ACCOUNTS_PATH, sAccountName), :forj_accounts, sAccountName)
221
+ file_ver = File.join(infra_dir, 'forj-cli.ver')
222
+ File.write(file_ver, $INFRA_VERSION)
223
+ oConfig.oConfig.ExtraSet(:forj_accounts, sAccountName, :dns, yDns)
224
+ oConfig.oConfig.ExtraSave(File.join($FORJ_ACCOUNTS_PATH, sAccountName), :forj_accounts, sAccountName)
225
+ return bRebuild
167
226
  end
168
227
  end
169
228
  end
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
 
18
18
  require 'rubygems'
19
+ require 'bundler/setup'
19
20
  require 'spec_helper'
20
21
 
21
22
  require 'fog'
@@ -15,6 +15,9 @@
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'
20
+
18
21
  $APP_PATH = File.dirname(__FILE__)
19
22
  $LIB_PATH = File.expand_path(File.join(File.dirname($APP_PATH),'lib'))
20
23
  $FORJ_DATA_PATH= File.expand_path('~/.forj')
@@ -16,11 +16,23 @@
16
16
  # limitations under the License.
17
17
 
18
18
  require 'rubygems'
19
+ require 'bundler/setup'
19
20
  require 'spec_helper'
20
21
 
21
22
  require 'ansi'
22
23
  require 'fog'
23
24
 
25
+ $APP_PATH = File.dirname(__FILE__)
26
+ $LIB_PATH = File.expand_path(File.join(File.dirname($APP_PATH),'lib'))
27
+ $FORJ_DATA_PATH= File.expand_path('~/.forj')
28
+
29
+ $LOAD_PATH << './lib'
30
+
31
+ require 'forj-config.rb' # Load class ForjConfig
32
+ require 'log.rb' # Load default loggers
33
+ include Logging
34
+ $FORJ_LOGGER=ForjLog.new('forj-rspec.log', Logger::FATAL)
35
+
24
36
  require_relative '../lib/repositories.rb'
25
37
  include Repositories
26
38
 
@@ -31,8 +43,8 @@ describe 'repositories' do
31
43
  it 'should clone the repo' do
32
44
  @test_class = TestClass.new
33
45
  @test_class.extend(Repositories)
34
-
35
- repo = @test_class.clone_repo('https://github.com/forj-oss/cli')
46
+ oConfig = ForjConfig.new
47
+ repo = @test_class.clone_repo('https://github.com/forj-oss/cli', oConfig)
36
48
  expect(repo).to be
37
49
  end
38
50
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.44
4
+ version: 0.0.47
5
5
  platform: ruby
6
6
  authors:
7
7
  - forj team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-07 00:00:00.000000000 Z
11
+ date: 2014-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor