69 lines
1.9 KiB
Ruby
69 lines
1.9 KiB
Ruby
require 'optparse'
|
|
|
|
module VagrantPlugins
|
|
module CommandPush
|
|
class Command < Vagrant.plugin("2", :command)
|
|
def self.synopsis
|
|
"deploys code in this environment to a configured destination"
|
|
end
|
|
|
|
# @todo support multiple strategies if requested by the community
|
|
def execute
|
|
opts = OptionParser.new do |o|
|
|
o.banner = "Usage: vagrant push [strategy] [options]"
|
|
end
|
|
|
|
# Parse the options
|
|
argv = parse_options(opts)
|
|
return if !argv
|
|
|
|
name = validate_pushes!(@env.pushes, argv[0])
|
|
|
|
@logger.debug("'push' environment with strategy: `#{name}'")
|
|
@env.push(name)
|
|
|
|
0
|
|
end
|
|
|
|
# Validate that the given list of names corresponds to valid pushes.
|
|
#
|
|
# @raise Vagrant::Errors::PushesNotDefined
|
|
# if there are no pushes defined
|
|
# @raise Vagrant::Errors::PushStrategyNotProvided
|
|
# if there are multiple push strategies defined and none were specified
|
|
# @raise Vagrant::Errors::PushStrategyNotDefined
|
|
# if the given push name do not correspond to a push strategy
|
|
#
|
|
# @param [Array<Symbol>] pushes
|
|
# the list of pushes defined by the environment
|
|
# @param [String] name
|
|
# the name provided by the user on the command line
|
|
#
|
|
# @return [Symbol]
|
|
# the compiled list of pushes
|
|
#
|
|
def validate_pushes!(pushes, name = nil)
|
|
if pushes.nil? || pushes.empty?
|
|
raise Vagrant::Errors::PushesNotDefined
|
|
end
|
|
|
|
if name.nil?
|
|
if pushes.length == 1
|
|
return pushes.first.to_sym
|
|
else
|
|
raise Vagrant::Errors::PushStrategyNotProvided, pushes: pushes
|
|
end
|
|
end
|
|
|
|
if !pushes.include?(name)
|
|
raise Vagrant::Errors::PushStrategyNotDefined,
|
|
name: name,
|
|
pushes: pushes
|
|
end
|
|
|
|
return name.to_sym
|
|
end
|
|
end
|
|
end
|
|
end
|