Я реализую действие редактирования для политики автомасштабирования, но возвращает ошибку «Invalid guest template, внутренняя ошибка Для политики требуется одно действие». Существует только одно действие для политики, но оно все равно возвращает ошибку.Invalid Guest Template for Autoscale в SL
Это мой пример кода на Java. Пожалуйста, дайте мне знать, если обнаружены какие-либо дефекты.
Спасибо
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.softlayer.api.ApiClient;
import com.softlayer.api.RestApiClient;
import com.softlayer.api.service.Account;
import com.softlayer.api.service.Location;
import com.softlayer.api.service.container.virtual.guest.Configuration;
import com.softlayer.api.service.container.virtual.guest.configuration.Option;
import com.softlayer.api.service.hardware.Router;
import com.softlayer.api.service.location.Datacenter;
import com.softlayer.api.service.network.application.delivery.controller.loadbalancer.VirtualIpAddress;
import com.softlayer.api.service.network.application.delivery.controller.loadbalancer.VirtualServer;
import com.softlayer.api.service.network.application.delivery.controller.loadbalancer.health.Check;
import com.softlayer.api.service.network.application.delivery.controller.loadbalancer.health.check.Type;
import com.softlayer.api.service.provisioning.Hook;
import com.softlayer.api.service.scale.Asset;
import com.softlayer.api.service.scale.Group;
import com.softlayer.api.service.scale.LoadBalancer;
import com.softlayer.api.service.scale.Policy;
import com.softlayer.api.service.scale.group.Log;
import com.softlayer.api.service.scale.network.Vlan;
import com.softlayer.api.service.scale.policy.Action;
import com.softlayer.api.service.scale.policy.Trigger;
import com.softlayer.api.service.scale.policy.action.Scale;
import com.softlayer.api.service.scale.policy.trigger.OneTime;
import com.softlayer.api.service.scale.policy.trigger.Repeating;
import com.softlayer.api.service.scale.policy.trigger.ResourceUse;
import com.softlayer.api.service.scale.policy.trigger.resourceuse.Watch;
import com.softlayer.api.service.security.ssh.Key;
import com.softlayer.api.service.virtual.Guest;
import com.softlayer.api.service.virtual.disk.Image;
import com.softlayer.api.service.virtual.guest.block.Device;
import com.softlayer.api.service.virtual.guest.network.Component;
public class EditPolicy{
private static String user = "set me";
private static String apiKey = "set me";
private static ApiClient client = new RestApiClient().withCredentials(user, apiKey);
public static void main(String[] args) {
editScaleGroup();
}
private void editScaleGroup() {
Group.Service groupService = Group.service(client, 1164865l);
/**
* Network Vlans
*/
ArrayList<Long> networkVlans = new ArrayList<Long>();
networkVlans.add(1148299l); // Private VlanID
networkVlans.add(1148297l); // Public VlanID
/**
* Define SoftLayer_Scale_Group object that you wish to create
*/
Group templateObject = new Group();
templateObject.setName("TestGroup0905");
templateObject.setRegionalGroupId(22l);
templateObject.setTerminationPolicyId(1l);
// Unit : SEC, MIN, HOUR, DAY
templateObject.setCooldown(getSec(28l, "MIN"));
templateObject.setMaximumMemberCount(5l);
templateObject.setMinimumMemberCount(1l);
templateObject.setSuspendedFlag(false);
// Define SoftLayer_Virtual_Guest
Guest virtualGuestMemberTemplate = new Guest();
virtualGuestMemberTemplate.setHostname("myhost");
virtualGuestMemberTemplate.setDomain("test.com");
virtualGuestMemberTemplate.setMaxMemory(10l);
virtualGuestMemberTemplate.setStartCpus(1l);
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("dal01");
virtualGuestMemberTemplate.setDatacenter(location);
// Define Hourly billing and local disk : "SAN"
virtualGuestMemberTemplate.setHourlyBillingFlag(true);
virtualGuestMemberTemplate.setLocalDiskFlag(false);
// Network Components
Component networkComponent = new Component();
networkComponent.setMaxSpeed(10l);
virtualGuestMemberTemplate.getNetworkComponents().add(networkComponent);
// OS
virtualGuestMemberTemplate.setOperatingSystemReferenceCode("CENTOS_LATEST");
// Private Network Only
virtualGuestMemberTemplate.setPrivateNetworkOnlyFlag(false);
// Network Vlans
groupService.setMask("mask[networkVlans]");
Group scaleGroupEdit = groupService.getObject();
for (Vlan v : scaleGroupEdit.getNetworkVlans()) {
Vlan.Service vlanService = Vlan.service(client, v.getId());
vlanService.deleteObject();
}
List<Vlan> vlans = new ArrayList<Vlan>();
Vlan.Service vlanService = Vlan.service(client);
for (int i = 0; i < networkVlans.size(); i++) {
Vlan vlan = new Vlan();
vlan.setNetworkVlanId(networkVlans.get(i));
vlan.setScaleGroupId(scaleGroupEdit.getId());
Vlan vlanObject = vlanService.createObject(vlan);
vlans.add(vlanObject);
}
templateObject.getNetworkVlans().clear();
templateObject.getNetworkVlans().addAll(vlans);
// Set Balance Across Multiple Vlans
templateObject.setBalancedTerminationFlag(false);
// Adding Virtual Guest member template to the template
templateObject.setVirtualGuestMemberTemplate(virtualGuestMemberTemplate);
// Define Load Balancer with list.
LoadBalancer lBalancer = new LoadBalancer();
lBalancer.setDeleteFlag(false);
lBalancer.setPort(82L);
// Set Server Id
lBalancer.setVirtualServerId(259993l);
// 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);
LoadBalancer lBalancer1 = new LoadBalancer();
lBalancer1.setDeleteFlag(false);
lBalancer1.setPort(21L);
// Set Server Id
lBalancer1.setVirtualServerId(259993l);
// Define Type
Type type1 = new Type();
type1.setKeyname("TCP");
Check healthCheck1 = new Check();
healthCheck1.setType(type1);
lBalancer1.setHealthCheck(healthCheck1);
// Adding Load Balancer to the template
templateObject.getLoadBalancers().add(lBalancer1);
// Define Policy with list
Policy pObject = new Policy();
pObject.setCooldown(getSec(30L, "MIN"));
pObject.setName("My policy");
pObject.setId(180155L);
// Define Action for the policy
Scale scaleActions = new Scale();
scaleActions.setScaleType("PERCENT");
scaleActions.setAmount(5L);
pObject.getScaleActions().clear();
pObject.getScaleActions().add(scaleActions);
// Repeating
Repeating repeating = new Repeating();
List<String> dayList = new ArrayList<>();
dayList.add("MON");
dayList.add("TUE");
String hour = "09";
String days = "";
for (String day : dayList) {
if (!days.equals("")) {
days.concat(",");
}
days = days.concat(day);
}
String schedule = "0 " + hour + " ? * " + days + " *";
repeating.setSchedule(schedule);
pObject.getRepeatingTriggers().add(repeating);
// ResourceUse
ResourceUse resourceUse = new ResourceUse();
Watch watch = new Watch();
watch.setMetric("host.network.frontend.in.rate");
watch.setAlgorithm("EWMA");
watch.setOperator(">");
watch.setPeriod(9300L);
watch.setValue("0");
resourceUse.getWatches().add(watch);
Watch watch1 = new Watch();
watch1.setMetric("host.network.backend.out.rate");
watch1.setAlgorithm("EWMA");
watch1.setOperator(">");
watch1.setPeriod(8700L);
watch1.setValue("0");
resourceUse.getWatches().add(watch1);
Watch watch2 = new Watch();
watch2.setMetric("host.cpu.percent");
watch2.setAlgorithm("EWMA");
watch2.setOperator(">");
watch2.setPeriod(8400L);
watch2.setValue("80");
resourceUse.getWatches().add(watch2);
pObject.getResourceUseTriggers().add(resourceUse);
// Add Policy to the template
templateObject.getPolicies().add(pObject);
// Create Object
Boolean result = false;
try {
result = groupService.editObject(templateObject);
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Edit result : " + result);
}
}
Просмотрите ** Обновленный раздел ** в моем ответе, пожалуйста –