class Opsup::App
Constants
- AVAILABLE_COMMANDS
Public Class Methods
create()
click to toggle source
# File lib/opsup/app.rb, line 9 def self.create new(logger: Opsup::Logger.instance) end
new(logger:)
click to toggle source
# File lib/opsup/app.rb, line 14 def initialize(logger:) @logger = T.let(logger, ::Logger) end
Public Instance Methods
available_commands()
click to toggle source
# File lib/opsup/app.rb, line 30 def available_commands AVAILABLE_COMMANDS end
run(commands, config)
click to toggle source
# File lib/opsup/app.rb, line 35 def run(commands, config) validate_commands(commands) @logger.warn('Starting in DRYRUN MODE') if config.dryrun @logger.info("Commands: #{commands.join(',')}, Stack: #{config.stack_name}") @logger.debug("Configuration details: #{config.to_h}") opsworks = new_opsworks_client(config) stack_operator = Opsup::StackOperator.create(opsworks: opsworks) deployer = stack_operator.new_deployer( stack_name: config.stack_name, mode: config.running_mode, dryrun: config.dryrun, ) commands.each do |command| if command == 'upload_cookbooks' upload_cookbooks(config) next end deployer.run_command(command_to_opsworks_command(command)) end ensure msg = 'Finished' + (config.dryrun ? ' (DRYRUN MODE)' : '') @logger.info(msg) end
upload_cookbooks(config)
click to toggle source
# File lib/opsup/app.rb, line 82 def upload_cookbooks(config) if config.cookbook_url.nil? raise Opsup::Error, 'cookbook URL is required to run upload_cookbooks' end if config.s3_bucket_name.nil? raise Opsup::Error, 'S3 Bucket name is required to run upload_cookbooks' end s3_object_config = CookbookUploader::S3ObjectConfig.new( bucket_name: T.must(config.s3_bucket_name), key: "cookbook_#{config.stack_name}.tar.gz", ) cookbook_uploader = CookbookUploader.create(s3: new_s3_client(config), config: config) cookbook_uploader.build_and_upload( cookbook_url: T.must(config.cookbook_url), s3_object_config: s3_object_config, ) end
Private Instance Methods
command_to_opsworks_command(command)
click to toggle source
# File lib/opsup/app.rb, line 77 def command_to_opsworks_command(command) command == 'update_cookbooks' ? 'update_custom_cookbooks' : command end
new_opsworks_client(config)
click to toggle source
# File lib/opsup/app.rb, line 70 def new_opsworks_client(config) creds = Aws::Credentials.new(config.aws_access_key_id, config.aws_secret_access_key) Aws::OpsWorks::Client.new(region: config.opsworks_region, credentials: creds) end
new_s3_client(config)
click to toggle source
# File lib/opsup/app.rb, line 103 def new_s3_client(config) creds = Aws::Credentials.new(config.aws_access_key_id, config.aws_secret_access_key) Aws::S3::Client.new(region: config.s3_region, credentials: creds) end
validate_commands(commands)
click to toggle source
# File lib/opsup/app.rb, line 62 def validate_commands(commands) raise Opsup::Error, 'No commands specified' if commands.empty? unknown_cmds = commands - AVAILABLE_COMMANDS raise Opsup::Error, "Unknown commands: #{unknown_cmds.join(' ')}" unless unknown_cmds.empty? end