我正在开发一个比例组编辑功能。 有2个负载均衡器。一个是已存在的LB,另一个是编辑时添加的LB.执行示例代码时,它会返回错误,"需要运行状况检查类型"即使已经设置了运行状况检查类型。请查看下面的示例代码,如果您有任何疑问,请告知我们。
public void editObject(){
Long groupId = 1213185L;
Group.Service groupService = Group.service(client, groupId);
/**
* Group Configuration Group Details
*/
String groupName = "EditTest";
Long regionId= 1025L ; //"as-kor-west-1"
String datacenter = "seo01";
Long terminationPolicyId = 1L;
/**
* Define SoftLayer_Scale_Group object that you wish to create
*/
Group templateObject = new Group();
templateObject.setName(groupName);
templateObject.setRegionalGroupId(regionId);
templateObject.setTerminationPolicyId(terminationPolicyId);
templateObject.setCooldown(1800L);
templateObject.setMaximumMemberCount(5L);
templateObject.setMinimumMemberCount(0L);
templateObject.setSuspendedFlag(false);
/**
* Member Configuration Member Details
*/
String hostname = "edittest";
String domain = "test.com";
// Define SoftLayer_Virtual_Guest
Guest virtualGuestMemberTemplate = new Guest();
virtualGuestMemberTemplate.setHostname(hostname);
virtualGuestMemberTemplate.setDomain(domain);
virtualGuestMemberTemplate.setMaxMemory(1024L);
virtualGuestMemberTemplate.setStartCpus(1L);
//Define Storage
Device block = new Device();
block.setDevice("0");
Image image = new Image();
image.setCapacity(25L);
block.setDiskImage(image);
virtualGuestMemberTemplate.getBlockDevices().add(block);
// Define Location
Location location = new Location();
location.setName(datacenter);
virtualGuestMemberTemplate.setDatacenter(location);
// Define Hourly billing and local disk
virtualGuestMemberTemplate.setHourlyBillingFlag(true);
virtualGuestMemberTemplate.setLocalDiskFlag(false);
// Network Components
Component networkComponent = new Component();
networkComponent.setMaxSpeed(10L);
virtualGuestMemberTemplate.getNetworkComponents().add(networkComponent);
virtualGuestMemberTemplate.setOperatingSystemReferenceCode("CENTOS_LATEST");
// Private Network Only
virtualGuestMemberTemplate.setPrivateNetworkOnlyFlag(false);
// Set Balance Across Multiple Vlans
templateObject.setBalancedTerminationFlag(false);
// Adding Virtual Guest member template to the template
templateObject.setVirtualGuestMemberTemplate(virtualGuestMemberTemplate);
//***************************************************************
// Define Load Balancer1 to Edit a load balancer already created
//***************************************************************
LoadBalancer lBalancer = new LoadBalancer();
lBalancer.setDeleteFlag(false);
lBalancer.setId(112103L);
// Set Server Id
lBalancer.setVirtualServerId(292559L);
lBalancer.setVirtualIpAddressId(57137607L); // Virtual IP ID
lBalancer.setPort(20L);
// Define Type
Type type = new Type();
type.setKeyname("TCP");
Check healthCheck = new Check();
healthCheck.setType(type);
lBalancer.setHealthCheck(healthCheck);
// Adding Load Balancer to the template
templateObject.getLoadBalancers().add(lBalancer);
//**************************************************************
// Define Load Balancer2 to add a load balancer while editing.
//**************************************************************
LoadBalancer lBalancer2 = new LoadBalancer();
lBalancer2.setDeleteFlag(false);
// Set Server Id
lBalancer2.setVirtualServerId(292673L);
lBalancer2.setVirtualIpAddressId(57137609L); // Virtual IP ID
lBalancer2.setPort(23L);
// Define Type
Type type2 = new Type();
type2.setKeyname("Default");
Check healthCheck2 = new Check();
healthCheck2.setType(type2);
lBalancer2.setHealthCheck(healthCheck2);
// Adding Load Balancer to the template
templateObject.getLoadBalancers().add(lBalancer2);
// Edit Object
Boolean result = groupService.editObject(templateObject);
System.out.println("result :: " + result);
}
答案 0 :(得分:0)
如我所见,问题归结于这一行:
type2.setKeyname("Default");
您需要使用大写:
发送密钥名称type2.setKeyname("DEFAULT");
以下方法将有助于获得所有类型:
SoftLayer_Network_Application_Delivery_Controller_LoadBalancer_Health_Check_Type :: getAllObjects
关于第二个问题,你是对的,你需要将deleteFlag设置为 True
Here an example:
package com.softlayer.api.scaleGroups;
import com.softlayer.api.ApiClient;
import com.softlayer.api.RestApiClient;
import com.softlayer.api.service.scale.Group;
import com.softlayer.api.service.scale.LoadBalancer;
/**
* This script delete load balancer from scale group
*
* Important Manual Page:
* http://sldn.softlayer.com/reference/datatypes/SoftLayer_Scale_Group
* http://sldn.softlayer.com/reference/services/SoftLayer_Scale_Group/editObject
*
* @license <http://sldn.softlayer.com/article/License>
* @authon SoftLayer Technologies, Inc. <sldn@softlayer.com>
* @version 0.2.2 (master branch)
*/
public class deleteLoadBalancer {
public deleteLoadBalancer(){
// define you SoftLayer's username and apiKey
String username = "set me";
String apiKey = "set me";
// Create Client
ApiClient client=new RestApiClient().withCredentials(username, apiKey);
// Define Scale Group Identifier
Long groupId = 1213877L;
// Define the load balancer's identifier that you wish to delete
Long loadBalancerId = 112703L;
// Create Scale Group Service
Group.Service groupService = Group.service(client, groupId);
// Define a mask to get additional properties
groupService.withNewMask().loadBalancers().healthCheck().type();
try {
Group scalegroup = groupService.getObject();
for (LoadBalancer loadBalancer : scalegroup.getLoadBalancers()) {
if (loadBalancer.getId().equals(loadBalancerId)) {
loadBalancer.setDeleteFlag(true);
}
}
boolean result = groupService.editObject(scalegroup);
System.out.println(result);
} catch (Exception e){
System.out.println("Error: " + e);}
}
public static void main(String args[])
{
new deleteLoadBalancer();
}
}