move option classes to DevopsOptionsParser approach

This commit is contained in:
Anton Chuchkalov 2015-04-14 13:32:20 +04:00
parent 9228193da4
commit 24ea3904c9
7 changed files with 211 additions and 180 deletions

View File

@ -11,13 +11,13 @@ class DeployOptions < CommonOptions
end
def deploy_options
options do |opts, options|
opts.banner << self.banner
options do |parser, options|
parser.banner << self.banner
options[:tag] = nil
opts.on("--tag TAG1,TAG2...", "Tag names, comma separated list") do |tags|
parser.recognize_option_value(:tag, 'deploy', variable_name: 'TAG1,TAG2...') do |tags|
options[:tags] = tags.split(",")
end
end
end

View File

@ -15,35 +15,14 @@ class ImageOptions < CommonOptions
end
def create_options
self.options do |parser, options|
parser.banner << self.create_banner
self.options do |opts, options|
opts.banner << self.create_banner
options[:provider] = nil
opts.on("--provider PROVIDER", "Image provider") do |provider|
options[:provider] = provider
end
options[:image_id] = nil
opts.on("--image IMAGE_ID", "Image identifier") do |image_id|
options[:image_id] = image_id
end
options[:ssh_username] = nil
opts.on("--ssh_user USER", "SSH user name") do |username|
options[:ssh_username] = username
end
options[:bootstrap_template] = nil
opts.on("--bootstrap_template TEMPLATE", "Bootstrap template") do |template|
options[:bootstrap_template] = template
end
options[:no_bootstrap_template] = false
opts.on("--no_bootstrap_template", "Do not specify bootstrap template") do
options[:no_bootstrap_template] = true
end
parser.recognize_option_value(:provider, 'image')
parser.recognize_option_value(:image_id, 'image')
parser.recognize_option_value(:ssh_username, 'image')
parser.recognize_option_value(:bootstrap_template, 'image')
parser.recognize_option_value(:no_bootstrap_template, 'image', type: :switch, switch_value: true, default: false)
end
end

View File

@ -25,93 +25,68 @@ class ProjectOptions < CommonOptions
end
def create_options
self.options do |opts, options|
opts.banner << self.create_banner
options[:groups] = nil
opts.on("--groups GROUP_1,GROUP_2...", I18n.t("options.project.create.groups")) do |groups|
self.options do |parser, options|
parser.banner << self.create_banner
parser.recognize_option_value(:groups, 'project', variable: 'GROUP_1,GROUP_2...') do |groups|
options[:groups] = groups.split(",")
end
options[:identifier] = nil
opts.on("--deploy_env DEPLOY_ID", I18n.t("options.project.create.deploy_env")) do |identifier|
options[:identifier] = identifier
end
options[:file] = nil
opts.on("-f", "--file FILE", I18n.t("options.project.create.file")) do |file|
parser.recognize_option_value(:file, 'project') do |file|
abort("File '#{file}' does not exist") unless File.exist?(file)
options[:file] = file
end
options[:subnets] = nil
opts.on("--subnets SUBNET,SUBNET...", I18n.t("options.project.create.subnets")) do |subnet|
options[:subnets] = subnet.split(",")
parser.recognize_option_value(:subnets, 'project', variable: 'SUBNET_1,SUBNET_2...') do |subnets|
options[:subnets] = subnets.split(",")
end
options[:flavor] = nil
opts.on("--flavor FLAVOR", I18n.t("options.project.create.flavor")) do |flavor|
options[:flavor] = flavor
end
options[:image] = nil
opts.on("--image IMAGE_ID", I18n.t("options.project.create.image")) do |image|
options[:image] = image
end
options[:run_list] = nil
opts.on("--run_list RUN_LIST", I18n.t("options.project.create.run_list")) do |run_list|
options[:run_list] = run_list
end
options[:users] = nil
opts.on("--users USER,USER...", I18n.t("options.project.create.users")) do |users|
parser.recognize_option_value(:users, 'project', variable: 'USER_1,USER_2...') do |users|
options[:users] = Set.new(users.split(","))
end
options[:provider] = nil
opts.on("--provider PROVIDER", I18n.t("options.project.create.provider")) do |provider|
options[:provider] = provider
end
parser.recognize_option_value(:deploy_env, 'project', option_key: :identifier)
parser.recognize_option_value(:flavor, 'project')
parser.recognize_option_value(:image, 'project')
parser.recognize_option_value(:run_list, 'project')
parser.recognize_option_value(:provider, 'project')
parser.recognize_option_value(:no_expires, 'project', type: :switch, switch_value: true, default: false)
parser.recognize_option_value(:expires, 'project')
options[:no_expires] = false
opts.on("--no_expires", I18n.t("options.project.create.no_expires")) do
options[:no_expires] = true
end
options[:expires] = nil
opts.on("--expires EXPIRES", I18n.t("options.project.create.expires")) do |e|
options[:expires] = e
end
# TODO:
# support short options names
#
# options[:file] = nil
# parser.on("-f", "--file FILE", I18n.t("options.project.create.file")) do |file|
# abort("File '#{file}' does not exist") unless File.exist?(file)
# options[:file] = file
# end
end
end
def user_add_options
self.options do |opts, options|
opts.banner << self.user_add_banner
options[:deploy_env] = nil
opts.on("--deploy_env ENV", I18n.t("options.project.user_add.deploy_env")) do |env|
options[:deploy_env] = env
end
self.options do |parser, options|
parser.banner << self.user_add_banner
parser.recognize_option_value(:deploy_env, 'project', i18n_scope: 'user_add')
end
end
def user_delete_options
self.options do |opts, options|
opts.banner << self.user_delete_banner
options[:deploy_env] = nil
opts.on("--deploy_env ENV", I18n.t("options.project.user_delete.deploy_env")) do |env|
options[:deploy_env] = env
end
self.options do |parser, options|
parser.banner << self.user_delete_banner
parser.recognize_option_value(:deploy_env, 'project', i18n_scope: 'user_delete')
end
end
def deploy_options
options do |opts, options|
opts.banner << self.deploy_banner
options[:servers] = nil
opts.on("--servers SERVERS", I18n.t("options.project.deploy.servers")) do |l|
options[:servers] = l.split(",")
options do |parser, options|
parser.banner << self.deploy_banner
parser.recognize_option_value(:servers, 'project', i18n_scope: 'deploy') do |servers|
options[:servers] = servers.split(",")
end
end
end

