Project

General

Profile

Actions

Bug #13775

closed

Not able to change an HG for a host using API call

Added by Konstantin Orekhov almost 9 years ago. Updated over 6 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
API
Target version:
Difficulty:
Triaged:
Fixed in Releases:
Found in Releases:

Description

I have a host that is in common/puppet-master (id: 5) HG currently:

[root@spc01 ~]# curl -kSs -H "Content-type:application/json" -u admin:$FOREMAN_PASSWORD https://localhost/api/hosts/`hostname -f` | jq '.' | egrep "name|id" | grep -v null
"environment_id": 1,
"environment_name": "production",
"domain_id": 1,
"domain_name": "test.domain.com",
"architecture_id": 1,
"architecture_name": "x86_64",
"operatingsystem_id": 1,
"operatingsystem_name": "CentOS 7.2",
"model_id": 1,
"model_name": "Standard PC (i440FX + PIIX, 1996)",
"hostgroup_id": 5,
"hostgroup_name": "common",
"owner_id": 3,
<snip>
[root@spc01 ~]#

If I try to change its HG into some other one, I get this error:

[root@spc01 ~]# curl -kSs -H "Content-type:application/json" -u admin:$FOREMAN_PASSWORD -X PUT https://localhost/api/hosts/`hostname -f` -d '{ "hostgroup_id": 3 }' | jq '.' {
"error": {
"message": "Resource host not found by id 'spc01.test.domain.com'"
}
}

production log shows me this:

| Started PUT "/api/hosts/spc01.test.domain.com" for 127.0.0.1 at 2016-02-17 01:21:45 +0000
2016-02-17 01:21:45 [app] [I] Processing by Api::V2::HostsController#update as JSON
2016-02-17 01:21:45 [app] [I] Parameters: {"hostgroup_id"=>3, "apiv"=>"v2", "id"=>"spc01.test.domain.com", :host=>{"hostgroup_id"=>3}}
2016-02-17 01:21:45 [app] [I] Authorized user admin(Admin User)
2016-02-17 01:21:45 [app] [I] Couldn't find Host::Managed with id=spc01.test.domain.com [WHERE `hosts`.`type` IN ('Host::Managed') AND ((`hostgroups`.`id` = 3 OR `hostgroups`.`title` = 3))] (ActiveRecord::RecordNotFound)
2016-02-17 01:21:45 [app] [I] Rendered api/v2/errors/not_found.json.rabl within api/v2/layouts/error_layout (1.2ms)
2016-02-17 01:21:45 [app] [I] Completed 404 Not Found in 32ms (Views: 2.2ms | ActiveRecord: 5.3ms)

As you can see, the reason things fail is that API tries to find my host AS if it is already in a new HG, which is obviously can't be true unless a new HG is the same as a current one.


Files

update_host.png View update_host.png 103 KB Amit Karsale, 11/11/2016 02:10 AM

Related issues 4 (1 open3 closed)

Related to Foreman - Bug #11266: Unnested *_id parameters treated as parent resources in APINew07/31/2015Actions
Related to Foreman - Bug #8343: API resource_scope ignores optionsClosedShimon Shtein11/11/2014Actions
Related to Foreman - Bug #16403: Updating hostgroups via API with environment_id set fails to find host groupDuplicate09/01/2016Actions
Related to Foreman - Bug #20204: GET /hostgroup/:hostgroup_id/hosts returns all hosts when id of empty hostgroup is usedClosedKavita Gaikwad07/04/2017Actions
Actions #1

Updated by Dominic Cleal almost 9 years ago

  • Related to Bug #11266: Unnested *_id parameters treated as parent resources in API added
Actions #2

Updated by Dominic Cleal almost 9 years ago

  • Related to Bug #8343: API resource_scope ignores options added
Actions #3

Updated by Dominic Cleal almost 9 years ago

  • Translation missing: en.field_release set to 123
Actions #4

Updated by Dominic Cleal over 8 years ago

  • Translation missing: en.field_release changed from 123 to 145
Actions #5

Updated by Dominic Cleal over 8 years ago

  • Translation missing: en.field_release deleted (145)
Actions #6

Updated by Konstantin Orekhov over 8 years ago

Dominic, what release the fix for this is targeted now?

Actions #7

Updated by Dominic Cleal over 8 years ago

There is no release target, I'll decide a release if/when a patch is merged.

Actions #8

Updated by Amit Karsale over 8 years ago

Hello Konstantine,

the request format for the API is wrong, you are triggering it as below:

curl -kSs -H "Content-type:application/json" -u admin:$FOREMAN_PASSWORD -X PUT https://localhost/api/hosts/`hostname -f` -d '{ "hostgroup_id": 3 }'

instead it should be triggered as :

curl -kSs -H "Content-type:application/json" -u admin:$FOREMAN_PASSWORD -X PUT https://localhost/api/hosts/`hostname -f` -d '{ "host":{"hostgroup_id": 3 }}'

I have verified it with the mentioned request parameter format and it works absolutely fine. Do let know if you find any problem further.

If it works for you we can close the issue.

Actions #9

Updated by Dominic Cleal over 8 years ago

It's not wrong, the nested hash is not required per the API documentation, it's optional. This is a regression as the hostgroup_id top-level parameter is being misinterpreted.

Actions #10

Updated by Amit Karsale over 8 years ago

okay, in that case the `parent_scope` in the code is forming this misinterpreted query, will look for it and post a fix.

Actions #11

Updated by Dominic Cleal about 8 years ago

  • Related to Bug #16403: Updating hostgroups via API with environment_id set fails to find host group added
Actions #12

Updated by Amit Karsale about 8 years ago

Hello Dominic, I have viewed the Documentation and the documentation states "host" hash param is "required", Doc url: '/apidoc/v2/hosts/update.html'

PFA

Actions #13

Updated by Dominic Cleal about 8 years ago

See https://theforeman.org/manuals/1.13/index.html#5.1API, and the support for unwrapped parameters in both Foreman and Rails. The inline API docs only show the wrapped equivalent, not both.

Actions #14

Updated by The Foreman Bot almost 8 years ago

  • Status changed from New to Ready For Testing
  • Pull request https://github.com/theforeman/foreman/pull/4052 added
Actions #15

Updated by Amit Karsale almost 8 years ago

  • Assignee set to Amit Karsale
  • Target version set to 1.15.6
Actions #16

Updated by Amit Karsale almost 8 years ago

  • Status changed from Ready For Testing to Closed
  • % Done changed from 0 to 100
Actions #17

Updated by Dominic Cleal almost 8 years ago

  • Translation missing: en.field_release set to 210
Actions #18

Updated by Daniel Lobato Garcia almost 8 years ago

  • Bugzilla link set to 1405992
Actions #19

Updated by Tomáš Strachota over 7 years ago

  • Related to Bug #20204: GET /hostgroup/:hostgroup_id/hosts returns all hosts when id of empty hostgroup is used added
Actions

Also available in: Atom PDF