无法使用 API v2 Foreman 1.7.1 创建主机

Unable to create host using API v2 Foreman 1.7.1

我的目的:我只是想通过我编写的 java 程序从具有特定 cpu/ram/hard 磁盘容量的模板创建 CentOS 虚拟机。

我所做的事情:Foreman 1.7.1 +(无集群修复 issues/1945)+ 为 vmware 添加计算资源

我可以通过 web ui 创建主机,配置如下: 名称:testCentOsImageBased 无主机组 部署于:cmptrsrc_VMWare (VMWare) 环境:生产 没有傀儡 CA 没有傀儡师


域:本地域


架构:x86_64 操作系统:CentOS 6.5 配置方法:基于映像 (CentOs6_5img)

根据 API v2,我将主机配置设置如下:

host.setName("CGCentOs");
host.setEnvironmentId("1");
host.setDomainId("1");
host.setArchitectureId("1");
host.setOperatingsystemId("1");
host.setComputeResourceId("1");

我使用 http://www.jsonschema2pojo.org/ 生成 java pojo(我稍微更改了生成的文件,例如我删除了 @JsonInclude(JsonInclude.Include.NON_NULL) ) 和@JsonPropertyOrder 部分,我也使用 org.codehaus.jackson) 并且我的代码基于这个项目 https://github.com/muconsulting/foreman-java-sdk

我曾经get/post很多请求都没有错误,所以我认为这部分没有任何问题

当我尝试使用上述配置创建我的主机时,tailing production.log 给出: domain_id 不允许作为主机

的嵌套参数

所以我试图摆脱使用domain_id,主机组可以指定domain_id,所以我创建了一个具有特定环境的主机组:

Host host = new Host();
host.setName("CGCentOs");
host.setHostgroupId(1);    
host.setDomainId(1); 
host.setArchitectureId(1); 
host.setOperatingsystemId(1); 
host.setComputeResourceId(1);

它给出:

Processing by Api::V2::HostsController#create as JSON
  Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "domain_id"=>1, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "domain_id"=>1, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1}}
Expire fragment views/tabs_and_title_records-3 (0.1ms)
Authorized user admin(Admin User)
domain_id is not allowed as nested parameter for hosts. Allowed parameters are hostgroup_id, location_id, organization_id, environment_id (RuntimeError)

所以我在主机组中也指定了domain_id,它变成了

2.A 具有特定环境的主机组和 domain_id

Host host = new Host();
host.setName("CGCentOs");
host.setHostgroupId(1);    
host.setArchitectureId(1); 
host.setOperatingsystemId(1); 
host.setComputeResourceId(1);

它给出:

  Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1}}
Authorized user admin(Admin User)
architecture_id is not allowed as nested parameter for hosts. Allowed parameters are hostgroup_id, location_id, organization_id, environment_id (RuntimeError)
  1. 我加architecture_id到主机组

    主机主机=新主机(); host.setName("CGCentOs"); host.setHostgroupId(1);
    host.setOperatingsystemId(1); host.setComputeResourceId(1);

它给出:

 Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1}}
Authorized user admin(Admin User)
operatingsystem_id is not allowed as nested parameter for hosts. Allowed parameters are hostgroup_id, location_id, organization_id, environment_id (RuntimeError)
  1. 我添加operatingsystem_id到主机组。

    主机主机=新主机(); host.setName("CGCentOs"); host.setHostgroupId(1);
    host.setComputeResourceId(1);

它给出:

Processing by Api::V2::HostsController#create as JSON
  Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "hostgroup_id"=>1, "compute_resource_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "hostgroup_id"=>1, "compute_resource_id"=>1}}
Expire fragment views/tabs_and_title_records-3 (0.6ms)
Authorized user admin(Admin User)
compute_resource_id is not allowed as nested parameter for hosts. Allowed parameters are hostgroup_id, location_id, organization_id, environment_id (RuntimeError)
  1. 我无法将 compute_resource id 添加到主机组...我只是删除了行...

    主机主机=新主机(); host.setName("CGCentOs"); host.setHostgroupId(1);

它给出:

Processing by Api::V2::HostsController#create as JSON
  Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "hostgroup_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "hostgroup_id"=>1}}
Authorized user admin(Admin User)
Unprocessable entity Host::Managed (id: new):
  MAC address is not a valid MAC address
  MAC address can't be blank
  Partition Table cant be blank unless a custom partition has been defined

我期待这一点,因为计算资源定义了它的虚拟性... 因此,计算配置文件和计算资源似乎很紧密

我试试这个:

Host host = new Host();
host.setName("CGCentOs");
host.setHostgroupId(1);    
host.setComputeProfileId(3);

它给出:

Processing by Api::V2::HostsController#create as JSON
  Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "hostgroup_id"=>1, "compute_profile_id"=>3, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "hostgroup_id"=>1, "compute_profile_id"=>3}}
Authorized user admin(Admin User)
compute_profile_id is not allowed as nested parameter for hosts. Allowed parameters are hostgroup_id, location_id, organization_id, environment_id (RuntimeError)

我创建了一个新的计算配置文件,它出现在编辑主机组窗格中...所以重试:

Host host = new Host();
host.setName("CGCentOs");
host.setHostgroupId(1); 

再次MAC地址问题:

Processing by Api::V2::HostsController#create as JSON
  Parameters: {"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "hostgroup_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "hostgroup_id"=>1}}
Expire fragment views/tabs_and_title_records-3 (0.1ms)
Authorized user admin(Admin User)
Unprocessable entity Host::Managed (id: new):
  MAC address is not a valid MAC address
  MAC address can't be blank
  Partition Table cant be blank unless a custom partition has been defined

除了拉开发分支,有什么解决方法吗? 提前谢谢你

您的 JSON 目前看起来像这样:

{"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "domain_id"=>1, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "domain_id"=>1, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1}}

但必须是:

{"host"=>{"name"=>"CGCentOs", "capabilities"=>nil, "parameters"=>nil, "interfaces"=>nil, "puppetclasses"=>nil, "domain_id"=>1, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1, "all_puppetclasses"=>nil, "config_groups"=>nil, "apiv"=>"v2", :host=>{"name"=>"CGCentOs", "domain_id"=>1, "architecture_id"=>1, "operatingsystem_id"=>1, "hostgroup_id"=>1, "compute_resource_id"=>1}}}

原因是,工头 1 中包含一个名为 "host" 的新键值对。7.x.It 是因为 API 从工头 1 更改而来。6.x 到 1.7.x

干杯, 克里斯