Project

General

Profile

Bug #16206

Updated by Tomáš Strachota over 7 years ago

Hammer allows to specify each option multiple times and the last value wins. This can be confusing to users: 

 I have tried a assign several roles at once. Hammer probably is not designed to do this. But it does not failure when passing multiple --role-id options: 

 <pre> 
 [root@foo ~]# hammer -d -v -u admin -p ***** user add-role --id 5 --role-id 11 --role-id 9 
 [ INFO 2016-08-19 13:40:56 Init] Initialization of Hammer CLI (0.5.1.11) has started... 
 [DEBUG 2016-08-19 13:40:56 Init] Running at ruby 2.2.2-p95 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli_config.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/csv.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/foreman.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/foreman_bootdisk.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/foreman_discovery.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/foreman_docker.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/foreman_remote_execution.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/foreman_tasks.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/import.yml has been loaded 
 [ INFO 2016-08-19 13:40:56 Init] Configuration from the file /etc/hammer/cli.modules.d/katello.yml has been loaded 
 [DEBUG 2016-08-19 13:40:56 Connection] Registered: foreman 
 [DEBUG 2016-08-19 13:40:56 API] Global headers: { 
         :content_type => "application/json", 
               :accept => "application/json;version=2", 
     "Accept-Language" => "en" 
 } 
 [DEBUG 2016-08-19 13:40:56 API] Follow redirects: never 
 [ INFO 2016-08-19 13:40:56 Modules] Extension module hammer_cli_foreman (0.5.1.9) loaded 
 [ INFO 2016-08-19 13:40:56 Modules] Extension module hammer_cli_foreman_bootdisk (0.1.3.3) loaded 
 [ INFO 2016-08-19 13:40:56 Modules] Extension module hammer_cli_foreman_discovery (0.0.2.3) loaded 
 [ INFO 2016-08-19 13:40:57 Modules] Extension module hammer_cli_import (0.11.2) loaded 
 [ INFO 2016-08-19 13:40:57 HammerCLI::MainCommand] subcommand organization (HammerCLIForeman::Organization) was removed. 
 [ INFO 2016-08-19 13:40:57 HammerCLI::MainCommand] subcommand organization (HammerCLIKatello::Organization) was created. 
 [ INFO 2016-08-19 13:40:58 Modules] Extension module hammer_cli_katello (0.0.22.23) loaded 
 [DEBUG 2016-08-19 13:40:58 Init] Using locale 'en' 
 [DEBUG 2016-08-19 13:40:58 Init] 'mo' files for locale domain 'hammer-cli' loaded from '/opt/theforeman/tfm/root/usr/share/gems/gems/hammer_cli-0.5.1.11/locale' 
 [DEBUG 2016-08-19 13:40:58 Init] 'mo' files for locale domain 'hammer-cli-foreman' loaded from '/opt/theforeman/tfm/root/usr/share/gems/gems/hammer_cli_foreman-0.5.1.9/locale' 
 [DEBUG 2016-08-19 13:40:58 Init] 'mo' files for locale domain 'hammer_cli_foreman_docker' loaded from '/opt/theforeman/tfm/root/usr/share/gems/gems/hammer_cli_foreman_docker-0.0.6/locale' 
 [DEBUG 2016-08-19 13:40:58 Init] 'mo' files for locale domain 'hammer-cli-katello' loaded from '/opt/theforeman/tfm/root/usr/share/gems/gems/hammer_cli_katello-0.0.22.23/locale' 
 [ INFO 2016-08-19 13:40:58 HammerCLI::MainCommand] Called with options: {"option_verbose"=>true, "option_debug"=>true, "option_username"=>"admin", "option_password"=>"***"} 
 [ INFO 2016-08-19 13:40:58 HammerCLIForeman::User] Called with options: {} 
 [ INFO 2016-08-19 13:40:58 HammerCLIForeman::User::UserAddRoleCommand] Called with options: {"option_role_id"=>9, "option_id"=>"5"} 
 [ INFO 2016-08-19 13:40:58 API] Server: https://localhost/ 
 [ INFO 2016-08-19 13:40:58 API] GET /api/users/5 
 [DEBUG 2016-08-19 13:40:58 API] Params: {} 
 [DEBUG 2016-08-19 13:40:58 API] Headers: { 
     :params => {} 
 } 
 [DEBUG 2016-08-19 13:40:58 API] Response: { 
                "firstname" => "9HnK1L09bh", 
                 "lastname" => "Ri0CsVpxxj", 
                     "mail" => "3edzhg@example.com", 
                    "admin" => true, 
           "auth_source_id" => 1, 
         "auth_source_name" => "Internal", 
                 "timezone" => nil, 
                   "locale" => nil, 
            "last_login_on" => "2016-08-11 19:09:37 UTC", 
               "created_at" => "2016-08-11 19:06:01 UTC", 
               "updated_at" => "2016-08-11 19:09:37 UTC", 
                       "id" => 5, 
                    "login" => "3edzhg", 
         "default_location" => nil, 
                "locations" => [], 
     "default_organization" => nil, 
            "organizations" => [], 
     "auth_source_internal" => { 
           "id" => 1, 
         "type" => "AuthSourceInternal", 
         "name" => "Internal" 
     }, 
       "mail_notifications" => [], 
                    "roles" => [ 
         [0] { 
             "name" => "View hosts", 
               "id" => 9 
         }, 
         [1] { 
             "name" => "Anonymous", 
               "id" => 14 
         } 
     ], 
               "usergroups" => [] 
 } 
 [DEBUG 2016-08-19 13:40:58 API] Response headers: { 
                       :date => "Fri, 19 Aug 2016 17:40:58 GMT", 
                     :server => "Apache/2.4.6 (Red Hat Enterprise Linux)", 
            :x_frame_options => "SAMEORIGIN", 
           :x_xss_protection => "1; mode=block", 
     :x_content_type_options => "nosniff", 
            :foreman_version => "1.11.0.49", 
        :foreman_api_version => "2", 
            :apipie_checksum => "5d126cac0ca6038faa774a0c7af7f5dc", 
              :cache_control => "max-age=0, private, must-revalidate", 
               :x_request_id => "4712b898-91e1-490d-9507-f6d566f9a81e", 
                  :x_runtime => "0.086214", 
               :x_powered_by => "Phusion Passenger 4.0.18", 
                 :set_cookie => [ 
         [0] "_session_id=13e2c4c39086a73092da66505ce18630; path=/; secure; HttpOnly" 
     ], 
                       :etag => "\"d0f7d79493b9634ffb58c9a74df17401-gzip\"", 
                     :status => "200 OK", 
                       :vary => "Accept-Encoding", 
           :content_encoding => "gzip", 
             :content_length => "319", 
               :content_type => "application/json; charset=utf-8" 
 } 
 [ INFO 2016-08-19 13:40:58 API] Server: https://localhost/ 
 [ INFO 2016-08-19 13:40:58 API] PUT /api/users/5 
 [DEBUG 2016-08-19 13:40:58 API] Params: { 
     "user" => { 
         "role_ids" => [ 
             [0] "9", 
             [1] "14" 
         ] 
     } 
 } 
 [DEBUG 2016-08-19 13:40:58 API] Headers: {} 
 [DEBUG 2016-08-19 13:40:58 API] Response: { 
                "firstname" => "9HnK1L09bh", 
                 "lastname" => "Ri0CsVpxxj", 
                     "mail" => "3edzhg@example.com", 
                    "admin" => true, 
           "auth_source_id" => 1, 
         "auth_source_name" => "Internal", 
                 "timezone" => nil, 
                   "locale" => nil, 
            "last_login_on" => "2016-08-11 19:09:37 UTC", 
               "created_at" => "2016-08-11 19:06:01 UTC", 
               "updated_at" => "2016-08-11 19:09:37 UTC", 
                       "id" => 5, 
                    "login" => "3edzhg", 
         "default_location" => nil, 
                "locations" => [], 
     "default_organization" => nil, 
            "organizations" => [], 
     "auth_source_internal" => { 
           "id" => 1, 
         "type" => "AuthSourceInternal", 
         "name" => "Internal" 
     }, 
       "mail_notifications" => [], 
                    "roles" => [ 
         [0] { 
             "name" => "View hosts", 
               "id" => 9 
         }, 
         [1] { 
             "name" => "Anonymous", 
               "id" => 14 
         } 
     ], 
               "usergroups" => [] 
 } 
 [DEBUG 2016-08-19 13:40:58 API] Response headers: { 
                       :date => "Fri, 19 Aug 2016 17:40:58 GMT", 
                     :server => "Apache/2.4.6 (Red Hat Enterprise Linux)", 
            :x_frame_options => "SAMEORIGIN", 
           :x_xss_protection => "1; mode=block", 
     :x_content_type_options => "nosniff", 
            :foreman_version => "1.11.0.49", 
        :foreman_api_version => "2", 
            :apipie_checksum => "5d126cac0ca6038faa774a0c7af7f5dc", 
              :cache_control => "max-age=0, private, must-revalidate", 
               :x_request_id => "21e09a90-630a-4e7f-a7e4-e70efc08d895", 
                  :x_runtime => "0.110168", 
               :x_powered_by => "Phusion Passenger 4.0.18", 
                 :set_cookie => [ 
         [0] "request_method=PUT; path=/", 
         [1] "_session_id=310dff7cc3fa37d253af168b49a674cb; path=/; secure; HttpOnly" 
     ], 
                       :etag => "\"d0f7d79493b9634ffb58c9a74df17401-gzip\"", 
                     :status => "200 OK", 
                       :vary => "Accept-Encoding", 
           :content_encoding => "gzip", 
             :content_length => "319", 
               :content_type => "application/json; charset=utf-8" 
 } 
 User role has been assigned 
 </pre> 

 Besides command doesn't show any error, it ignored the first role with id "11" passed as parameter: 

 <pre> 
 [root@foo ~]# hammer -u admin -p ***** user info --id 5 
 Id:                     5 
 Login:                  3edzhg 
 Name:                   9HnK1L09bh Ri0CsVpxxj 
 Email:                  3edzhg@example.com 
 Admin:                  yes 
 Authorized by:          Internal 
 Locale:                 default 
 Timezone:               default 
 Last login:             2016/08/11 19:09:37 
 Default organization: 
 Default location: 
 Roles: 
     View hosts 
     Anonymous 
 User groups: 

 Created at:             2016/08/11 19:06:01 
 Updated at:             2016/08/11 19:09:37 
 </pre> 

 List of host 

 <pre> 
 [root@foo ~]# hammer -u admin -p ***** role list 
 ---|------------------------- 
 ID | NAME 
 ---|------------------------- 
 6    | Access Insights Admin 
 5    | Access Insights Viewer 
 14 | Anonymous 
 1    | Boot disk access 
 18 | Compliance manager 
 17 | Compliance viewer 
 19 | Create ARF report 
 13 | Default user 
 16 | Discovery Manager 
 15 | Discovery Reader 
 10 | Edit hosts 
 8    | Edit partition tables 
 7    | Manager 
 4    | Red Hat Access Logs 
 21 | Remote Execution Manager 
 20 | Remote Execution User 
 12 | Site manager 
 2    | Tasks Manager 
 3    | Tasks Reader 
 11 | Viewer 
 9    | View hosts 
 ---|------------------------- 

 </pre> 

 So this command should: 

 1) Assign all roles present on multiple role-id option or; 
 2) Return an error msg informing multiple role-id options are not allowed

Back