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