View File

@ -16,10 +16,11 @@ class ScriptOptions < CommonOptions
end
def run_options
options do |opts, options|
opts.banner << self.delete_banner
opts.on("--params PARAMS", I18n.t("options.script.run.params")) do |p|
options[:params] = p.split(",")
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:params, 'script') do |params|
options[:params] = params.split(",")
end
end
end

View File

@ -22,117 +22,130 @@ class ServerOptions < CommonOptions
end
def delete_options
options do |opts, options|
opts.banner << self.delete_banner
options[:key] = "node"
opts.on('--instance', "Delete node by instance id") do
options[:key] = "instance"
end
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance, 'server',
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key,
i18n_scope: 'delete'
)
parser.recognize_option_value(:no_ask, 'server',
type: :switch,
default: false,
switch_value: true,
i18n_scope: 'delete'
)
options[:no_ask] = false
opts.on("--no_ask", "Don't ask for permission for server deletion") do
options[:no_ask] = true
end
end
end
def pause_options
options do |opts, options|
opts.banner << self.delete_banner
options[:key] = "node"
opts.on('--instance', "Pause server by instance id") do
options[:key] = "instance"
end
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance, 'server',
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key,
i18n_scope: 'pause'
)
end
end
def unpause_options
options do |opts, options|
opts.banner << self.delete_banner
options[:key] = "node"
opts.on('--instance', "Unpause server by instance id") do
options[:key] = "instance"
end
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance, 'server',
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key,
i18n_scope: 'unpause'
)
end
end
def reserve_options
options do |opts, options|
opts.banner << self.delete_banner
options[:key] = "node"
opts.on('--instance', "Reserve server by instance id") do
options[:key] = "instance"
end
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance, 'server',
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key,
i18n_scope: 'reserve'
)
end
end
def unreserve_options
options do |opts, options|
opts.banner << self.delete_banner
options[:key] = "node"
opts.on('--instance', "Unreserve server by instance id") do
options[:key] = "instance"
end
options do |parser, options|
parser.banner << self.delete_banner
parser.recognize_option_value(:instance, 'server',
type: :switch,
default: 'node',
switch_value: 'instance',
option_key: :key,
i18n_scope: 'unreserve'
)
end
end
def create_options
options do |opts, options|
opts.banner << self.create_banner
opts.on('--without-bootstrap', "Run server without bootsraping phase") do
options[:without_bootstrap] = true
end
=begin
opts.on('--public-ip', "Associate public IP with server") do
options[:public_ip] = true
end
=end
opts.on("-N", "--name NAME", "Set node name") do |n|
options[:name] = n
end
opts.on("-G", "--groups X,Y,Z", "The security groups for this server") do |g|
options[:groups] = g.split(",")
end
opts.on("-f", "--force", "Cancel rollback operation on error") do |f|
options[:force] = true
end
opts.on("--key KEY", "Use another key for the server") do |k|
options[:key] = k
options do |parser, options|
parser.banner << self.create_banner
parser.recognize_option_value('without-bootstrap', 'server',
type: :switch,
switch_value: true,
option_key: :without_bootstrap,
i18n_scope: 'create'
)
parser.recognize_option_value(:name, 'server', short: '-N', i18n_scope: 'create')
parser.recognize_option_value(:force, 'server', short: '-f', i18n_scope: 'create')
parser.recognize_option_value(:key, 'server', i18n_scope: 'create')
parser.recognize_option_value(:groups, 'server',
short: '-G',
variable: 'GROUP_1,GROUP_2...',
i18n_scope: 'create'
) do |groups|
options[:groups] = groups.split(",")
end
# 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 |opts, options|
opts.banner << self.bootstrap_banner
options do |parser, options|
parser.banner << self.bootstrap_banner
opts.on("-N", "--name NAME", "Set chef name") do |n|
options[:name] = n
end
opts.on("--bootstrap_template TEMPLATE", "Bootstrap template") do |template|
options[:bootstrap_template] = template
end
opts.on("--run_list LIST", "Comma separated list like 'role[my_role],recipe[my_recipe]'") do |list|
parser.recognize_option_value(:name, 'server', short: '-N', i18n_scope: 'bootstrap')
parser.recognize_option_value(:bootstrap_template, 'server', i18n_scope: 'bootstrap')
parser.recognize_option_value(:run_list, 'server', i18n_scope: 'bootstrap') do |list|
options[:run_list] = list.split(",")
end
end
end
def add_options
options do |opts, options|
opts.banner << self.add_banner
options do |parser, options|
parser.banner << self.add_banner
opts.on('--public-ip PUBLIC_IP', "Specify public IP for the server") do |ip|
options[:public_ip] = ip
end
parser.recognize_option_value('public-ip', 'server', i18n_scope: 'add', option_key: :public_ip)
end
end

