lib/boot.rb in forj-0.0.31 vs lib/boot.rb in forj-0.0.32

- old
+ new

@@ -13,13 +13,13 @@ # distributed under the License is distributed on an "AS IS" BASIS, # 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 'require_relative' + + require_relative 'network.rb' include Network require_relative 'yaml_parse.rb' include YamlParse require_relative 'security.rb' @@ -34,62 +34,76 @@ # # Boot module # module Boot def boot(blueprint, cloud_provider, name, - build, build_config_dir, build_config, + build, infra_dir, build_config, branch, git_repo, boothook, box_name, key_name, key_path, region, catalog, test = false) begin - initial_msg = 'booting %s on %s' % [blueprint , cloud_provider] + initial_msg = 'booting %s on %s (~/.forj/forj.log)' % [blueprint , cloud_provider] Logging.info(initial_msg) - puts (initial_msg) + puts ('INFO: Reading default configuration...') forj_dir = File.expand_path(File.dirname(__FILE__)) Dir.chdir(forj_dir) + #TODO: Consider defaults.yaml as default variables, and load more from ~/.forj/forj-config.yaml, to change defaults on user need. if catalog definitions = YamlParse.get_values(catalog) else - definitions = YamlParse.get_values('catalog.yaml') + definitions = YamlParse.get_values('defaults.yaml') end + + # Initialize defaults + maestro_url = definitions['default']['maestro_url'] - maestro_url = definitions['default']['maestro'] + infra_dir = definitions['default']['infra_repo'] unless infra_dir - Repositories.clone_repo(maestro_url) - infra_exists = nil + # Ask information if needed. + bBuildInfra=false + if not Dir.exist?(File.expand_path(infra_dir)) + 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] + bBuildInfra=agree(sAsk) + else + puts('INFO: Re-using your infra... in \'%s\'' % [infra_dir]) + end + if not Dir.exist?(File.expand_path(infra_dir)) and not bBuildInfra + puts ('Exiting.') + return + end - begin - if File.directory?(definitions[blueprint]['infra']) - infra_exists = true - else - Repositories.create_infra - end - rescue => e - infra_exists = false - puts e.message + # Step Maestro Clone + puts('INFO: cloning maestro repo from \'%s\'...' % maestro_url) + Repositories.clone_repo(maestro_url) + + if bBuildInfra + puts('INFO: Building your infra... in \'%s\'' % [infra_dir]) + Repositories.create_infra end - - network = Network.get_or_create_network(definitions[blueprint]['network']) + puts('INFO: Configuring network \'%s\'' % [definitions['default']['network']]) + network = Network.get_or_create_network(definitions['default']['network']) begin subnet = Network.get_or_create_subnet(network.id, name) - router = Network.get_router(definitions[blueprint]['router']) + router = Network.get_router(definitions['default']['router']) Network.create_router_interface(subnet.id, router) rescue => e puts e.message end - security_group = SecurityGroup.get_or_create_security_group(definitions[blueprint]['security_group']) - key_name = definitions[blueprint]['keypair_name'] unless key_name - key_path = definitions[blueprint]['keypair_path'] unless key_path + puts('INFO: Configuring keypair \'%s\'' % [definitions['default']['keypair_name']]) + key_name = definitions['default']['keypair_name'] unless key_name + key_path = definitions['default']['keypair_path'] unless key_path SecurityGroup.upload_existing_key(key_name, key_path) - ports = definitions[blueprint]['ports'] + puts('INFO: Configuring Security Group \'%s\'' % [definitions['default']['security_group']]) + security_group = SecurityGroup.get_or_create_security_group(definitions['default']['security_group']) + ports = definitions['default']['ports'] ports.each do|port| Network.get_or_create_rule(security_group.id, 'tcp', port, port) end @@ -100,34 +114,31 @@ if region ENV['FORJ_REGION'] = region end # run build.sh to boot maestro + puts current_dir = Dir.pwd home = Helpers.get_home_path build_path = home + '/.forj/maestro/build' Dir.chdir(build_path) build = 'bin/build.sh' unless build - if infra_exists - build_config_dir = definitions[blueprint]['infra'] unless build_config_dir - else - build_config_dir = definitions[blueprint]['build_config_dir'] unless build_config_dir - end + build_config = definitions['default']['build_config'] unless build_config - build_config = definitions[blueprint]['build_config'] unless build_config + branch = definitions['default']['branch'] unless branch - branch = definitions[blueprint]['branch'] unless branch + box_name = definitions['default']['box_name'] unless box_name - box_name = definitions[blueprint]['box_name'] unless box_name + meta = '--meta blueprint=%s' % [blueprint] - meta = '--meta blueprint=%s --meta HPCLOUD_PRIV=~/.cache/forj/master.forj-13.5.g64' % [blueprint] + command = '%s --build_ID %s --box-name %s --build-conf-dir %s --build-config %s --gitBranch %s --debug-box %s' % [build, name, box_name, infra_dir, build_config, branch, meta] - command = '%s --build_ID %s --box-name %s --build-conf-dir %s --build-config %s --gitBranch %s --debug-box %s' % [build, name, box_name, build_config_dir, build_config, branch, meta] - - Logging.info('using build.sh for %s' % [name]) + Logging.info('Calling build.sh') + Logging.info(command) + Kernel.system(command) Dir.chdir(current_dir) if test puts 'test flag is on, deleting objects' @@ -140,8 +151,11 @@ msg = '%s interrupted by user' % [name] puts msg Logging.info(msg) rescue StandardError => e Logging.error(e.message) + puts e.backtrace.join("\n") + + puts e.message end end end