lib/simple_deploy/cli.rb in simple_deploy-0.3.7 vs lib/simple_deploy/cli.rb in simple_deploy-0.4.0

- old
+ new

@@ -1,167 +1,71 @@ require 'trollop' -require 'simple_deploy/cli/variables' +require 'simple_deploy/cli/shared' + +require 'simple_deploy/cli/attributes' +require 'simple_deploy/cli/create' +require 'simple_deploy/cli/deploy' +require 'simple_deploy/cli/destroy' +require 'simple_deploy/cli/events' +require 'simple_deploy/cli/instances' +require 'simple_deploy/cli/list' +require 'simple_deploy/cli/outputs' +require 'simple_deploy/cli/parameters' +require 'simple_deploy/cli/resources' +require 'simple_deploy/cli/ssh' +require 'simple_deploy/cli/status' +require 'simple_deploy/cli/template' +require 'simple_deploy/cli/update' + module SimpleDeploy module CLI def self.start - @opts = Trollop::options do - version SimpleDeploy::VERSION - banner <<-EOS + cmd = ARGV.shift -Deploy and manage resources in AWS - -simple_deploy environments -simple_deploy list -e ENVIRONMENT -simple_deploy create -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES -t TEMPLATE_PATH -simple_deploy update -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES -simple_deploy deploy -n STACK_NAME -e ENVIRONMENT -simple_deploy ssh -n STACK_NAME -e ENVIRONMENT -simple_deploy destroy -n STACK_NAME -e ENVIRONMENT -simple_deploy instances -n STACK_NAME -e ENVIRONMENT -simple_deploy status -n STACK_NAME -e ENVIRONMENT -simple_deploy attributes -n STACK_NAME -e ENVIRONMENT -simple_deploy events -n STACK_NAME -e ENVIRONMENT -simple_deploy resources -n STACK_NAME -e ENVIRONMENT -simple_deploy outputs -n STACK_NAME -e ENVIRONMENT -simple_deploy template -n STACK_NAME -e ENVIRONMENT -simple_deploy parameters -n STACK_NAME -e ENVIRONMENT - -Attributes are specified as '=' seperated key value pairs. Multiple can be specified. For example: - -simple_deploy create -t ~/my-template.json -e my-env -n test-stack -a arg1=val1 -a arg2=vol2 - -You must setup a simple_deploy.yaml file in your home directory. Format as follows: - - artifacts: - chef_repo: - domain: app_specific_domain - bucket_prefix: chef-bucket-prefix - app: - domain: app_specific_app - bucket_prefix: app-bucket-prefix - cookbooks: - domain: app_specific_cookbooks - bucket_prefix: cookbooks-bucket-prefix - - environments: - preprod_shared_us_west_1: - access_key: XXXXXXXXXXXXXXXXXXX - secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - region: us-west-1 - infrastructure_us_west_1: - access_key: XXXXXXXXXXXXXXXXXXX - secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - region: us-west-1 - infrastructure_us_west_2: - access_key: XXXXXXXXXXXXXXXXXXX - secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - region: us-west-2 - -Bucket prefixes will append -us-west-1 (or appropriate region) when deploying based on the environment. - -For example app-bucket-prefix will be tranlated to app-bucket-prefix-us-west-1. - -The domain is the specific domain that is set when the artifact is created by heirloom. - -EOS - opt :help, "Display Help" - opt :attributes, "= seperated attribute and it's value", :type => :string, - :multi => true - opt :environment, "Set the target environment", :type => :string - opt :force, "Force a deployment to proceed" - opt :count, "Count of events returned.", :type => :integer, - :default => 3 - opt :log_level, "Log level to output. Valid levels: debug, info, warn, error", :type => :string, - :default => 'info' - opt :name, "Stack name to manage", :type => :string - opt :template, "Path to the template file", :type => :string - end - - @cmd = ARGV.shift - - unless @cmd + unless cmd puts "\nPlease specify a command.\n" exit 1 end - read_attributes - - unless @cmd == 'environments' - - environments = Config.new.environments - unless environment_provided? - puts "\nPlease specify an environment.\n\n" - environments.keys.each { |e| puts e } - exit 1 - end - - unless environments.include? @opts[:environment] - puts "\nEnvironment #{@opts[:environment]} not found.\n" - exit 1 - end - - @config = Config.new.environment @opts[:environment] - end - - @stacks = Stackster::StackLister.new(:config => @config).all.sort - - - case @cmd - when 'ssh' - @log_level = 'warn' - else - @log_level = 'info' - end - - @log_level = @opts[:log_level] if @opts[:log_level] - - @logger = SimpleDeployLogger.new :log_level => @log_level - - case @cmd - when 'create', 'delete', 'deploy', 'destroy', 'instances', - 'status', 'attributes', 'events', 'resources', - 'outputs', 'template', 'update', 'parameters', - 'ssh' - - @stack = Stack.new :environment => @opts[:environment], - :name => @opts[:name], - :config => @config, - :logger => @logger - end - - case @cmd + case cmd when 'attributes' - @stack.attributes.each_pair { |k, v| puts "#{k}=#{v}" } + CLI::Attributes.new.show when 'create' - @stack.create :attributes => attributes, - :template => @opts[:template] - @logger.info "#{@opts[:name]} created." - when 'delete', 'destroy' - @stack.destroy - @logger.info "#{@opts[:name]} destroyed." + CLI::Create.new.create + when 'destroy', 'delete' + CLI::Destroy.new.destroy when 'deploy' - @stack.update :attributes => attributes - @stack.deploy @opts[:force] + CLI::Deploy.new.deploy when 'environments' - Config.new.environments.keys.each { |e| puts e } - when 'update' - @stack.update :attributes => attributes - @logger.info "#{@opts[:name]} updated." + CLI::List.new.environments + when 'events' + CLI::Events.new.show when 'instances' - @stack.instances.each { |s| puts s } + CLI::Instances.new.list when 'list' - puts @stacks + CLI::List.new.stacks + when 'outputs' + CLI::Outputs.new.show + when 'parameters' + CLI::Parameters.new.show + when 'resources' + CLI::Resources.new.show + when 'status' + CLI::Status.new.show when 'template' - jj @stack.template - when 'outputs', 'resources', 'status', 'parameters' - puts (@stack.send @cmd.to_sym).to_yaml + CLI::Template.new.show when 'ssh' - puts @stack.send @cmd.to_sym - when 'events' - puts (@stack.events @opts[:count]).to_yaml + CLI::SSH.new.show + when 'update' + CLI::Update.new.update + when '-h' + puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|resources|ssh|status|update]" + puts "Append -h for help on specific subcommand." else - puts "Unknown command. Use -h for help." + puts "Unknown command: '#{cmd}'." + puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|resources|ssh|status|update]" + puts "Append -h for help on specific subcommand." end end end end