fluke/devops-client/lib/devops-client/options/server_options.rb
2016-02-24 18:05:48 +03:00

180 lines
4.8 KiB
Ruby

require "devops-client/options/common_options"
class ServerOptions < CommonOptions
commands :add, :bootstrap, :create, :delete, :list, :pause, :reserve, :show, :unpause, :unreserve, :delete_list, :add_and_bootstrap_list
def initialize args, def_options
super(args, def_options)
self.header = I18n.t("headers.server")
self.banner_header = "server"
self.list_params = ["[chef|ec2|openstack|static]"]
self.create_params = ["PROJECT_ID", "DEPLOY_ENV"]
node_params = ["NODE_NAME"]
self.delete_params = node_params
self.show_params = node_params
self.pause_params = node_params
self.unpause_params = node_params
self.reserve_params = node_params
self.unreserve_params = node_params
self.bootstrap_params = ["INSTANCE_ID"]
self.add_params = ["PROJECT_ID", "DEPLOY_ENV", "IP", "SSH_USER", "KEY_ID"]
self.add_and_bootstrap_list_params = ["PROJECT_ID", "DEPLOY_ENV", "SSH_USER", "KEY_ID", "IPS_FILE"]
end
def delete_options
options do |parser, options|
parser.banner << self.delete_banner
parser.resource_name = :server
parser.command_name = :delete
parser.recognize_option_value(:instance,
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key
)
parser.recognize_option_value(:no_ask,
type: :switch,
default: false,
switch_value: true
)
end
end
def pause_options
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance,
resource_name: :server,
command_name: :pause,
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key
)
end
end
def unpause_options
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance,
resource_name: :server,
command_name: :unpause,
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key
)
end
end
def reserve_options
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance,
resource_name: :server,
command_name: :reserve,
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key
)
end
end
def unreserve_options
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance,
resource_name: :server,
command_name: :unreserve,
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key
)
end
end
def create_options
options do |parser, options|
parser.banner << self.create_banner
parser.resource_name = :server
parser.command_name = :create
parser.recognize_option_value('without_bootstrap',
type: :switch,
switch_value: true,
option_key: :without_bootstrap,
i18n_scope: 'create'
)
parser.recognize_option_value(:name, short: '-N')
parser.recognize_option_value(:force, short: '-f')
parser.recognize_option_value(:key)
parser.recognize_option_value(:groups,
short: '-G',
variable: 'GROUP_1,GROUP_2...'
) do |groups|
options[:groups] = groups.split(",")
end
parser.recognize_option_value(:private_ip, i18n_scope: 'create')
# it was disabled somewhy
# parser.on('--public-ip', "Associate public IP with server") do
# options[:public_ip] = true
# end
end
end
def bootstrap_options
options do |parser, options|
parser.banner << self.bootstrap_banner
parser.resource_name = :server
parser.command_name = :bootstrap
parser.recognize_option_value(:name, short: '-N')
parser.recognize_option_value(:bootstrap_template)
parser.recognize_option_value(:run_list) do |list|
options[:run_list] = list.split(",")
end
end
end
def add_options
options do |parser, options|
parser.banner << self.add_banner
parser.recognize_option_value('public-ip', resource_name: :server, command_name: :add, option_key: :public_ip)
end
end
def add_and_bootstrap_list_options
options do |parser, options|
parser.banner << self.add_and_bootstrap_list_banner
parser.separator ''
parser.separator "\tIPS_FILE is path to a file with list of ip:node_name pairs; example of such file:"
parser.separator "\type127.0.0.1:node1"
parser.separator "\type127.0.0.2:node2"
end
end
def delete_banner
self.banner_header + " delete NODE_NAME [NODE_NAME ...]\n"
end
def delete_list_banner
self.banner_header + " delete_list INSTANCE_ID [INSTANCE_ID ...]\n"
end
end