/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for * license information. */ package com.microsoft.azure.management.compute.implementation; import com.microsoft.azure.AzureEnvironment; import com.microsoft.azure.AzureResponseBuilder; import com.microsoft.azure.credentials.AzureTokenCredentials; import com.microsoft.azure.management.apigeneration.Beta; import com.microsoft.azure.management.compute.AvailabilitySets; import com.microsoft.azure.management.compute.ComputeUsages; import com.microsoft.azure.management.compute.Disks; import com.microsoft.azure.management.compute.Snapshots; import com.microsoft.azure.management.compute.VirtualMachineCustomImages; import com.microsoft.azure.management.compute.VirtualMachineExtensionImages; import com.microsoft.azure.management.compute.VirtualMachineImages; import com.microsoft.azure.management.compute.VirtualMachineScaleSets; import com.microsoft.azure.management.compute.VirtualMachines; import com.microsoft.azure.management.compute.ContainerServices; import com.microsoft.azure.management.network.implementation.NetworkManager; import com.microsoft.azure.management.resources.fluentcore.arm.AzureConfigurable; import com.microsoft.azure.management.resources.fluentcore.arm.implementation.AzureConfigurableImpl; import com.microsoft.azure.management.resources.fluentcore.arm.implementation.Manager; import com.microsoft.azure.management.resources.fluentcore.utils.ProviderRegistrationInterceptor; import com.microsoft.azure.management.storage.implementation.StorageManager; import com.microsoft.azure.serializer.AzureJacksonAdapter; import com.microsoft.rest.RestClient; /** * Entry point to Azure compute resource management. */ public final class ComputeManager extends Manager<ComputeManager, ComputeManagementClientImpl> { // The service managers private StorageManager storageManager; private NetworkManager networkManager; // The collections private AvailabilitySets availabilitySets; private VirtualMachines virtualMachines; private VirtualMachineImages virtualMachineImages; private VirtualMachineExtensionImages virtualMachineExtensionImages; private VirtualMachineScaleSets virtualMachineScaleSets; private ComputeUsages computeUsages; private VirtualMachineCustomImages virtualMachineCustomImages; private Disks disks; private Snapshots snapshots; private ContainerServices containerServices; /** * Get a Configurable instance that can be used to create ComputeManager with optional configuration. * * @return Configurable */ public static Configurable configure() { return new ComputeManager.ConfigurableImpl(); } /** * Creates an instance of ComputeManager that exposes Compute resource management API entry points. * * @param credentials the credentials to use * @param subscriptionId the subscription * @return the ComputeManager */ public static ComputeManager authenticate(AzureTokenCredentials credentials, String subscriptionId) { return new ComputeManager(new RestClient.Builder() .withBaseUrl(credentials.environment(), AzureEnvironment.Endpoint.RESOURCE_MANAGER) .withCredentials(credentials) .withSerializerAdapter(new AzureJacksonAdapter()) .withResponseBuilderFactory(new AzureResponseBuilder.Factory()) .withInterceptor(new ProviderRegistrationInterceptor(credentials)) .build(), subscriptionId); } /** * Creates an instance of ComputeManager that exposes Compute resource management API entry points. * * @param restClient the RestClient to be used for API calls. * @param subscriptionId the subscription * @return the ComputeManager */ public static ComputeManager authenticate(RestClient restClient, String subscriptionId) { return new ComputeManager(restClient, subscriptionId); } /** * The interface allowing configurations to be set. */ public interface Configurable extends AzureConfigurable<Configurable> { /** * Creates an instance of ComputeManager that exposes Compute resource management API entry points. * * @param credentials the credentials to use * @param subscriptionId the subscription * @return the ComputeManager */ ComputeManager authenticate(AzureTokenCredentials credentials, String subscriptionId); } /** * The implementation for Configurable interface. */ private static final class ConfigurableImpl extends AzureConfigurableImpl<Configurable> implements Configurable { @Override public ComputeManager authenticate(AzureTokenCredentials credentials, String subscriptionId) { return ComputeManager.authenticate(buildRestClient(credentials), subscriptionId); } } private ComputeManager(RestClient restClient, String subscriptionId) { super( restClient, subscriptionId, new ComputeManagementClientImpl(restClient).withSubscriptionId(subscriptionId)); storageManager = StorageManager.authenticate(restClient, subscriptionId); networkManager = NetworkManager.authenticate(restClient, subscriptionId); } /** * @return the availability set resource management API entry point */ public AvailabilitySets availabilitySets() { if (availabilitySets == null) { availabilitySets = new AvailabilitySetsImpl(this); } return availabilitySets; } /** * @return the availability set resource management API entry point */ @Beta public ContainerServices containerServices() { if (containerServices == null) { containerServices = new ContainerServicesImpl(this); } return containerServices; } /** * @return the virtual machine resource management API entry point */ public VirtualMachines virtualMachines() { if (virtualMachines == null) { virtualMachines = new VirtualMachinesImpl( this, storageManager, networkManager); } return virtualMachines; } /** * @return the virtual machine image resource management API entry point */ public VirtualMachineImages virtualMachineImages() { if (virtualMachineImages == null) { virtualMachineImages = new VirtualMachineImagesImpl(new VirtualMachinePublishersImpl(super.innerManagementClient.virtualMachineImages(), super.innerManagementClient.virtualMachineExtensionImages()), super.innerManagementClient.virtualMachineImages()); } return virtualMachineImages; } /** * @return the virtual machine extension image resource management API entry point */ public VirtualMachineExtensionImages virtualMachineExtensionImages() { if (virtualMachineExtensionImages == null) { virtualMachineExtensionImages = new VirtualMachineExtensionImagesImpl(new VirtualMachinePublishersImpl(super.innerManagementClient.virtualMachineImages(), super.innerManagementClient.virtualMachineExtensionImages())); } return virtualMachineExtensionImages; } /** * @return the virtual machine scale set resource management API entry point */ public VirtualMachineScaleSets virtualMachineScaleSets() { if (virtualMachineScaleSets == null) { virtualMachineScaleSets = new VirtualMachineScaleSetsImpl( this, storageManager, networkManager); } return virtualMachineScaleSets; } /** * @return the compute resource usage management API entry point */ public ComputeUsages usages() { if (computeUsages == null) { computeUsages = new ComputeUsagesImpl(super.innerManagementClient); } return computeUsages; } /** * @return the virtual machine custom image management API entry point */ public VirtualMachineCustomImages virtualMachineCustomImages() { if (virtualMachineCustomImages == null) { virtualMachineCustomImages = new VirtualMachineCustomImagesImpl(this); } return virtualMachineCustomImages; } /** * @return the managed disk management API entry point */ public Disks disks() { if (disks == null) { disks = new DisksImpl(this); } return disks; } /** * @return the managed snapshot management API entry point */ public Snapshots snapshots() { if (snapshots == null) { snapshots = new SnapshotsImpl(this); } return snapshots; } }