wavefront-cli 4.3.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/HISTORY.md +3 -0
- data/README.md +2 -1
- data/lib/wavefront-cli/commands/serviceaccount.rb +5 -5
- data/lib/wavefront-cli/controller.rb +2 -0
- data/lib/wavefront-cli/display/serviceaccount.rb +25 -6
- data/lib/wavefront-cli/exception.rb +1 -0
- data/lib/wavefront-cli/serviceaccount.rb +31 -22
- data/lib/wavefront-cli/version.rb +1 -1
- data/spec/wavefront-cli/serviceaccount_spec.rb +8 -8
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 29567752b0846cf0bc23909151f65a0f023c02437203d97c0957f67c7802693f
         | 
| 4 | 
            +
              data.tar.gz: be30496907d30aeb184d0d7cc3204452c79b219254caeb9c6a59785a240cca18
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1e1f43c9ad3a996c71b1c75478344b03d9c751fa0ba1db590f6d79f5ba32db18f7f25a52db23f48173418b69730cba46cc20dcde6a2cc843bec017b3be680a87
         | 
| 7 | 
            +
              data.tar.gz: 928a9f2eb6523d26497ae6ac630f0bd070bd73ffea31876c7bee70bfe061216f08c8eb7d30c4d083c2adeaaf41b773a2a59249565ac230a17b56c05ffdcd727a
         | 
    
        data/HISTORY.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -31,7 +31,7 @@ Usage: | |
| 31 31 |  | 
| 32 32 | 
             
            Commands:
         | 
| 33 33 | 
             
              alert              view and manage alerts
         | 
| 34 | 
            -
              apitoken           view and  | 
| 34 | 
            +
              apitoken           view and your own API tokens
         | 
| 35 35 | 
             
              cloudintegration   view and manage cloud integrations
         | 
| 36 36 | 
             
              config             create and manage local configuration
         | 
| 37 37 | 
             
              dashboard          view and manage dashboards
         | 
| @@ -45,6 +45,7 @@ Commands: | |
| 45 45 | 
             
              proxy              view and manage proxies
         | 
| 46 46 | 
             
              query              run Wavefront queries
         | 
| 47 47 | 
             
              savedsearch        view and manage saved searches
         | 
| 48 | 
            +
              serviceaccount     view and manage service accounts
         | 
| 48 49 | 
             
              settings           view and manage system preferences
         | 
| 49 50 | 
             
              source             view and manage source tags and descriptions
         | 
| 50 51 | 
             
              user               view and manage Wavefront users
         | 
| @@ -20,17 +20,17 @@ class WavefrontCommandServiceaccount < WavefrontCommandBase | |
| 20 20 | 
             
              def _commands
         | 
| 21 21 | 
             
                ["list #{CMN} [-l] [-O fields]",
         | 
| 22 22 | 
             
                 "describe #{CMN} <id>",
         | 
| 23 | 
            -
                 "create #{CMN} [-I] [-d description] [- | 
| 23 | 
            +
                 "create #{CMN} [-I] [-d description] [-p permission...] [-g group...] " \
         | 
| 24 24 | 
             
                 '[-k usertoken...] <id>',
         | 
| 25 25 | 
             
                 "activate #{CMN} <id>",
         | 
| 26 26 | 
             
                 "deactivate #{CMN} <id>",
         | 
| 27 27 | 
             
                 "dump #{CMN}",
         | 
| 28 28 | 
             
                 "groups #{CMN} <id>",
         | 
| 29 | 
            -
                 " | 
| 29 | 
            +
                 "permissions #{CMN} <id>",
         | 
| 30 30 | 
             
                 "join #{CMN} <id> <group>...",
         | 
| 31 31 | 
             
                 "leave #{CMN} <id> <group>...",
         | 
| 32 | 
            -
                 "grant #{CMN} < | 
| 33 | 
            -
                 "revoke #{CMN} < | 
| 32 | 
            +
                 "grant #{CMN} <permission> to <id>",
         | 
| 33 | 
            +
                 "revoke #{CMN} <permission> from <id>",
         | 
| 34 34 | 
             
                 "set #{CMN} <key=value> <id>",
         | 
| 35 35 | 
             
                 "import #{CMN} [-u] <file>",
         | 
| 36 36 | 
             
                 "apitoken list #{CMN} [-O fields] <id>",
         | 
| @@ -50,7 +50,7 @@ class WavefrontCommandServiceaccount < WavefrontCommandBase | |
| 50 50 | 
             
                 "-u, --update             update an existing #{thing}",
         | 
| 51 51 | 
             
                 "-I, --inactive           create an inactive #{thing}",
         | 
| 52 52 | 
             
                 "-d, --desc=STRING        description of #{thing}",
         | 
| 53 | 
            -
                 "- | 
| 53 | 
            +
                 "-p, --permission=STRING  give #{thing} this permission",
         | 
| 54 54 | 
             
                 "-g, --group=STRING       add #{thing} to this user group",
         | 
| 55 55 | 
             
                 '-N, --name=STRING        name of token',
         | 
| 56 56 | 
             
                 '-k, --usertoken=STRING   API token']
         | 
