/** * Copyright (C) 2008 Abiquo Holdings S.L. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.abiquo.apiclient; import static com.abiquo.apiclient.domain.ApiPath.VIRTUALDATACENTERS_URL; import static com.abiquo.apiclient.domain.Links.create; import static com.abiquo.apiclient.domain.Links.editOrSelf; import static com.abiquo.apiclient.domain.Links.isNic; import static com.abiquo.apiclient.domain.Links.withRel; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.size; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import com.abiquo.apiclient.domain.ApiPath; import com.abiquo.apiclient.domain.options.AllowedDatacenterListOptions; import com.abiquo.apiclient.domain.options.AllowedPublicCloudRegionListOptions; import com.abiquo.apiclient.domain.options.ExternalIpListOptions; import com.abiquo.apiclient.domain.options.VirtualApplianceListOptions; import com.abiquo.apiclient.domain.options.VirtualDatacenterListOptions; import com.abiquo.apiclient.domain.options.VirtualMachineListOptions; import com.abiquo.model.enumerator.NetworkType; import com.abiquo.model.rest.RESTLink; import com.abiquo.model.transport.AcceptedRequestDto; import com.abiquo.model.transport.SingleResourceTransportDto; import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto; import com.abiquo.server.core.cloud.DeviceDto; import com.abiquo.server.core.cloud.DeviceTypeDto; import com.abiquo.server.core.cloud.DevicesDto; import com.abiquo.server.core.cloud.FirewallPolicyDto; import com.abiquo.server.core.cloud.FirewallRulesDto; import com.abiquo.server.core.cloud.HardwareProfileDto; import com.abiquo.server.core.cloud.HealthCheckDto; import com.abiquo.server.core.cloud.HealthChecksDto; import com.abiquo.server.core.cloud.LoadBalancerAddressesDto; import com.abiquo.server.core.cloud.LoadBalancerDto; import com.abiquo.server.core.cloud.LoadBalancersDto; import com.abiquo.server.core.cloud.RoutingRuleDto; import com.abiquo.server.core.cloud.RoutingRulesDto; import com.abiquo.server.core.cloud.SSLCertificateDto; import com.abiquo.server.core.cloud.VirtualApplianceDto; import com.abiquo.server.core.cloud.VirtualApplianceState; import com.abiquo.server.core.cloud.VirtualAppliancesDto; import com.abiquo.server.core.cloud.VirtualDatacenterDto; import com.abiquo.server.core.cloud.VirtualDatacentersDto; import com.abiquo.server.core.cloud.VirtualMachineDto; import com.abiquo.server.core.cloud.VirtualMachineState; import com.abiquo.server.core.cloud.VirtualMachineStateDto; import com.abiquo.server.core.cloud.VirtualMachineTaskDto; import com.abiquo.server.core.cloud.VirtualMachinesDto; import com.abiquo.server.core.enterprise.EnterpriseDto; import com.abiquo.server.core.infrastructure.DatacenterDto; import com.abiquo.server.core.infrastructure.DatacentersDto; import com.abiquo.server.core.infrastructure.LocationDto; import com.abiquo.server.core.infrastructure.PublicCloudRegionDto; import com.abiquo.server.core.infrastructure.PublicCloudRegionsDto; import com.abiquo.server.core.infrastructure.network.ExternalIpDto; import com.abiquo.server.core.infrastructure.network.ExternalIpsDto; import com.abiquo.server.core.infrastructure.network.NicDto; import com.abiquo.server.core.infrastructure.network.NicsDto; import com.abiquo.server.core.infrastructure.network.PublicIpDto; import com.abiquo.server.core.infrastructure.network.VLANNetworkDto; import com.abiquo.server.core.infrastructure.network.VMNetworkConfigurationDto; import com.abiquo.server.core.infrastructure.network.VMNetworkConfigurationsDto; import com.abiquo.server.core.infrastructure.storage.TierDto; import com.abiquo.server.core.infrastructure.storage.TiersDto; import com.abiquo.server.core.infrastructure.storage.VolumeManagementDto; import com.abiquo.server.core.task.TaskDto; import com.google.common.base.Optional; import com.google.common.reflect.TypeToken; public class CloudApi { private final RestClient client; // Package private constructor to be used only by the ApiClient CloudApi(final RestClient client) { this.client = checkNotNull(client, "client cannot be null"); } public VirtualDatacenterDto getVirtualDatacenter(final String id) { return client.get(VIRTUALDATACENTERS_URL + "/" + id, VirtualDatacenterDto.MEDIA_TYPE, VirtualDatacenterDto.class); } public Iterable<DatacenterDto> listAllowedDatacenters() { return client.list(ApiPath.LOCATIONS_URL, DatacentersDto.MEDIA_TYPE, DatacentersDto.class); } public Iterable<DatacenterDto> listAllowedDatacenters( final AllowedDatacenterListOptions options) { return client.list(ApiPath.LOCATIONS_URL, options.queryParams(), DatacentersDto.MEDIA_TYPE, DatacentersDto.class); } public Iterable<PublicCloudRegionDto> listAllowedPublicCloudRegions() { return client.list(ApiPath.LOCATIONS_URL, PublicCloudRegionsDto.MEDIA_TYPE, PublicCloudRegionsDto.class); } public Iterable<PublicCloudRegionDto> listAllowedPublicCloudRegions( final AllowedPublicCloudRegionListOptions options) { return client.list(ApiPath.LOCATIONS_URL, options.queryParams(), PublicCloudRegionsDto.MEDIA_TYPE, PublicCloudRegionsDto.class); } public Iterable<VirtualDatacenterDto> listVirtualDatacenters() { return client.list(VIRTUALDATACENTERS_URL, VirtualDatacentersDto.MEDIA_TYPE, VirtualDatacentersDto.class); } public Iterable<VirtualDatacenterDto> listVirtualDatacenters( final VirtualDatacenterListOptions options) { return client.list(VIRTUALDATACENTERS_URL, options.queryParams(), VirtualDatacentersDto.MEDIA_TYPE, VirtualDatacentersDto.class); } public Iterable<ExternalIpDto> listExternalIps(final VirtualDatacenterDto vdc) { return client.list(vdc.searchLink("externalips").getHref(), ExternalIpsDto.MEDIA_TYPE, ExternalIpsDto.class); } public Iterable<ExternalIpDto> listExternalIps(final VirtualDatacenterDto vdc, final ExternalIpListOptions options) { return client.list(vdc.searchLink("externalips").getHref(), options.queryParams(), ExternalIpsDto.MEDIA_TYPE, ExternalIpsDto.class); } public Iterable<VirtualApplianceDto> listVirtualAppliances(final VirtualDatacenterDto vdc) { return client.list(vdc.searchLink("virtualappliances").getHref(), VirtualAppliancesDto.MEDIA_TYPE, VirtualAppliancesDto.class); } public Iterable<VirtualApplianceDto> listVirtualAppliances(final VirtualDatacenterDto vdc, final VirtualApplianceListOptions options) { return client.list(vdc.searchLink("virtualappliances").getHref(), options.queryParams(), VirtualAppliancesDto.MEDIA_TYPE, VirtualAppliancesDto.class); } public VirtualApplianceDto getVirtualAppliance(final String idVdc, final String idVapp) { return client.get( String.format("%s/%s/virtualappliances/%s", VIRTUALDATACENTERS_URL, idVdc, idVapp), VirtualApplianceDto.MEDIA_TYPE, VirtualApplianceDto.class); } public Iterable<VirtualMachineDto> listVirtualMachines(final VirtualApplianceDto vapp) { return client.list(vapp.searchLink("virtualmachines").getHref(), VirtualMachinesDto.MEDIA_TYPE, VirtualMachinesDto.class); } public Iterable<VirtualMachineDto> listVirtualMachines(final VirtualApplianceDto vapp, final VirtualMachineListOptions options) { return client.list(vapp.searchLink("virtualmachines").getHref(), options.queryParams(), VirtualMachinesDto.MEDIA_TYPE, VirtualMachinesDto.class); } public VLANNetworkDto getPrivateNetwork(final VirtualDatacenterDto vdc, final String idNetwork) { return client.get(vdc.searchLink("privatenetworks").getHref() + "/" + idNetwork, VLANNetworkDto.MEDIA_TYPE, VLANNetworkDto.class); } public Iterable<VMNetworkConfigurationDto> listNetworkConfigurations(final VirtualMachineDto vm) { return client.list(vm.searchLink("configurations").getHref(), VMNetworkConfigurationsDto.MEDIA_TYPE, VMNetworkConfigurationsDto.class); } public VirtualMachineDto getVirtualMachine(final VirtualApplianceDto vapp, final String idVm) { return client.get(vapp.searchLink("virtualmachines").getHref() + "/" + idVm, VirtualMachineDto.MEDIA_TYPE, VirtualMachineDto.class); } public VirtualDatacenterDto createVirtualDatacenter(final SingleResourceTransportDto location, final EnterpriseDto enterprise, final String name, final String type, final String vlanAddress, final String vlanGateway, final String vlanName) { VLANNetworkDto vlan = new VLANNetworkDto(); vlan.setAddress(vlanAddress); vlan.setGateway(vlanGateway); vlan.setMask(24); vlan.setName(vlanName); vlan.setType(NetworkType.INTERNAL); return createVirtualDatacenter(location, enterprise, name, type, vlan); } public VirtualDatacenterDto createVirtualDatacenter(final SingleResourceTransportDto location, final EnterpriseDto enterprise, final String name, final String type, final VLANNetworkDto vlan) { checkArgument(location instanceof DatacenterDto || location instanceof PublicCloudRegionDto); String mt = location instanceof DatacenterDto ? DatacenterDto.SHORT_MEDIA_TYPE_JSON : PublicCloudRegionDto.SHORT_MEDIA_TYPE_JSON; VirtualDatacenterDto vdc = new VirtualDatacenterDto(); vdc.setName(name); vdc.setHypervisorType(type); vdc.setVlan(vlan); vdc.addLink(create("enterprise", enterprise.getEditLink().getHref(), EnterpriseDto.SHORT_MEDIA_TYPE_JSON)); vdc.addLink(create("location", location.searchLink("self").getHref(), mt)); return client.post(VIRTUALDATACENTERS_URL, VirtualDatacenterDto.MEDIA_TYPE, VirtualDatacenterDto.MEDIA_TYPE, vdc, VirtualDatacenterDto.class); } public PublicIpDto createPublicIp(final PublicCloudRegionDto location) { return client.post(location.searchLink("ips").getHref(), PublicIpDto.MEDIA_TYPE, PublicIpDto.class); } public PublicIpDto addPublicIpToVirtualDatacenter(final PublicIpDto publicip, final VirtualDatacenterDto vdc) { return client.put(vdc.searchLink("purchased").getHref() + "/" + publicip.getId(), PublicIpDto.MEDIA_TYPE, PublicIpDto.class); } public PublicIpDto releasePublicIpFromVirtualDatacenter(final PublicIpDto publicip, final VirtualDatacenterDto vdc) { return client.put(vdc.searchLink("topurchase").getHref() + "/" + publicip.getId(), PublicIpDto.MEDIA_TYPE, PublicIpDto.class); } public VirtualMachineDto assignPublicIpToVirtualMachine(final PublicIpDto ip, final PublicCloudRegionDto location, final VirtualDatacenterDto vdc, final VirtualMachineDto vm) { int nics = size(filter(vm.getLinks(), isNic())); RESTLink nicLink = create(NicDto.REL_PREFIX + nics, vdc.searchLink("purchased").getHref() + "/" + ip.getId(), PublicIpDto.SHORT_MEDIA_TYPE_JSON); vm.addLink(nicLink); return editVirtualMachine(vm, 5, 300, TimeUnit.SECONDS); } public VirtualApplianceDto createVirtualAppliance(final VirtualDatacenterDto vdc, final String name) { VirtualApplianceDto vapp = new VirtualApplianceDto(); vapp.setName(name); return client.post(vdc.searchLink("virtualappliances").getHref(), VirtualApplianceDto.MEDIA_TYPE, VirtualApplianceDto.MEDIA_TYPE, vapp, VirtualApplianceDto.class); } public VirtualMachineDto createVirtualMachine(final VirtualMachineTemplateDto template, final VirtualApplianceDto vapp) { VirtualMachineDto vm = new VirtualMachineDto(); vm.setVdrpEnabled(Boolean.TRUE); vm.addLink(withRel("virtualmachinetemplate", template.getEditLink())); return client .post(vapp.searchLink("virtualmachines").getHref(), VirtualMachineDto.MEDIA_TYPE, VirtualMachineDto.MEDIA_TYPE, vm, VirtualMachineDto.class); } public VirtualMachineDto createVirtualMachine(final VirtualMachineTemplateDto template, final VirtualApplianceDto vapp, final HardwareProfileDto hp) { VirtualMachineDto vm = new VirtualMachineDto(); vm.setVdrpEnabled(Boolean.TRUE); vm.addLink(withRel("virtualmachinetemplate", template.getEditLink())); vm.addLink(withRel("hardwareprofile", editOrSelf(hp))); return client .post(vapp.searchLink("virtualmachines").getHref(), VirtualMachineDto.MEDIA_TYPE, VirtualMachineDto.MEDIA_TYPE, vm, VirtualMachineDto.class); } public VirtualMachineDto deploy(final VirtualMachineDto vm, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { return deploy(vm, false, pollInterval, maxWait, timeUnit); } public VirtualMachineDto deploy(final VirtualMachineDto vm, final boolean forceDeploy, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { client.post(vm.searchLink("deploy").getHref() + "?force=" + forceDeploy, AcceptedRequestDto.MEDIA_TYPE, new TypeToken<AcceptedRequestDto<String>>() { private static final long serialVersionUID = -6348281615419377868L; }); VirtualMachineDto refreshed = client.waitUntilUnlocked(vm, pollInterval, maxWait, timeUnit); if (!refreshed.getState().isDeployed()) { throw new RuntimeException("Deploy virtual machine operation failed"); } return refreshed; } public VirtualApplianceDto deploy(final VirtualApplianceDto vapp, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { return deploy(vapp, false, pollInterval, maxWait, timeUnit); } public VirtualApplianceDto deploy(final VirtualApplianceDto vapp, final boolean forceDeploy, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { client.post(vapp.searchLink("deploy").getHref() + "?force=" + forceDeploy, AcceptedRequestDto.MEDIA_TYPE, new TypeToken<AcceptedRequestDto<String>>() { private static final long serialVersionUID = -6348281615419377868L; }); VirtualApplianceDto refreshed = client.waitUntilUnlocked(vapp, pollInterval, maxWait, timeUnit); if (VirtualApplianceState.DEPLOYED != refreshed.getState()) { throw new RuntimeException("Deploy virtual appliance operation failed"); } return refreshed; } public VirtualMachineDto undeploy(final VirtualMachineDto vm, final boolean forceUndeploy, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { VirtualMachineTaskDto virtualMachineTask = new VirtualMachineTaskDto(); virtualMachineTask.setForceUndeploy(forceUndeploy); client.post(vm.searchLink("undeploy").getHref(), AcceptedRequestDto.MEDIA_TYPE, VirtualMachineTaskDto.MEDIA_TYPE, virtualMachineTask, new TypeToken<AcceptedRequestDto<String>>() { private static final long serialVersionUID = -6348281615419377868L; }); VirtualMachineDto refreshed = client.waitUntilUnlocked(vm, pollInterval, maxWait, timeUnit); if (refreshed.getState().isDeployed()) { throw new RuntimeException("Undeploy virtual machine operation failed"); } return refreshed; } public VirtualMachineDto undeploy(final VirtualMachineDto vm, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { return undeploy(vm, false, pollInterval, maxWait, timeUnit); } public VirtualApplianceDto undeploy(final VirtualApplianceDto vapp, final boolean forceUndeploy, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { VirtualMachineTaskDto virtualMachineTask = new VirtualMachineTaskDto(); virtualMachineTask.setForceUndeploy(forceUndeploy); client.post(vapp.searchLink("undeploy").getHref(), AcceptedRequestDto.MEDIA_TYPE, VirtualMachineTaskDto.MEDIA_TYPE, virtualMachineTask, new TypeToken<AcceptedRequestDto<String>>() { private static final long serialVersionUID = -6348281615419377868L; }); VirtualApplianceDto refreshed = client.waitUntilUnlocked(vapp, pollInterval, maxWait, timeUnit); if (VirtualApplianceState.NOT_DEPLOYED != refreshed.getState()) { throw new RuntimeException("Undeploy virtual appliance operation failed"); } return refreshed; } public VirtualApplianceDto undeploy(final VirtualApplianceDto vapp, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { return undeploy(vapp, false, pollInterval, maxWait, timeUnit); } public VirtualMachineDto powerState(final VirtualMachineDto vm, final VirtualMachineState state, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { VirtualMachineStateDto vmState = new VirtualMachineStateDto(); vmState.setState(state); client.put(vm.searchLink("state").getHref(), AcceptedRequestDto.MEDIA_TYPE, VirtualMachineStateDto.MEDIA_TYPE, vmState, new TypeToken<AcceptedRequestDto<String>>() { private static final long serialVersionUID = -6348281615419377868L; }); VirtualMachineDto refreshed = client.waitUntilUnlocked(vm, pollInterval, maxWait, timeUnit); if (state != refreshed.getState()) { throw new RuntimeException("Virtual machine power state '" + state.name() + "' operation failed"); } return refreshed; } public VirtualMachineDto editVirtualMachine(final VirtualMachineDto vm, final int pollInterval, final int maxWait, final TimeUnit timeUnit) { VirtualMachineDto refreshed = null; if (vm.getState().isDeployed()) { client.put(vm.getEditLink().getHref(), AcceptedRequestDto.MEDIA_TYPE, VirtualMachineDto.MEDIA_TYPE, vm, new TypeToken<AcceptedRequestDto<String>>() { private static final long serialVersionUID = -6348281615419377868L; }); refreshed = client.waitUntilUnlocked(vm, pollInterval, maxWait, timeUnit); if (VirtualMachineState.OFF != refreshed.getState()) { throw new RuntimeException("Virtual machine reconfigure operation failed"); } } else { client.put(vm.getEditLink().getHref(), AcceptedRequestDto.MEDIA_TYPE, VirtualMachineDto.MEDIA_TYPE, vm); refreshed = client.refresh(vm); } return refreshed; } public VolumeManagementDto getVolume(final VirtualDatacenterDto vdc, final String idVolume) { return client.get(vdc.searchLink("volumes").getHref() + "/" + idVolume, VolumeManagementDto.MEDIA_TYPE, VolumeManagementDto.class); } public VolumeManagementDto createVolume(final VirtualDatacenterDto vdc, final String name, final long sizeInMb, final TierDto tier) { VolumeManagementDto dto = new VolumeManagementDto(); dto.setName(name); dto.setSizeInMB(sizeInMb); dto.addLink(create("tier", tier.searchLink("self").getHref(), TierDto.SHORT_MEDIA_TYPE_JSON)); return client.post(vdc.searchLink("volumes").getHref(), VolumeManagementDto.MEDIA_TYPE, VolumeManagementDto.MEDIA_TYPE, dto, VolumeManagementDto.class); } public TaskDto getTask(final VirtualMachineDto vm, final String idTask) { return client.get(vm.searchLink("tasks").getHref() + "/" + idTask, TaskDto.MEDIA_TYPE, TaskDto.class); } public Iterable<TierDto> listTiers(final VirtualDatacenterDto vdc) { return client.list(vdc.searchLink("tiers").getHref(), TiersDto.MEDIA_TYPE, TiersDto.class); } public Iterable<DeviceDto> listDevices(final LocationDto location) { for (RESTLink link : location.getLinks()) { if (link.getRel().equals("devices") && link.getType().equals(DevicesDto.MEDIA_TYPE)) { return client.list(link.getHref(), DevicesDto.MEDIA_TYPE, DevicesDto.class); } } return Collections.emptyList(); } public Iterable<LoadBalancerDto> listLoadBalancers(final VirtualDatacenterDto vdc) { return client.list(vdc.searchLink("loadbalancers").getHref(), LoadBalancersDto.MEDIA_TYPE, LoadBalancersDto.class); } public Iterable<LoadBalancerDto> listLoadBalancers(final DeviceDto lbd) { return client.list(lbd.searchLink("loadbalancers").getHref(), LoadBalancersDto.MEDIA_TYPE, LoadBalancersDto.class); } public LoadBalancerDto getLoadBalacer(final DeviceDto device, final String idLoadBalancer) { return client.get(device.searchLink("loadbalancers").getHref() + "/" + idLoadBalancer, LoadBalancerDto.MEDIA_TYPE, LoadBalancerDto.class); } public void deleteLoadBalancer(final LoadBalancerDto lbd) { client.delete(lbd); } public LoadBalancerDto editLoadBalancer(final LoadBalancerDto lbd) { return client.edit(lbd); } public LoadBalancerDto createLoadBalancer(final DeviceDto device, final String name, final String algorithm, final RoutingRulesDto routingRules, final HealthChecksDto healthChecks, final LoadBalancerAddressesDto lbAddresses, final List<FirewallPolicyDto> firewalls, final Optional<VLANNetworkDto> optNetwork) { LoadBalancerDto lbd = new LoadBalancerDto(); lbd.setName(name); lbd.setAlgorithm(algorithm); if (!healthChecks.isEmpty()) { lbd.setHealthChecks(healthChecks); } lbd.setRoutingRules(routingRules); if (!lbAddresses.isEmpty()) { lbd.setLoadBalancerAddresses(lbAddresses); } if (optNetwork.isPresent()) { lbd.addLink(optNetwork.get().getEditLink()); } for (FirewallPolicyDto fw : firewalls) { lbd.addLink(withRel("firewall", fw.getEditLink())); } return client.post(device.searchLink("loadbalancers").getHref(), LoadBalancerDto.MEDIA_TYPE, LoadBalancerDto.MEDIA_TYPE, lbd, LoadBalancerDto.class); } public HealthCheckDto createHealthCheck(final LoadBalancerDto lbd, final String name, final String protocol, final long intervalInMs, final long timeoutInMs) { return createHealthCheck(lbd, name, protocol, intervalInMs, timeoutInMs, null, null, null); } public HealthCheckDto createHealthCheck(final LoadBalancerDto lbd, final String name, final String protocol, final long intervalInMs, final long timeoutInMs, final Integer attemps, final Integer port, final String path) { HealthCheckDto healthCheck = new HealthCheckDto(); healthCheck.setName(name); healthCheck.setProtocol(protocol); healthCheck.setIntervalInMs(intervalInMs); healthCheck.setTimeoutInMs(timeoutInMs); healthCheck.setAttempts(attemps); healthCheck.setPort(port); healthCheck.setPath(path); return client.post(lbd.searchLink("healthchecks").getHref(), HealthCheckDto.MEDIA_TYPE, HealthCheckDto.MEDIA_TYPE, healthCheck, HealthCheckDto.class); } public RoutingRuleDto createRoutingRule(final LoadBalancerDto lbd, final String protocolIn, final String protocolOut, final int portIn, final int portOut, final SSLCertificateDto sslCertificate) { RoutingRuleDto routingRule = new RoutingRuleDto(); routingRule.setPortIn(portIn); routingRule.setPortOut(portOut); routingRule.setProtocolIn(protocolIn); routingRule.setProtocolOut(protocolOut); if (sslCertificate != null) { routingRule.setSslCertificate(sslCertificate); } return client.post(lbd.searchLink("routingrules").getHref(), RoutingRuleDto.MEDIA_TYPE, RoutingRuleDto.MEDIA_TYPE, routingRule, RoutingRuleDto.class); } public Iterable<RoutingRuleDto> listRoutingRules(final LoadBalancerDto lbd) { return client.list(lbd.searchLink("routingrules").getHref(), RoutingRulesDto.MEDIA_TYPE, RoutingRulesDto.class); } public Iterable<HealthCheckDto> listHealthChecks(final LoadBalancerDto lbd) { return client.list(lbd.searchLink("healthchecks").getHref(), HealthChecksDto.MEDIA_TYPE, HealthChecksDto.class); } public RoutingRulesDto editRoutingRules(final RoutingRulesDto routingRules) { for (RoutingRuleDto routingRule : routingRules.getCollection()) { editRoutingRule(routingRule); } return routingRules; } public HealthChecksDto editHealthChecks(final HealthChecksDto healthChecks) { for (HealthCheckDto healthCheck : healthChecks.getCollection()) { editHealthCheck(healthCheck); } return healthChecks; } public void deleteRoutingRule(final RoutingRuleDto routingRule) { client.delete(routingRule); } public void deleteHealthCheck(final HealthCheckDto healthCheck) { client.delete(healthCheck); } public RoutingRuleDto editRoutingRule(final RoutingRuleDto routingRule) { return client.edit(routingRule); } public HealthCheckDto editHealthCheck(final HealthCheckDto healthCheck) { return client.edit(healthCheck); } public RoutingRuleDto getRoutingRule(final LoadBalancerDto lbd, final String idRoutingRule) { return client.get(lbd.searchLink("routingrules").getHref() + "/" + idRoutingRule, RoutingRuleDto.MEDIA_TYPE, RoutingRuleDto.class); } public HealthCheckDto getHealthCheck(final LoadBalancerDto lbd, final String idHealthCheck) { return client.get(lbd.searchLink("healthchecks").getHref() + "/" + idHealthCheck, HealthCheckDto.MEDIA_TYPE, HealthCheckDto.class); } /** * @param location {@link PublicCloudRegionDto} or {@link DatacenterDto} */ public DeviceDto createDevice(final LocationDto location, final DeviceTypeDto deviceType, final String name, final boolean vdcDefault) { return createDevice(location, deviceType, name, null, null, null, null, vdcDefault); } public DeviceDto createDevice(final LocationDto location, final DeviceTypeDto deviceType, final String name, final String endpoint, final String user, final String password, final VirtualDatacenterDto virtualDatacenter, final boolean vdcDefault) { DeviceDto device = new DeviceDto(); device.addLink(withRel("devicetype", editOrSelf(deviceType))); device.addLink(withRel("virtualdatacenter", editOrSelf(virtualDatacenter))); device.setName(name); device.setEndpoint(endpoint); device.setUser(user); device.setPassword(password); device.setVdcDefault(vdcDefault); return client.post(location.searchLink("devices", "devices").getHref(),// DeviceDto.MEDIA_TYPE, DeviceDto.MEDIA_TYPE, device, DeviceDto.class); } public FirewallPolicyDto createFirewallPolicy(final String name, final String description, final DeviceDto firewallDevice, final Optional<VirtualDatacenterDto> optVdc) { FirewallPolicyDto firewall = new FirewallPolicyDto(); firewall.setName(name); firewall.setDescription(description); if (optVdc.isPresent()) { firewall.addLink(withRel("virtualdatacenter", editOrSelf(optVdc.get()))); } return client.post(firewallDevice.searchLink("firewalls").getHref(), FirewallPolicyDto.MEDIA_TYPE, FirewallPolicyDto.MEDIA_TYPE, firewall, FirewallPolicyDto.class); } public FirewallRulesDto addFirewallRules(final FirewallPolicyDto firewall, final FirewallRulesDto rules) { return client.put(firewall.searchLink("rules").getHref(), FirewallRulesDto.MEDIA_TYPE, FirewallRulesDto.MEDIA_TYPE, rules, FirewallRulesDto.class); } public void addFirewallToVirtualMachine(final FirewallPolicyDto firewall, final VirtualMachineDto vm) { vm.addLink(withRel("firewall", editOrSelf(firewall))); client.put(vm.getEditLink().getHref(), AcceptedRequestDto.MEDIA_TYPE, VirtualMachineDto.MEDIA_TYPE, vm); } public NicsDto getNics(final VirtualMachineDto vm) { return client.get(vm.searchLink("nics").getHref(), NicsDto.MEDIA_TYPE, NicsDto.class); } }