Bug #13775
closedNot able to change an HG for a host using API call
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
Updated by Dominic Cleal almost 9 years ago
- Related to Bug #11266: Unnested *_id parameters treated as parent resources in API added
Updated by Dominic Cleal almost 9 years ago
- Related to Bug #8343: API resource_scope ignores options added
Updated by Dominic Cleal almost 9 years ago
- Translation missing: en.field_release set to 123
Updated by Dominic Cleal over 8 years ago
- Translation missing: en.field_release changed from 123 to 145
Updated by Dominic Cleal over 8 years ago
- Translation missing: en.field_release deleted (
145)
Updated by Konstantin Orekhov over 8 years ago
Dominic, what release the fix for this is targeted now?
Updated by Dominic Cleal over 8 years ago
There is no release target, I'll decide a release if/when a patch is merged.
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.
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.
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.
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
Updated by Amit Karsale about 8 years ago
- File update_host.png update_host.png added
Hello Dominic, I have viewed the Documentation and the documentation states "host" hash param is "required", Doc url: '/apidoc/v2/hosts/update.html'
PFA
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.
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
Updated by Amit Karsale almost 8 years ago
- Assignee set to Amit Karsale
- Target version set to 1.15.6
Updated by Amit Karsale almost 8 years ago
- Status changed from Ready For Testing to Closed
- % Done changed from 0 to 100
Applied in changeset 8e81effcedafc539cbe3477b5565d9239f1f2f51.
Updated by Dominic Cleal almost 8 years ago
- Translation missing: en.field_release set to 210
Updated by Daniel Lobato Garcia almost 8 years ago
- Bugzilla link set to 1405992
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