View File

@ -15,14 +15,10 @@ class UserOptions < CommonOptions
end
def create_options
self.options do |opts, options|
opts.banner << self.create_banner
options[:new_password] = nil
opts.on("--password PASSWORD", "New user password") do |p|
options[:new_password] = p
end
self.options do |parser, options|
parser.banner << self.create_banner
parser.recognize_option_value(:new_password, 'user')
end
end

View File

@ -269,3 +269,70 @@ en:
script:
run:
params: "Script arguments (comma separated list)"
descriptions:
deploy:
tag: 'Tag names, comma separated list'
image:
provider: Image provider
image_id: Image identifier
ssh_username: SSH user name
bootstrap_template: Bootstrap template
no_bootstrap_template: Do not specify bootstrap template
project:
groups: "Security groups (comma separated list)"
deploy_env: "Deploy environment identifier"
file: "File in JSON with project settings"
subnets: "Subnets identifiers for deploy environment (ec2 - only one subnet, openstack - comma separated list)"
flavor: "Specify flavor for the project environment"
image: "Specify image identifier for the project environment"
run_list: "Additional recipes and roles (comma separated), like recipe[mycookbook::myrecipe],role[myrole]"
users: "Users list (comma separated) for deploy environment control"
provider: "Provider - 'ec2' or 'openstack'"
no_expires: "Without expiry time"
expires: "Expiry time (5m, 3h, 2d, 1w, etc)"
user_add:
deploy_env: "Add user to deploy environment"
user_delete:
deploy_env: "Delete user from deploy environment"
deploy:
servers: "Servers list (comma separated) for deploy"
script:
params: Script arguments (comma separated list)
server:
delete:
instance: Delete node by instance id
no_ask: Don't ask for permission for server deletion
pause:
instance: Pause server by instance id
unpause:
instance: Unpause server by instance id
reserve:
instance: Reserve server by instance id
unreserve:
instance: Unreserve server by instance id
create:
without-bootstrap: 'Run server without bootsraping phase'
name: Set node name
groups: The security groups for this server
force: Cancel rollback operation on error
key: User another key for server
bootstrap:
name: Set chef name
bootstrap_template: Bootstrap template
run_list: "Comma separated list like 'role[my_role],recipe[my_recipe]'"
add:
public-ip: 'Specify public IP for the server'
stack:
provider: Stack provider
id: Stack id
deploy_env: Deploy env
project: Stack project
stack_template: Stack template
parameters: Parameters hash as single quoted JSON string
stack_template:
provider: Stack template provider
id: Stack template id
template_file: Stack template file
user:
new_password: New user password