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