| @@ -168,6 +168,8 @@ class WavefrontCliController | |
| 168 168 | 
             
                abort "Cannot find user group '#{e.message}'."
         | 
| 169 169 | 
             
              rescue Wavefront::Exception::UnsupportedWriter => e
         | 
| 170 170 | 
             
                abort "Unsupported writer '#{e.message}'."
         | 
| 171 | 
            +
              rescue WavefrontCli::Exception::UserError => e
         | 
| 172 | 
            +
                abort "User error: #{e.message}."
         | 
| 171 173 | 
             
              rescue WavefrontCli::Exception::ImpossibleSearch
         | 
| 172 174 | 
             
                abort 'Search on non-existent key. Please use a top-level field.'
         | 
| 173 175 | 
             
              rescue StandardError => e
         | 
| @@ -12,7 +12,11 @@ module WavefrontDisplay | |
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 14 | 
             
                def do_list_brief
         | 
| 15 | 
            -
                   | 
| 15 | 
            +
                  if data.empty?
         | 
| 16 | 
            +
                    puts 'You have no service accounts.'
         | 
| 17 | 
            +
                  else
         | 
| 18 | 
            +
                    multicolumn(:identifier, :description)
         | 
| 19 | 
            +
                  end
         | 
| 16 20 | 
             
                end
         | 
| 17 21 |  | 
| 18 22 | 
             
                def do_activate
         | 
| @@ -34,27 +38,42 @@ module WavefrontDisplay | |
| 34 38 | 
             
                alias do_join do_groups
         | 
| 35 39 | 
             
                alias do_leave do_groups
         | 
| 36 40 |  | 
| 37 | 
            -
                def  | 
| 41 | 
            +
                def do_permissions
         | 
| 38 42 | 
             
                  if data[:groups].empty?
         | 
| 39 | 
            -
                    puts 'Account does not have any Wavefront  | 
| 43 | 
            +
                    puts 'Account does not have any Wavefront permissions.'
         | 
| 40 44 | 
             
                  else
         | 
| 41 45 | 
             
                    puts data[:groups]
         | 
| 42 46 | 
             
                  end
         | 
| 43 47 | 
             
                end
         | 
| 44 48 |  | 
| 45 | 
            -
                 | 
| 46 | 
            -
             | 
| 49 | 
            +
                def do_grant
         | 
| 50 | 
            +
                  puts format("Granted '%<perm>s' to '%<account>s'.",
         | 
| 51 | 
            +
                              perm: options[:'<permission>'], account: options[:'<id>'])
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def do_revoke
         | 
| 55 | 
            +
                  puts format("Revoked '%<perm>s' from '%<account>s'.",
         | 
| 56 | 
            +
                              perm: options[:'<permission>'], account: options[:'<id>'])
         | 
| 57 | 
            +
                end
         | 
| 47 58 |  | 
| 48 59 | 
             
                def do_apitoken_list
         | 
| 49 60 | 
             
                  if data.empty?
         | 
| 50 | 
            -
                    puts 'Account does not have any tokens.'
         | 
| 61 | 
            +
                    puts 'Account does not have any API tokens.'
         | 
| 51 62 | 
             
                  else
         | 
| 52 63 | 
             
                    multicolumn(:tokenID, :tokenName)
         | 
| 53 64 | 
             
                  end
         | 
| 54 65 | 
             
                end
         | 
| 55 66 |  | 
| 67 | 
            +
                def do_apitoken_delete
         | 
| 68 | 
            +
                  puts format("Deleted API token '#{options[:'<token_id>']}'.")
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 56 71 | 
             
                def search_identifier_key
         | 
| 57 72 | 
             
                  :identifier
         | 
| 58 73 | 
             
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def priority_keys
         | 
| 76 | 
            +
                  %i[identifier]
         | 
