有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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


域:localdomain


架构: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/生成JavaPOJO(我稍微更改生成的文件,如delete@JsonInclude(JsonInclude.Include.NON_NULL) )和@JsonPropertyOrder部件,我也使用org。科德豪斯。jackson)我的代码基于这个项目https://github.com/muconsulting/foreman-java-sdk

我过去经常收到/发布很多没有错误的请求,所以我认为这部分没有任何问题

当我尝试使用上述配置创建主机时,跟踪生产。日志给出: 域\u 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,它变成

二,。具有特定环境和域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. 我将架构id添加到主机组

    主机=新主机(); 主办setName(“CGCentOs”); 主办setHostgroupId(1)
    主办设置操作系统ID(1); 主办设置计算机资源ID(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添加到主机组

    主机=新主机(); 主办setName(“CGCentOs”); 主办setHostgroupId(1)
    主办设置计算机资源ID(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. 我无法将计算资源id添加到主机组。。。我只是删除了线

    主机=新主机(); 主办setName(“CGCentOs”); 主办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)

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

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

除了拉动开发分支,还有其他解决方法吗? 先谢谢你


共 (1) 个答案

  1. # 1 楼答案

    您的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}}}
    

    原因是,foreman 1.7中包含了一个名为“主机”的新键值对。x、 这是因为API从foreman 1.6更改而来。x到1.7。x

    干杯, 克里斯