#!/usr/bin/env ruby # encoding: UTF-8 # (c) Copyright 2014 Hewlett-Packard Development Company, L.P. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # 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 'thor' require_relative '../lib/boot.rb' include Boot require_relative '../lib/down.rb' include Down require_relative '../lib/setup.rb' include Setup require_relative '../lib/ssh.rb' include Ssh $APP_PATH = File.dirname(__FILE__) $LIB_PATH = File.expand_path(File.join(File.dirname($APP_PATH),'lib')) $FORJ_DATA_PATH= File.expand_path('~/.forj') $LOAD_PATH << './lib' require 'forj-config.rb' # Load class ForjConfig class Forj < Thor 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) else puts <<-LONGDESC Quick steps: How to create a forj? ---------------------------------- 1. Setup your first forj account. `$ forj setup [Provider]` Ex: `forj setup hpcloud`. In this example, your account will be named 'hpcloud'. IMPORTANT NOTE: Without any provider, forj setup will choose 'hpcloud' as provider. Currently, forj supports only hpcloud. Openstack will be available soon. 2. Create your forge on your default account `$ forj boot on as ` Ex: `forj boot redstone on hpcloud as MyForge` forj command line details: -------------------------- LONGDESC self.class.help(shell, subcommand) end end # BOOT desc 'boot on as [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 (currently cli only supports redstone) \x5- Provider : in which cloud provider to deploy the forge \x5- InstanceName : name of the forge Ex: forj boot redstone on hpcloud as maestro_test `forj boot` load predefine valued from `lib/defaults.yaml`. If you need to change one of them, add this value in your ~/.forj/config.yaml. The list of predefined values can be retrieved with forj show defaults LONGDESC method_option :config, :aliases => '-c', :desc => 'Path to a different forj config file. By default, use ~/.forj/config.yaml' method_option :infra, :aliases => '-i', :desc => 'Defines your Infra directory to use while booting. You can also set FORJ_INFRA_DIR.' method_option :key_name, :aliases => '-k', :desc => 'Import a key pair.' method_option :key_path, :aliases => '-p', :desc => 'Public key data' 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 :build_config, :aliases => '-C', :desc => 'The build config file to load /..env. By default, uses "master" as Config.' method_option :git_repo, :aliases => '-R', :desc => 'The box built will use a different git repository sent out to . This repository needs to be read only. No keys are sent.' method_option :branch, :aliases => '-B', :desc => 'The build will extract from git branch name. It sets the configuration build to the branch name .' method_option :box_name, :aliases => '-N', :desc => 'Defines the name of the box or box image to build.' method_option :test_box, :aliases => '-T', :desc => 'Create test.rb-box meta from the repository path provided.' def boot(blueprint, on, cloud_provider, as, name, test = false) Boot.boot(blueprint, cloud_provider, name, options[:build], options[:build_config_dir], options[:build_config], options[:branch], options[:git_repo], options[:boothook], options[:box_name], options[:key_name], options[:key_path],options[:region], options[:config], test) end desc 'show defaults', 'Show list of predefined value you can update in your ~/.forj/config.yaml' def show(name) oConfig=ForjConfig.new() puts 'List of predefined values: --------------------------' puts oConfig.yDefaults['default'].to_yaml() puts '--------------------------' puts "You can set any of those variable in your ~/.forj/config.yaml, under section 'default:'" end # DOWN desc 'down', 'delete the Maestro box and all systems installed by the blueprint' long_desc <<-LONGDESC Not yet implemented LONGDESC def down(name) Down.down(name) end # SSH desc 'ssh', 'connect to your forge thru ssh' long_desc <<-LONGDESC Connect through ssh to an existing instance not yet implemented LONGDESC def ssh(name, server) Ssh.connect(name, server) end # SETUP desc 'setup', 'set the credentials for forj cli' long_desc <<-LONGDESC Set the cloud credentials and services for forj. Currently supports only hpcloud provider. Several data will be requested like: \x5- access_key: access key from hpcloud \x5- secret_key: secret key from hpcloud \x5- auth_uri: identity endpoint \x5- tenant_id: id for the tenant you want to use \x5- availability_zone: which availability zone will be deployed LONGDESC def setup Setup.setup end end Forj.start