| 77 | 
            +
                end
         | 
| 59 78 | 
             
              end
         | 
| 60 79 | 
             
            end
         | 
| @@ -23,7 +23,7 @@ module WavefrontCli | |
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                alias do_groups do_describe
         | 
| 26 | 
            -
                alias  | 
| 26 | 
            +
                alias do_permissions do_describe
         | 
| 27 27 |  | 
| 28 28 | 
             
                def do_create
         | 
| 29 29 | 
             
                  wf_user_id?(options[:'<id>'])
         | 
| @@ -56,36 +56,36 @@ module WavefrontCli | |
| 56 56 |  | 
| 57 57 | 
             
                def do_grant
         | 
| 58 58 | 
             
                  cannot_noop!
         | 
| 59 | 
            -
                  wf_permission?(options[:'< | 
| 59 | 
            +
                  wf_permission?(options[:'<permission>'])
         | 
| 60 60 |  | 
| 61 | 
            -
                  body =  | 
| 61 | 
            +
                  body = add_perm_to_list(current_state, options[:'<permission>'])
         | 
| 62 62 | 
             
                  wf.update(options[:'<id>'], body)
         | 
| 63 63 | 
             
                end
         | 
| 64 64 |  | 
| 65 65 | 
             
                def do_revoke
         | 
| 66 66 | 
             
                  cannot_noop!
         | 
| 67 | 
            -
                  wf_permission?(options[:'< | 
| 67 | 
            +
                  wf_permission?(options[:'<permission>'])
         | 
| 68 68 |  | 
| 69 | 
            -
                  body =  | 
| 69 | 
            +
                  body = remove_perm_from_list(current_state, options[:'<permission>'])
         | 
| 70 70 | 
             
                  wf.update(options[:'<id>'], body)
         | 
| 71 71 | 
             
                end
         | 
| 72 72 |  | 
| 73 73 | 
             
                def do_apitoken_list
         | 
| 74 | 
            -
                  wf_apitoken. | 
| 74 | 
            +
                  wf_apitoken.sa_list(options[:'<id>'])
         | 
| 75 75 | 
             
                end
         | 
| 76 76 |  | 
| 77 77 | 
             
                def do_apitoken_create
         | 
| 78 | 
            -
                  wf_apitoken. | 
| 78 | 
            +
                  wf_apitoken.sa_create(options[:'<id>'], options[:name])
         | 
| 79 79 | 
             
                end
         | 
| 80 80 |  | 
| 81 81 | 
             
                def do_apitoken_delete
         | 
| 82 | 
            -
                  wf_apitoken. | 
| 82 | 
            +
                  wf_apitoken.sa_delete(options[:'<id>'], options[:'<token_id>'])
         | 
| 83 83 | 
             
                end
         | 
| 84 84 |  | 
| 85 85 | 
             
                def do_apitoken_rename
         | 
| 86 | 
            -
                  wf_apitoken. | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 86 | 
            +
                  wf_apitoken.sa_rename(options[:'<id>'],
         | 
| 87 | 
            +
                                        options[:'<token_id>'],
         | 
| 88 | 
            +
                                        options[:'<name>'])
         | 
| 89 89 | 
             
                end
         | 
| 90 90 |  | 
| 91 91 | 
             
                def extra_validation
         | 
| @@ -101,27 +101,36 @@ module WavefrontCli | |
| 101 101 | 
             
                private
         | 
| 102 102 |  | 
| 103 103 | 
             
                def current_state
         | 
| 104 | 
            -
                  wf.describe(options[:'<id>']) | 
| 104 | 
            +
                  resp = wf.describe(options[:'<id>'])
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  return resp.response if resp.ok?
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  if resp.status.code == 404
         | 
| 109 | 
            +
                    raise WavefrontCli::Exception::UserError,
         | 
| 110 | 
            +
                          "Cannot find service account '#{options[:'<id>']}'"
         | 
| 111 | 
            +
                  end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                  raise resp.status.message
         | 
| 105 114 | 
             
                end
         | 
| 106 115 |  | 
| 107 | 
            -
                def  | 
| 108 | 
            -
                  if state[:groups].include?( | 
| 109 | 
            -
                    ok_exit(format("'%<account>s' already has the '%< | 
| 116 | 
            +
                def add_perm_to_list(state, perm)
         | 
| 117 | 
            +
                  if state[:groups].include?(perm)
         | 
| 118 | 
            +
                    ok_exit(format("'%<account>s' already has the '%<perm>s' permission.",
         | 
| 110 119 | 
             
                                   account: options[:'<id>'],
         | 
| 111 | 
            -
                                    | 
| 120 | 
            +
                                   perm: perm))
         | 
| 112 121 | 
             
                  end
         | 
| 113 122 |  | 
| 114 | 
            -
                  { groups: state[:groups].push( | 
| 123 | 
            +
                  { groups: state[:groups].push(perm), userGroups: user_group_ids(state) }
         | 
| 115 124 | 
             
                end
         | 
| 116 125 |  | 
| 117 | 
            -
                def  | 
| 118 | 
            -
                  unless state[:groups].include?( | 
| 119 | 
            -
                    ok_exit(format("'%<account>s' does not have the '%< | 
| 126 | 
            +
                def remove_perm_from_list(state, perm)
         | 
| 127 | 
            +
                  unless state[:groups].include?(perm)
         | 
| 128 | 
            +
                    ok_exit(format("'%<account>s' does not have the '%<perm>s' permission.",
         | 
| 120 129 | 
             
                                   account: options[:'<id>'],
         | 
| 121 | 
            -
                                    | 
| 130 | 
            +
                                   perm: perm))
         | 
| 122 131 | 
             
                  end
         | 
| 123 132 |  | 
| 124 | 
            -
                  { groups: state[:groups].reject { |g| g == options[:'< | 
| 133 | 
            +
                  { groups: state[:groups].reject { |g| g == options[:'<permission>'] },
         | 
| 125 134 | 
             
                    userGroups: user_group_ids(state) }
         | 
| 126 135 | 
             
                end
         | 
| 127 136 |  | 
| @@ -41,20 +41,20 @@ class ServiceAccountEndToEndTest < EndToEndTest | |
| 41 41 | 
             
                assert_abort_on_missing_creds("groups #{id}")
         | 
| 42 42 | 
             
              end
         | 
| 43 43 |  | 
| 44 | 
            -
              def  | 
| 44 | 
            +
              def test_permissions
         | 
| 45 45 | 
             
                quietly do
         | 
| 46 | 
            -
                  assert_cmd_gets(" | 
| 46 | 
            +
                  assert_cmd_gets("permissions #{id}", "/api/v2/#{api_path}/#{id}")
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 | 
            -
                assert_invalid_id(" | 
| 50 | 
            -
                assert_usage(' | 
| 49 | 
            +
                assert_invalid_id("permissions #{invalid_id}")
         | 
| 50 | 
            +
                assert_usage('permissions')
         | 
| 51 51 |  | 
| 52 52 | 
             
                assert_noop(
         | 
| 53 | 
            -
                  " | 
| 53 | 
            +
                  "permissions #{id}",
         | 
| 54 54 | 
             
                  "uri: GET https://default.wavefront.com/api/v2/#{api_path}/#{id}"
         | 
| 55 55 | 
             
                )
         | 
| 56 56 |  | 
| 57 | 
            -
                assert_abort_on_missing_creds(" | 
| 57 | 
            +
                assert_abort_on_missing_creds("permissions #{id}")
         | 
| 58 58 | 
             
              end
         | 
| 59 59 |  | 
| 60 60 | 
             
              def test_activate
         | 
| @@ -143,7 +143,7 @@ class ServiceAccountEndToEndTest < EndToEndTest | |
| 143 143 |  | 
| 144 144 | 
             
              def test_create_account_with_permissions
         | 
| 145 145 | 
             
                quietly do
         | 
| 146 | 
            -
                  assert_cmd_posts("create - | 
| 146 | 
            +
                  assert_cmd_posts("create -p #{permissions[0]} -p #{permissions[1]} #{id}",
         | 
| 147 147 | 
             
                                   '/api/v2/account/serviceaccount',
         | 
| 148 148 | 
             
                                   identifier: id,
         | 
| 149 149 | 
             
                                   active: true,
         | 
| @@ -160,7 +160,7 @@ class ServiceAccountEndToEndTest < EndToEndTest | |
| 160 160 |  | 
| 161 161 | 
             
              def test_create_invalid_permission
         | 
| 162 162 | 
             
                assert_exits_with('Unable to run command. Invalid permission.',
         | 
| 163 | 
            -
                                  "create - | 
| 163 | 
            +
                                  "create -p 123456 #{id}")
         | 
| 164 164 | 
             
              end
         | 
| 165 165 |  | 
| 166 166 | 
             
              def test_create_invalid_token
         |