require "devops-client/options/common_options" require "set" class ProjectOptions < CommonOptions commands :create, :delete, :deploy, :list, {:multi => [:create]}, :servers, {:set => [:run_list]}, :show, :test, :update, {:user => [:add, :delete]} def initialize args, def_options super(args, def_options) self.header = I18n.t("headers.project") self.banner_header = "project" id = "PROJECT_ID" env = "DEPLOY_ENV" self.show_params = [id] self.create_params = [id] self.delete_params = [id, "[#{env}]"] self.deploy_params = [id, "[#{env}]"] self.set_run_list_params = [id, env, "[(recipe[mycookbook::myrecipe])|(role[myrole]) ...]"] self.servers_params = [id, "[#{env}]"] self.multi_create_params = [id] self.update_params = [id, "FILE"] self.user_add_params = [id, "USER_NAME", "[USER_NAME ...]"] self.user_delete_params = [id, "USER_NAME", "[USER_NAME ...]"] self.test_params = [id, env] end def create_options 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 parser.recognize_option_value(:file, 'project') do |file| abort("File '#{file}' does not exist") unless File.exist?(file) options[:file] = file end parser.recognize_option_value(:subnets, 'project', variable: 'SUBNET_1,SUBNET_2...') do |subnets| options[:subnets] = subnets.split(",") end parser.recognize_option_value(:users, 'project', variable: 'USER_1,USER_2...') do |users| options[:users] = Set.new(users.split(",")) 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') # 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 |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 |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 |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 end