在比例组SL中添加负载均衡器

时间:2016-10-11 11:14:52

标签: ibm-cloud-infrastructure

我正在开发一个比例组编辑功能。 有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);

}

1 个答案:

答案 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();
    }
}