lib/conjur/command/variables.rb in conjur-cli-5.6.6 vs lib/conjur/command/variables.rb in conjur-cli-6.0.0.rc1
- old
+ new
@@ -19,130 +19,21 @@
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class Conjur::Command::Variables < Conjur::Command
desc "Manage variables"
command :variable do |var|
- var.desc "Create and store a variable [DEPRECATED]"
- var.arg_name "NAME VALUE"
- var.command :create do |c|
- c.arg_name "MIME-TYPE"
- c.flag [:m, :"mime-type"], default_value: 'text/plain'
-
- c.arg_name "KIND"
- c.flag [:k, :"kind"], default_value: 'secret'
-
- c.arg_name "VALUE"
- c.desc "Initial value, which may also be specified as the second command argument after the variable id"
- c.flag [:v, :"value"]
-
- acting_as_option c
-
- annotate_option c
-
- interactive_option c
-
- c.action do |global_options,options, args|
- notify_deprecated
-
- @default_mime_type = c.flags[:m].default_value
- @default_kind = c.flags[:k].default_value
-
- id = args.shift unless args.empty?
- value = args.shift unless args.empty?
-
- exit_now! "Received conflicting value arguments" if value && options[:value]
-
- groupid = options[:ownerid]
- mime_type = options[:m]
- kind = options[:k]
- value ||= options[:v]
- interactive = options[:interactive] || id.blank?
- annotate = options[:annotate]
-
- exit_now! "Received --annotate option without --interactive" if annotate && !interactive
-
- annotations = {}
- # If the user asked for interactive mode, or he didn't specify and id
- # prompt for any missing options.
- if interactive
- id ||= prompt_for_id :variable
-
- groupid ||= prompt_for_group
-
- kind = prompt_for_kind if !kind || kind == @default_kind
-
- mime_type = prompt_for_mime_type if mime_type.blank? || mime_type == @default_mime_type
-
- annotations = prompt_for_annotations if annotate
-
- value ||= prompt_for_value
-
- prompt_to_confirm :variable, "Id" => id,
- "Kind" => kind,
- "MIME type" => mime_type,
- "Owner" => groupid,
- "Value" => value
- end
-
- variable_options = { id: id }
- variable_options[:ownerid] = groupid if groupid
- variable_options[:value] = value unless value.blank?
- var = api.create_variable(mime_type, kind, variable_options)
- api.resource(var).annotations.merge!(annotations) if annotations && !annotations.empty?
- display(var, options)
- end
- end
-
- var.desc "Show a variable"
- var.arg_name "VARIABLE"
- var.command :show do |c|
- c.action do |global_options,options,args|
- id = require_arg(args, 'VARIABLE')
- display(api.variable(id), options)
- end
- end
-
- var.desc "Decommission a variable [DEPRECATED]"
- var.arg_name "VARIABLE"
- var.command :retire do |c|
- retire_options c
-
- c.action do |global_options,options,args|
- notify_deprecated
-
- id = require_arg(args, 'VARIABLE')
-
- variable = api.variable(id)
-
- validate_retire_privileges variable, options
-
- retire_resource variable
- give_away_resource variable, options
-
- puts "Variable retired"
- end
- end
-
- var.desc "List variables"
- var.command :list do |c|
- command_options_for_list c
-
- c.action do |global_options, options, args|
- command_impl_for_list global_options, options.merge(kind: "variable"), args
- end
- end
-
var.desc "Access variable values"
var.command :values do |values|
values.desc "Add a value"
values.arg_name "VARIABLE VALUE"
values.command :add do |c|
c.action do |global_options,options,args|
id = require_arg(args, 'VARIABLE')
value = args.shift || STDIN.read
+ assert_empty(args)
- api.variable(id).add_value(value)
+ api.resource(full_resource_id("variable:#{id}")).add_value(value)
puts "Value added"
end
end
end
@@ -152,116 +43,12 @@
c.desc "Version number"
c.flag [:v, :version]
c.action do |global_options,options,args|
id = require_arg(args, 'VARIABLE')
- $stdout.write api.variable(id).value(options[:version])
+ assert_empty(args)
+
+ $stdout.write api.resource(full_resource_id("variable:#{id}")).value(options[:version])
end
end
-
- var.desc 'Set the expiration for a variable'
- var.command :expire do |c|
- c.arg_name "NOW"
- c.desc 'Set variable to expire immediately'
- min_version c, '4.6.0'
- c.switch [:n, :'now'], :negatable => false
-
- c.arg_name "DAYS"
- c.desc 'Set variable to expire after the given number of days'
- c.flag [:d, :'days']
-
- c.arg_name "MONTHS"
- c.desc 'Set variable to expire after the given number of months'
- c.flag [:m, :'months']
-
- c.arg_name "DURATION"
- c.desc 'Set variable to expire after the given ISO8601 duration'
- c.flag [:i, :'in']
-
- c.action do |global_options, options, args|
- id = require_arg(args, 'VARIABLE')
-
- exit_now! 'Specify only one duration' if durations(options) > 1
- exit_now! 'Specify at least one duration' if durations(options) == 0
-
- now = options[:n]
- days = options[:d]
- months = options[:m]
-
- case
- when now.present?
- duration = 'P0Y'
- when days.present?
- duration = "P#{days.to_i}D"
- when months.present?
- duration = "P#{months.to_i}M"
- else
- duration = options[:i]
- end
-
- display api.variable(id).expires_in(duration)
- end
- end
-
- var.desc 'Display expiring variables'
- var.long_desc 'Only variables that expire within the given duration are displayed. If no duration is provided, show all visible variables that are set to expire.'
- var.command :expirations do |c|
- c.arg_name 'DAYS'
- c.desc 'Display variables that expire within the given number of days'
- min_version c, '4.6.0'
- c.flag [:d, :'days']
-
- c.arg_name 'MONTHS'
- c.desc 'Display variables that expire within the given number of months'
- c.flag [:m, :'months']
-
- c.arg_name 'IN'
- c.desc 'Display variables that expire within the given ISO8601 interval'
- c.flag [:i, :'in']
-
- c.action do | global_options, options, args|
-
- days = options[:d]
- months = options[:m]
- duration = options[:i]
-
- exit_now! 'Specify only one duration' if durations(options) > 1
-
- case
- when days.present?
- duration = "P#{days.to_i}D"
- when months.present?
- duration = "P#{months.to_i}M"
- end
-
- display api.variable_expirations(duration)
- end
- end
-
end
-
- class << self
- def prompt_for_kind
- highline.ask('Enter the kind: ') {|q| q.default = @default_kind }
- end
-
- def prompt_for_mime_type
- highline.choose do |menu|
- menu.prompt = 'Enter the MIME type: '
- menu.choice @default_mime_type
- menu.choices *%w(application/json application/xml application/x-yaml application/x-pem-file)
- menu.choice "other", nil do |c|
- @highline.ask('Enter a custom mime type: ')
- end
- end
- end
-
- def prompt_for_value
- read_till_eof('Enter the secret value (^D on its own line to finish):')
- end
-
- def durations(options)
- [options[:n],options[:d],options[:m],options[:i]].count {|o| o.present?}
- end
- end
-
end