Module: Aptible::CLI::Subcommands::Config

Included in:
Agent
Defined in:
lib/aptible/cli/subcommands/config.rb

Class Method Summary collapse

Class Method Details

.included(thor) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/aptible/cli/subcommands/config.rb', line 7

def self.included(thor)
  thor.class_eval do
    include Helpers::Operation
    include Helpers::App

    desc 'config', "Print an app's current configuration"
    app_options
    def config
      app = ensure_app(options)
      config = app.current_configuration
      env = config ? config.env : {}

      Formatter.render(Renderer.current) do |root|
        root.keyed_list('shell_export') do |list|
          env.each_pair do |k, v|
            list.object do |node|
              node.value('key', k)
              node.value('value', v)
              node.value('shell_export', "#{k}=#{Shellwords.escape(v)}")
            end
          end
        end
      end
    end

    desc 'config:get [VAR1]',
         "Print a specific key within an app's current configuration"
    app_options
    define_method 'config:get' do |*args|
      app = ensure_app(options)
      config = app.current_configuration
      env = config ? config.env : {}

      Formatter.render(Renderer.current) do |root|
        key = args[0]
        value = env
                .select { |k| k == key }
                .map { |_, v| v }
        root.value(value)
      end
    end

    desc 'config:add [VAR1=VAL1] [VAR2=VAL2] [...]',
         'Add an ENV variable to an app'
    app_options
    define_method 'config:add' do |*args|
      # FIXME: define_method - ?! Seriously, WTF Thor.
      app = ensure_app(options)
      env = extract_env(args)
      operation = app.create_operation!(type: 'configure', env: env)
      CLI.logger.info 'Updating configuration and restarting app...'
      attach_to_operation_logs(operation)
    end

    desc 'config:set [VAR1=VAL1] [VAR2=VAL2] [...]',
         'Add an ENV variable to an app'
    app_options
    define_method 'config:set' do |*args|
      send('config:add', *args)
    end

    desc 'config:rm [VAR1] [VAR2] [...]',
         'Remove an ENV variable from an app'
    app_options
    define_method 'config:rm' do |*args|
      # FIXME: define_method - ?! Seriously, WTF Thor.
      app = ensure_app(options)
      env = Hash[args.map do |arg|
        validate_env_key!(arg)
        [arg, '']
      end]
      operation = app.create_operation!(type: 'configure', env: env)
      CLI.logger.info 'Updating configuration and restarting app...'
      attach_to_operation_logs(operation)
    end

    desc 'config:unset [VAR1] [VAR2] [...]',
         'Remove an ENV variable from an app'
    app_options
    define_method 'config:unset' do |*args|
      send('config:rm', *args)
    end
  end
end