2016-08-09 27 views
0

Ich versuche, eine Maßstabsgruppe zu bearbeiten, aber wenn ich Vlans bearbeite, gibt es eine Ausnahme zurück. Dies ist der Code, den ich getestet habe. Die Art der Bearbeitung ist die gleiche wie beim Erstellen eines Objekts, aber ich habe groupId und policyId zusammen mit editObject() hinzugefügt. Bitte lassen Sie mich wissen, wenn Sie irgendwelche Zweifel haben. DankeSkalierungsobjekt in SL bearbeiten

RestApiClient client = getSoftlayerClient(); 
    groupService = Group.service(client, group.getGroupId()); 

    /** 
    * Network Vlans 
    */ 
    Long[] networkVlans = { group.getPublicVlanId(), group.getPrivateVlanId() }; 

    /** 
    * Define SoftLayer_Scale_Group object that you wish to create 
    */ 
    Group templateObject = new Group(); 
    templateObject.setName(group.getGroupName()); 
    templateObject.setRegionalGroupId(group.getRegionId()); 
    templateObject.setTerminationPolicyId(group.gettPolicyId()); 

    // Unit : SEC, MIN, HOUR, DAY 
    templateObject.setCooldown(getSec(group.getCooldownPeriod(), group.getCooldownUnit())); 

    templateObject.setMaximumMemberCount(group.getMaxMember()); 
    templateObject.setMinimumMemberCount(group.getMinMember()); 

    templateObject.setSuspendedFlag(false); 

    // Define SoftLayer_Virtual_Guest 
    Guest virtualGuestMemberTemplate = new Guest(); 
    virtualGuestMemberTemplate.setHostname(group.getHostName()); 
    virtualGuestMemberTemplate.setDomain(group.getDomain()); 
    virtualGuestMemberTemplate.setMaxMemory(group.getMaxMemory()); 
    virtualGuestMemberTemplate.setStartCpus(group.getStartCpu()); 

    List<AutoScaleStorageVO> storageList = group.getStorageList(); 

    for (AutoScaleStorageVO storage : storageList) { 
     Device block = new Device(); 
     block.setDevice(storage.getDiskOrder()); 
     Image image = new Image(); 
     image.setCapacity(storage.getCapacity()); 
     block.setDiskImage(image); 
     virtualGuestMemberTemplate.getBlockDevices().add(block); 
    } 

    // Define Location 

    if (group.getDatacenter() != "") { 
     Location location = new Location(); 
     location.setName(group.getDatacenter()); 
     virtualGuestMemberTemplate.setDatacenter(location); 
    } 

    // Define Hourly billing and local disk 
    virtualGuestMemberTemplate.setHourlyBillingFlag(true); 
    if (storageList.get(0).getDiskType().equals("LOCAL")) { 
     virtualGuestMemberTemplate.setLocalDiskFlag(true); 
    } else { 
     virtualGuestMemberTemplate.setLocalDiskFlag(false); 
    } 

    // Network Components 
    Component networkComponent = new Component(); 
    networkComponent.setMaxSpeed(group.getMaxSpeed()); 

    virtualGuestMemberTemplate.getNetworkComponents().add(networkComponent); 

    // OS 
    virtualGuestMemberTemplate.setOperatingSystemReferenceCode(group.getOsCode()); 

    virtualGuestMemberTemplate.setPrivateNetworkOnlyFlag(group.isPrivateOnly()); 

    // Ssh key 
    if (group.getSshKeyId() != null) { 
     Key newKey = new Key(); 
     newKey.setId(group.getSshKeyId()); 
     virtualGuestMemberTemplate.getSshKeys().add(newKey); 
    } 

    // Provision Script 
    if (group.getPostInstallUri() != "") { 
     virtualGuestMemberTemplate.setPostInstallScriptUri(group.getPostInstallUri()); 
    } 

    // Network Vlans : Edit vlans with new vlanIds. 

     for (int i = 0; i <= networkVlans.length; i++) { 
      Vlan vlan = new Vlan(); 
      vlan.setNetworkVlanId(networkVlans[i]); 
      templateObject.getNetworkVlans().add(vlan); 
     } 

    // Adding Virtual Guest member template to the template 
    templateObject.setVirtualGuestMemberTemplate(virtualGuestMemberTemplate); 

Boolean result = groupService.editObject(templateObject); 

20: 43: 21,814 [http-bio-8181-exec-2] ERROR - Fehler beim Bearbeiten automatische Skalierung Gruppe Ausnahme: 2

+0

, wenn Sie Kopieren Sie Ihren Code, bitte fügen Sie zumindest Ihre Importe hinzu Ich weiß nicht, welche Pakete Sie verwenden Ich verschwende viel Zeit beim Versuch, es herauszufinden –

Antwort

0

Versuchen Sie folgendes:

import java.util.ArrayList; 
import java.util.List; 

import com.google.gson.Gson; 
import com.softlayer.api.*; 
import com.softlayer.api.service.scale.network.Vlan; 
import com.softlayer.api.service.scale.Group; 


public class EditScale { 

    private static String user = "set me"; 

    private static String apiKey = "set me"; 

    private static ApiClient client = new RestApiClient().withCredentials(user, apiKey).withLoggingEnabled(); 

    private static Long idScaleGroup = new Long(11111); 

    public static void main(String[] args) { 

     Group.Service scaleGroupService = Group.service(client, idScaleGroup); 
     scaleGroupService.setMask("mask[networkVlans]"); 


     Group scaleGroupEdit = scaleGroupService.getObject(); 

     for(Vlan v:scaleGroupEdit.getNetworkVlans()){ 
      Vlan.Service vlanService = Vlan.service(client, v.getId()); 
      vlanService.deleteObject(); 
     } 

     Vlan.Service vlanService = Vlan.service(client); 

     Vlan templateObjectPrivate = new Vlan(); 
     templateObjectPrivate.setScaleGroupId(scaleGroupEdit.getId()); 
     templateObjectPrivate.setNetworkVlanId(2222222L); 
     Vlan vlanPrivate = vlanService.createObject(templateObjectPrivate); 

     Vlan templateObjectPublic = new Vlan(); 
     templateObjectPublic.setScaleGroupId(scaleGroupEdit.getId()); 
     templateObjectPublic.setNetworkVlanId(333333L); 
     Vlan vlanPublic = vlanService.createObject(templateObjectPublic); 

     List<Vlan> vlans = new ArrayList<Vlan>(); 
     vlans.add(vlanPrivate); 
     vlans.add(vlanPublic); 

     scaleGroupEdit.getNetworkVlans().clear(); 
     scaleGroupEdit.getNetworkVlans().addAll(vlans); 

     Gson gson = new Gson(); 
     System.out.println(gson.toJson(scaleGroupService.editObject(scaleGroupEdit))); 

    } 

} 
+0

Ich postete einen ausführbaren Code, aber es gibt immer noch Fehler zurück. –

+0

Es funktioniert !!, Danke :) –