/** * 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; import com.microsoft.azure.management.apigeneration.Fluent; import com.microsoft.azure.management.compute.implementation.ComputeManager; import com.microsoft.azure.management.compute.implementation.ImageInner; import com.microsoft.azure.management.resources.fluentcore.arm.models.ChildResource; import com.microsoft.azure.management.resources.fluentcore.arm.models.GroupableResource; import com.microsoft.azure.management.resources.fluentcore.arm.models.Resource; import com.microsoft.azure.management.resources.fluentcore.model.Attachable; import com.microsoft.azure.management.resources.fluentcore.model.Creatable; import com.microsoft.azure.management.resources.fluentcore.model.Refreshable; import com.microsoft.azure.management.resources.fluentcore.model.HasInner; import java.util.Map; /** * An immutable client-side representation of an Azure virtual machine custom image. */ @Fluent public interface VirtualMachineCustomImage extends GroupableResource<ComputeManager, ImageInner>, Refreshable<VirtualMachineCustomImage> { /** * @return true if this image was created by capturing a virtual machine */ boolean isCreatedFromVirtualMachine(); /** * @return ID of the virtual machine if this image was created by capturing that virtual machine */ String sourceVirtualMachineId(); /** * @return operating system disk image in this image */ ImageOSDisk osDiskImage(); /** * @return data disk images in this image, indexed by the disk LUN */ Map<Integer, ImageDataDisk> dataDiskImages(); /** * The entirety of the image definition. */ interface Definition extends DefinitionStages.Blank, DefinitionStages.WithGroup, DefinitionStages.WithOSDiskImageSourceAltVirtualMachineSource, DefinitionStages.WithOSDiskImageSource, DefinitionStages.WithSourceVirtualMachine, DefinitionStages.WithCreateAndDataDiskImageOSDiskSettings { } /** * Grouping of image definition stages. */ interface DefinitionStages { /** * The first stage of a image definition. */ interface Blank extends GroupableResource.DefinitionWithRegion<WithGroup> { } /** * The stage of the image definition allowing to specify the resource group. */ interface WithGroup extends GroupableResource.DefinitionStages.WithGroup<WithOSDiskImageSourceAltVirtualMachineSource> { } /** * The stage of the image definition that allows choosing between using a virtual machine as * the source for OS and the data disk images or beginning an OS disk image definition. */ interface WithOSDiskImageSourceAltVirtualMachineSource extends WithOSDiskImageSource, WithSourceVirtualMachine { } /** * The stage of the image definition allowing to choose an OS source and an OS state for the OS image. */ interface WithOSDiskImageSource { /** * Specifies the Windows source native VHD for the OS disk image. * * @param sourceVhdUrl source Windows virtual hard disk URL * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withWindowsFromVhd(String sourceVhdUrl, OperatingSystemStateTypes osState); /** * Specifies the Linux source native VHD for the OS disk image. * * @param sourceVhdUrl source Linux virtual hard disk URL * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withLinuxFromVhd(String sourceVhdUrl, OperatingSystemStateTypes osState); /** * Specifies the Windows source snapshot for the OS disk image. * * @param sourceSnapshot source snapshot resource * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withWindowsFromSnapshot(Snapshot sourceSnapshot, OperatingSystemStateTypes osState); /** * Specifies the Linux source snapshot for the OS disk image. * * @param sourceSnapshot source snapshot resource * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withLinuxFromSnapshot(Snapshot sourceSnapshot, OperatingSystemStateTypes osState); /** * Specifies the Windows source snapshot for the OS disk image. * * @param sourceSnapshotId source snapshot resource ID * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withWindowsFromSnapshot(String sourceSnapshotId, OperatingSystemStateTypes osState); /** * Specifies the Linux source snapshot for the OS disk image. * * @param sourceSnapshotId source snapshot resource ID * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withLinuxFromSnapshot(String sourceSnapshotId, OperatingSystemStateTypes osState); /** * Specifies the Windows source managed disk for the OS disk image. * * @param sourceManagedDiskId source managed disk resource ID * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withWindowsFromDisk(String sourceManagedDiskId, OperatingSystemStateTypes osState); /** * Specifies the Linux source managed disk for the OS disk image. * * @param sourceManagedDiskId source managed disk resource ID * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withLinuxFromDisk(String sourceManagedDiskId, OperatingSystemStateTypes osState); /** * Specifies the Windows source managed disk for the OS disk image. * * @param sourceManagedDisk source managed disk * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withWindowsFromDisk(Disk sourceManagedDisk, OperatingSystemStateTypes osState); /** * Specifies the Linux source managed disk for the OS disk image. * * @param sourceManagedDisk source managed disk * @param osState operating system state * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withLinuxFromDisk(Disk sourceManagedDisk, OperatingSystemStateTypes osState); } /** * The stage of the image definition allowing to choose source virtual machine. */ interface WithSourceVirtualMachine { /** * Uses the virtual machine's OS disk and data disks as the source for OS disk image and * data disk images of this image. * * @param virtualMachineId source virtual machine resource ID * @return the next stage of the definition */ WithCreate fromVirtualMachine(String virtualMachineId); /** * Uses the virtual machine's OS and data disks as the sources for OS disk image and data * disk images of this image. * * @param virtualMachine source virtual machine * @return the next stage of the definition */ WithCreate fromVirtualMachine(VirtualMachine virtualMachine); } /** * The stage of an image definition allowing to create the image or add optional data disk images * and configure OS disk settings. */ interface WithCreateAndDataDiskImageOSDiskSettings extends WithCreate, WithOSDiskSettings, WithDataDiskImage { } /** * The stage of an image definition allowing to specify configurations for the OS disk when it * is created from the image's OS disk image. */ interface WithOSDiskSettings { /** * Specifies the size in GB for OS disk. * * @param diskSizeGB the disk size in GB * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withOSDiskSizeInGB(int diskSizeGB); /** * Specifies the caching type for OS disk. * * @param cachingType the disk caching type * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withOSDiskCaching(CachingTypes cachingType); } /** * The stage of an image definition allowing to add a data disk image. */ interface WithDataDiskImage { /** * Adds a data disk image with a virtual hard disk as the source. * * @param sourceVhdUrl source virtual hard disk URL * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withDataDiskImageFromVhd(String sourceVhdUrl); /** * Adds a data disk image with an existing snapshot as the source. * * @param sourceSnapshotId source snapshot resource ID * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withDataDiskImageFromSnapshot(String sourceSnapshotId); /** * Adds a data disk image with an existing managed disk as the source. * * @param sourceManagedDiskId source managed disk resource ID * @return the next stage of the definition */ WithCreateAndDataDiskImageOSDiskSettings withDataDiskImageFromManagedDisk(String sourceManagedDiskId); /** * Begins the definition of a new data disk image to add to the image. * @return the first stage of the new data disk image definition */ CustomImageDataDisk.DefinitionStages.Blank<WithCreateAndDataDiskImageOSDiskSettings> defineDataDiskImage(); } /** * The stage of an image definition containing all the required inputs for * the resource to be created, but also allowing * for any other optional settings to be specified. */ interface WithCreate extends Creatable<VirtualMachineCustomImage>, Resource.DefinitionWithTags<VirtualMachineCustomImage.DefinitionStages.WithCreate> { } } /** * An immutable client-side representation of a data disk image in an image resource. */ @Fluent interface CustomImageDataDisk extends HasInner<ImageDataDisk>, ChildResource<VirtualMachineCustomImage> { /** * Grouping of data disk image definition stages. */ interface DefinitionStages { /** * The first stage of the data disk image definition. * @param <ParentT> the stage of the parent definition to return to after attaching this definition */ interface Blank<ParentT> extends WithDiskLun<ParentT> { } /** * The stage of the image definition allowing to specify the LUN for the disk image. * * @param <ParentT> the stage of the parent definition to return to after attaching this definition */ interface WithDiskLun<ParentT> { /** * Specifies the LUN for the data disk to be created from the disk image. * * @param lun the unique LUN for the data disk * @return the next stage of the definition */ WithImageSource<ParentT> withLun(int lun); } /** * The stage of the image definition allowing to choose the source of the data disk image. * * @param <ParentT> the stage of the parent definition to return to after attaching this definition */ interface WithImageSource<ParentT> { /** * Specifies the source VHD for the data disk image. * * @param sourceVhdUrl source virtual hard disk URL * @return the next stage of the definition */ WithAttach<ParentT> fromVhd(String sourceVhdUrl); /** * Specifies the source snapshot for the data disk image. * * @param sourceSnapshotId source snapshot resource ID * @return the next stage of the definition */ WithAttach<ParentT> fromSnapshot(String sourceSnapshotId); /** * Specifies the source managed disk for the data disk image. * * @param sourceManagedDiskId source managed disk resource ID * @return the next stage of the definition */ WithAttach<ParentT> fromManagedDisk(String sourceManagedDiskId); /** * Specifies the source managed disk for the data disk image. * * @param sourceManagedDisk source managed disk * @return the next stage of the definition */ WithAttach<ParentT> fromManagedDisk(Disk sourceManagedDisk); } /** * The stage of data disk image definition allowing to specify configurations for the data disk when it * is created from the same data disk image. * * @param <ParentT> the stage of the parent definition to return to after attaching this definition */ interface WithDiskSettings<ParentT> { /** * Specifies the size in GB for data disk. * * @param diskSizeGB the disk size in GB * @return the next stage of the definition */ WithAttach<ParentT> withDiskSizeInGB(int diskSizeGB); /** * Specifies the caching type for data disk. * * @param cachingType the disk caching type * @return the next stage of the definition */ WithAttach<ParentT> withDiskCaching(CachingTypes cachingType); } /** * The final stage of the data disk image definition. * <p> * At this stage, any remaining optional settings can be specified, or the data disk definition * can be attached to the parent image definition. * @param <ParentT> the stage of the parent definition to return to after attaching this definition */ interface WithAttach<ParentT> extends Attachable.InDefinition<ParentT>, WithDiskSettings<ParentT> { } } /** The entirety of a data disk image definition. * @param <ParentT> the stage of the parent definition to return to after attaching this definition */ interface Definition<ParentT> extends DefinitionStages.Blank<ParentT>, DefinitionStages.WithDiskLun<ParentT>, DefinitionStages.WithImageSource<ParentT>, DefinitionStages.WithDiskSettings<ParentT>, DefinitionStages.WithAttach<ParentT> { } } }