Patent Description:
Various approaches are described herein for, among other things, pausing deployment of a virtual machine prior to a machine name dependency. Provisioning a virtual machine is defined herein to mean creating a virtual machine. A pre-provisioned virtual machine is a virtual machine that is provisioned (i.e., created) before a user requests the virtual machine. Deployment of a virtual machine is defined herein to mean configuring the virtual machine. Deployment of the virtual machine occurs in response to provisioning of the virtual machine. One or more provisioning agents may be used to provision the virtual machine. A machine-based provisioning agent is a provisioning agent that does not use user-specific (e.g., user-specified) settings to configure a virtual machine. For instance, the machine-based provisioning agent may use default settings to configure the virtual machine. A user-specific provisioning agent is a provisioning agent that uses user-specific setting(s) (e.g., setting(s) that are specified by a user who requests the virtual machine) to configure a virtual machine.

Moreover, it is noted that the invention is not limited to the specific aspects described in the Detailed Description and/or other sections of this document. Such aspects are presented herein for illustrative purposes only. Additional aspects will be apparent to persons skilled in the relevant art(s) based on the teachings contained herein.

The accompanying drawings, which are incorporated herein and form part of the specification, illustrate aspects of the present invention and, together with the description, further serve to explain the principles involved and to enable a person skilled in the relevant art(s) to make and use the disclosed technologies.

The features and advantages of the disclosed technologies will become more apparent from the detailed description set forth below when taken in conjunction with the drawings, in which like reference characters identify corresponding elements throughout.

The following detailed description refers to the accompanying drawings that illustrate exemplary aspects of the present invention. However, the scope of the present invention is not limited to these aspects, but is instead defined by the appended claims. Thus, aspects beyond those shown in the accompanying drawings, such as modified versions of the illustrated aspects, may nevertheless be encompassed by the present invention.

References in the specification to "one aspect," "an aspect," "an example aspect," or the like, indicate that the aspect described may include a particular feature, structure, or characteristic, but every aspect may not necessarily include the particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same aspect. Furthermore, when a particular feature, structure, or characteristic is described in connection with an aspect, it is submitted that it is within the knowledge of one skilled in the relevant art(s) to implement such feature, structure, or characteristic in connection with other aspects whether or not explicitly described.

Descriptors such as "first", "second", "third", etc. are used to reference some elements discussed herein. Such descriptors are used to facilitate the discussion of the example aspects and do not indicate a required order of the referenced elements, unless an affirmative statement is made herein that such an order is required.

Aspects described herein are capable of pausing deployment of a virtual machine prior to a machine name dependency. Provisioning a virtual machine is defined herein to mean creating a virtual machine. A pre-provisioned virtual machine is a virtual machine that is provisioned (i.e., created) before a user requests the virtual machine. Deployment of a virtual machine is defined herein to mean configuring the virtual machine. Deployment of the virtual machine occurs in response to provisioning of the virtual machine. One or more provisioning agents are used to provision the virtual machine. A machine-based provisioning agent is a provisioning agent that does not use user-specific (e.g., user-specified) settings to configure a virtual machine. For instance, the machine-based provisioning agent may use default settings to configure the virtual machine. A user-specific provisioning agent is a provisioning agent that uses user-specific setting(s) (e.g., setting(s) that are specified by a user who requests the virtual machine) to configure a virtual machine.

Example techniques described herein have a variety of benefits as compared to conventional techniques for pre-provisioning virtual machines. Techniques are capable of pausing deployment of a pre-provisioned virtual machine, prior to execution of code that depends on a name of the virtual machine, to enable one or more user-specific settings (e.g., a user-specified name of the virtual machine) to be applied to the virtual machine before continuing with the deployment. By pausing the deployment to apply the user-specific setting(s), the virtual machine need not be rebooted (e.g., in response to receipt of the user-specific setting(s)) in order for the user-specific setting(s) to take effect. The example techniques may be capable of pre-provisioning virtual machines and reusing the virtual machines upon user request to decrease latency and increase reliability associated with deployment of the virtual machines. For instance, the example techniques may customize an operating system of a virtual machine during pre-creation of the virtual machine, reboot the virtual machine, and pause deployment of the virtual machine, prior to execution of code that depends on a name of the virtual machine, in a mode in which user-specific setting(s) may be applied. By injecting the user-specific setting(s) into the virtual machine using a mechanism, such as an ISO, the user-specific setting(s) are applied to the virtual machine without a reboot of the virtual machine. For example, the virtual machine is rebooted prior to receipt of a request for the virtual machine from a user. In accordance with this example, the reboot may be performed on the platform's time, rather than during the user's deployment time. In further accordance with this example, the virtual machine need not be rebooted after the user-specific setting(s) are received.

A machine-based provisioning agent and a user-specific provisioning agent may be configured to execute on the virtual machine. The machine-based provisioning agent may be configured to perform a first portion of operations that are configured to deploy the virtual machine. The user-specific provisioning agent may be configured to perform a second portion of the operations that are configured to deploy the virtual machine. By executing both the machine-based provisioning agent and the user-specific provisioning agent on the virtual machine, speed and efficiency of the deployment of the virtual machine may be increased. For instance, if the virtual machine executes a Microsoft Windows® operating system, the virtual machine must be restarted after the name of the virtual machine is created or changed, unless both the machine-based provisioning agent and the user-specific provisioning agent execute on the virtual machine. Techniques described herein cause the user-specific provisioning agent to run before the operating system has taken a dependency on the name of the virtual machine, which may enable a restart of the virtual machine to be avoided. Accordingly, the example techniques may eliminate a need to restart the virtual machine after the name of the virtual machine is created or changed.

The example techniques may reduce an amount of time and/or resources (e.g., processor cycles, memory, network bandwidth) that is consumed to deploy a virtual machine. For instance, the example techniques may reduce an amount of time that is consumed to deploy a pre-provisioned virtual machine by a factor of at least <NUM> (e.g., taking into consideration only time spent inside the virtual machine and not including control path times). The example techniques may thereby reduce a cost associated with utilizing the aforementioned resources. The example techniques may increase efficiency of a computing system that is used to deploy the virtual machine. The example techniques may increase efficiency of a user of the virtual machine. For example, by reducing an amount of time that is consumed to deploy the virtual machine to the user, downtime of the user may be reduced. The example techniques may thereby increase efficiency of the user.

<FIG> is a block diagram of a pre-dependency pausing system <NUM> in accordance with an aspect. Generally speaking, the pre-dependency pausing system <NUM> operates to provide information to users in response to requests (e.g., hypertext transfer protocol (HTTP) requests) that are received from the users. The information may include documents (Web pages, images, audio files, video files, etc.), output of executables, and/or any other suitable type of information. In accordance with aspects described herein, the pre-dependency pausing system <NUM> pauses deployment of a virtual machine prior to execution of code that depends on a name of the virtual machine. For instance, the pre-dependency pausing system <NUM> pauses the deployment of the virtual machine to enable one or more user-specific settings to be applied to the virtual machine before continuing with the deployment. Detail regarding techniques for pausing deployment of a virtual machine prior to execution of code that depends on a name of the virtual machine is provided in the following discussion.

As shown in <FIG>, the pre-dependency pausing system <NUM> includes a plurality of user devices 102A-<NUM>, a network <NUM>, and a plurality of servers 106A-106N. Communication among the user devices 102A-<NUM> and the servers 106A-106N is carried out over the network <NUM> using well-known network communication protocols. The network <NUM> may be a wide-area network (e.g., the Internet), a local area network (LAN), another type of network, or a combination thereof.

The user devices 102A-<NUM> are processing systems that are capable of communicating with servers 106A-106N. An example of a processing system is a system that includes at least one processor that is capable of manipulating data in accordance with a set of instructions. For instance, a processing system may be a computer, a personal digital assistant, etc. The user devices 102A-<NUM> are configured to provide requests to the servers 106A-106N for requesting information stored on (or otherwise accessible via) the servers 106A-106N. For instance, a user may initiate a request for executing a computer program (e.g., an application) using a client (e.g., a Web browser, Web crawler, or other type of client) deployed on a user device <NUM> that is owned by or otherwise accessible to the user. In accordance with some example aspects, the user devices 102A-<NUM> are capable of accessing domains (e.g., Web sites) hosted by the servers 104A-104N, so that the user devices 102A-<NUM> may access information that is available via the domains. Such domain may include Web pages, which may be provided as hypertext markup language (HTML) documents and objects (e.g., files) that are linked therein, for example.

Each of the user devices 102A-<NUM> may include any client-enabled system or device, including but not limited to a desktop computer, a laptop computer, a tablet computer, a wearable computer such as a smart watch or a head-mounted computer, a personal digital assistant, a cellular telephone, an Internet of things (IoT) device, or the like. It will be recognized that any one or more of the user devices 102A-<NUM> may communicate with any one or more of the servers 106A-106N.

The servers 106A-106N are processing systems that are capable of communicating with the user devices 102A-<NUM>. The servers 106A-106N are configured to execute computer programs that provide information to users in response to receiving requests from the users. For example, the information may include documents (Web pages, images, audio files, video files, etc.), output of executables, or any other suitable type of information. In accordance with some example aspects, the servers 106A-106N are configured to host respective Web sites, so that the Web sites are accessible to users of the pre-dependency pausing system <NUM>.

The first server(s) 106A are shown to include pre-dependency pausing logic <NUM> for illustrative purposes. The pre-dependency pausing logic <NUM> is configured to pause deployment of a virtual machine prior to execution of code that depends on a name of the virtual machine. In one implementation, the pre-dependency pausing logic <NUM> executes a machine-based provisioning agent on a virtual machine that is hosted on the first server(s) 106A. The machine-based provisioning agent initiates deployment of the virtual machine, installs a user-specific provisioning agent on the virtual machine, and initiates a restart of the virtual machine. In response to the restart of the virtual machine, the pre-dependency pausing logic <NUM> executes the user-specific provisioning agent on the virtual machine. The user-specific provisioning agent pauses the deployment of the virtual machine, prior to execution of code that depends on a name of the virtual machine, to wait for receipt of user-specific setting(s) of the virtual machine. The user-specific provisioning agent then continues the deployment of the virtual machine, which includes configuring the virtual machine to have at least one of the user-specific setting(s) (e.g., a user-specific name), based at least in part on receipt of the user-specific setting(s).

In another example implementation, the pre-dependency pausing logic <NUM> initiates deployment of a virtual machine on the first server(s) 106A. The pre-dependency pausing logic <NUM> pauses the deployment of the virtual machine prior to execution of code that depends on a name of the virtual machine to wait for receipt of user-specific setting(s) of the virtual machine. The pre-dependency pausing logic <NUM> continues the deployment of the virtual machine based at least in part on receipt of the user-specific setting(s). The pre-dependency pausing logic <NUM> continues the deployment by configuring the virtual machine to have at least one of the user-specific setting(s).

The implementations described above may be employed in any suitable context. For instance, the implementations may be employed in a Microsoft Windows® context. In this context, the use of a re-provisioning agent (e.g., a native application) that is launched by the Session Manager may enable the virtual machine to be renamed before system initialization occurs. During pre-provisioning, the virtual machine may be started, and Windows Setup and the Windows Provisioning Agent may be run to completion. The re-provisioning agent may be copied to the Windows\System32 directory; the SetupExecute registry entry may be modified; and the system may be restarted. The re-provisioning agent may then wait on a provisioning signal. The insertion of a provisioning mechanism (e.g., an ISO) containing the user-specific configuration settings may trigger a re-provisioning phase in which a new computer name of the virtual machine can be configured using registry application programming interfaces (APIs). In this context, three registry keys may be changed for the rename: (<NUM>) HKLM\SYSTEM\CCS\Control\ComputerName\ComputerName\ComputerName, (<NUM>) HKLM\SYSTEM\CCS\Services\Tcpip\Parameters\HostName, and (<NUM>) HKLM\SYSTEM\CCS\Services\Tcpip\Parameters\NV HostName. The re-provisioning agent may be configured using the Session Manager key HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SetupExecute.

The pre-dependency pausing logic <NUM> may be implemented in various ways to pause deployment of a pre-provisioned virtual machine, including being implemented in hardware, software, firmware, or any combination thereof. For example, the pre-dependency pausing logic <NUM> may be implemented as computer program code configured to be executed in one or more processors. In another example, at least a portion of the pre-dependency pausing logic <NUM> may be implemented as hardware logic/electrical circuitry. For instance, at least a portion of the pre-dependency pausing logic <NUM> may be implemented in a field-programmable gate array (FPGA), an application-specific integrated circuit (ASIC), an application-specific standard product (ASSP), a system-on-a-chip system (SoC), a complex programmable logic device (CPLD), etc. Each SoC may include an integrated circuit chip that includes one or more of a processor (a microcontroller, microprocessor, digital signal processor (DSP), etc.), memory, one or more communication interfaces, and/or further circuits and/or embedded firmware to perform its functions.

The pre-dependency pausing logic <NUM> is shown to be incorporated in the first server(s) 106A for illustrative purposes and is not intended to be limiting. It will be recognized that the pre-dependency pausing logic <NUM> (or any portion(s) thereof) may be incorporated in any one or more of the user devices 102A-<NUM>. For example, client-side aspects of the pre-dependency pausing logic <NUM> may be incorporated in one or more of the user devices 102A-<NUM>, and server-side aspects of pre-dependency pausing logic <NUM> may be incorporated in the first server(s) 106A. In another example, the pre-dependency pausing logic <NUM> may be distributed among the user devices 102A-<NUM>. In yet another example, the pre-dependency pausing logic <NUM> may be incorporated in a single one of the user devices 102A-<NUM>. In another example, the pre-dependency pausing logic <NUM> may be distributed among the server(s) 106A-106N. In still another example, the pre-dependency pausing logic <NUM> may be incorporated in a single one of the servers 106A-106N.

<FIG> depicts a flowchart <NUM> of an example method for deploying pre-provisioned virtual machines without a reboot in accordance with an aspect. <FIG> depict flowcharts <NUM>, <NUM> of methods for pausing deployment of a virtual machine prior to a machine name dependency in accordance with aspects. Flowcharts <NUM>, <NUM>, and <NUM> may be performed by the first server(s) 106A, shown in <FIG>, for example. For illustrative purposes, flowcharts <NUM>, <NUM>, and <NUM> are described with respect to computing system <NUM> shown in <FIG>, which is an example implementation of the first server(s) 106A. As shown in <FIG>, the computing system <NUM> includes pre-dependency pausing logic <NUM>. The pre-dependency pausing logic <NUM> includes a hypervisor <NUM>, a virtual machine <NUM>, and prediction logic <NUM>. The hypervisor <NUM> includes a first provisioning mechanism <NUM>, a second provisioning mechanism <NUM>, and status logic <NUM>. The virtual machine <NUM> includes a virtual hard disk <NUM> and virtual processor(s) <NUM>. The virtual hard disk <NUM> stores a machine-based provisioning agent <NUM> and a user-specific provisioning agent <NUM>. Further structural and operational aspects will be apparent to persons skilled in the relevant art(s) based on the discussion regarding flowcharts <NUM>, <NUM>, and <NUM>.

As shown in <FIG>, the method of flowchart <NUM> begins at step <NUM>. In step <NUM>, the pre-provisioned virtual machines are predicted. For example, future user demand for virtual machines may be predicted based at least in part on historical data. In accordance with this example, the historical data may indicate (e.g., specify) a number of virtual machines that have been deployed for a user (e.g., customer) in the past and configuration parameters of those virtual machines. Examples of a configuration parameter of a virtual machine include but are not limited to a size of the virtual machine (e.g., a number of virtual central processing units (CPUs) that are attached to the virtual machine and/or an amount of memory that is assigned to the virtual machine), a type of storage that the virtual machine includes, an operating system (OS) of the virtual machine (e.g., a version thereof), a number of virtual network adapters associated with the virtual machine, and a number of virtual hard disks that are attached to the virtual machine. In an example implementation, the prediction logic <NUM> predicts the pre-provisioned virtual machines. The prediction logic <NUM> may generate a VM indicator <NUM> to indicate the predicted pre-provisioned virtual machines.

At step <NUM>, deployment of the pre-provisioned virtual machines is initiated. For instance, configuration parameter(s) of each pre-provisioned virtual machine may be determined. The pre-provisioned virtual machines may be provisioned with default settings. Examples of a default setting include but are not limited to a computer name, a user name, and a user password. Each of the pre-provisioned virtual machines may be a single instance virtual machine. Accordingly, one pre-provisioned virtual machine per tenant may be deployed. The pre-provisioned virtual machines may be configured to be in a started state, meaning that no user-specified settings have yet been applied to the pre-provisioned virtual machines. In an implementation, the machine-based provisioning agent <NUM> initiates the deployment of the pre-provisioned virtual machines. For example, the hypervisor <NUM> may generate a pool of virtual machines based at least in part on the VM indicator. In accordance with this example, the hypervisor <NUM> may create the pool of virtual machines to include the predicted pre-provisioned virtual machines, which are indicated by the VM indicator <NUM>. For instance, the pool of virtual machines may include virtual machine <NUM>. The first provisioning mechanism <NUM> may provide the machine-based provisioning agent <NUM> to the virtual machine <NUM> (e.g., by storing the machine-based provisioning agent <NUM> on the virtual hard disk <NUM> of the virtual machine <NUM>). The machine-based provisioning agent <NUM> may initiate deployment of the virtual machine <NUM>.

At step <NUM>, the pre-provisioned virtual machines are assigned to user(s) without a reboot. For instance, requests for virtual machines may be received from the user(s). The requests may specify requested attributes for the various virtual machines. The pre-provisioned virtual machines having the requested attributes are identified. For example, a first request may specify first attributes, including a first OS, a first storage type, a first size, and a first network; a second request may specify second attributes, including a second OS, a second storage type, a second size, and a second network, and so on. In accordance with this example, a first pre-provisioned virtual machine having the first attributes may be assigned to a user from whom the first request is received; a second pre-provisioned virtual machine having the second attributes may be assigned to a user from whom the second request is received, and so on. Accordingly, the networking artifacts associated with the pre-provisioned virtual machines may be updated (e.g., replaced) with user-specific networking artifacts. The operating system disk for each pre-provisioned virtual machine may be moved under the user subscription of the corresponding user. Each pre-provisioned virtual machine may be moved under a user tenant of the corresponding user. In an implementation, the user-specific provisioning agent <NUM> assigns the pre-provisioned virtual machines to the user(s) without a reboot. For instance, the second provisioning mechanism <NUM> may provide the user-specific provisioning agent <NUM> to the virtual machine <NUM> (e.g., by storing the user-specific provisioning agent <NUM> on the virtual hard disk <NUM> of the virtual machine <NUM>). The user-specific provisioning agent <NUM> may assign the virtual machine <NUM> to a user.

At step <NUM>, user-specific settings are applied to the virtual machines without a reboot. In an implementation, the user-specific provisioning agent <NUM> applies the user-specific settings to the virtual machine <NUM> without a reboot.

In some example aspects, one or more steps <NUM>, <NUM>, <NUM>, and/or <NUM> of flowchart <NUM> may not be performed. Moreover, steps in addition to or in lieu of steps <NUM>, <NUM>, <NUM>, and/or <NUM> may be performed.

Two example deployment scenarios will now be discussed to demonstrate some potential advantages of the method of flowchart <NUM>. Both scenarios relate to configuring a virtual machine to have a user-specific computer name. The scenarios are discussed in the context of Microsoft Windows® and Microsoft Azure® for non-limiting, illustrative purposes. Both scenarios use an ISO as a provisioning mechanism for non-limiting, illustrative purposes. An ISO is an image format for a digital versatile disc (DVD) drive. The ISO may contain configuration information for the virtual machine. The ISO may be attached to the virtual machine, and the virtual machine may see the ISO as an optical drive, which enables the virtual machine to read the information from the ISO. It will be recognized that the scenarios are applicable to any suitable context and may utilize any suitable provisioning mechanism.

In a first deployment scenario, a generalized image of a virtual machine is deployed for a user. The ISO is prepared on a host and attached to the virtual machine. The ISO contains user settings, unattend. xml, and Windows Provisioning Agent (PA) executables. After boot, Windows Setup runs configuration passes, including a Specialize Pass and an OobeSystem Pass.

In the Specialize Pass, Windows Setup reads the computer name and other settings from unattend. xml and applies them. Windows Setup installs the Windows PA by copying executables of the Windows PA from the ISO to a C:\Windows\OEM folder. Windows Setup also runs the Windows PA with "/ConfigurationPass:specialize," which applies some configuration that is specific to Microsoft Azure®. The virtual machine is rebooted if required.

In the OobeSystem Pass, Windows Setup applies settings from OobeSystem pass in unattend. Windows Setup also runs the Windows PA with "/ConfigurationPass:oobeSystem". This applies remaining Azure-specific configuration. The Windows PA notifies "Report Ready" to Azure, meaning provisioning is completed.

If any error happens during Windows Setup, Windows Setup launches the Windows PA with "/ConfigurationPass:errorHandler," which reports "Not Ready" to Azure to indicate a provisioning failure. If any errors happen during execution of Windows PA, the errors are logged in PA logs, but this does not result in a provisioning failure.

In a second deployment scenario, a pre-provisioning service deploys and provisions the pre-provisioned virtual machines with default configurations. During this deployment, the Windows PA configures Session Manager to run a native application on next boot. The Windows PA also creates a scheduled task. The task is configured to run at system startup under a SYSTEM account. Running the task launches the Windows PA with a new parameter value for the ConfigurationPass parameter: "/ConfigurationPass:reprovision". The Windows PA reboots the virtual machine. After the reboot, the Session Manager launches the native executable, which waits for an ISO that contains the computer name. A host agent injects an ISO during the assignment of the pre-provisioned virtual machine to the user. The native executable reads the user-specific configurations and applies the computer name. The system continues to initialize, and the scheduled task runs. When launched with /ConfigurationPass:reprovision, the Windows PA applies the remaining user-specific configurations. The Windows PA reports "Ready" to Azure at the end of the deployment, which indicates completion of provisioning.

Many of the operations that the Windows PA performs may be built into an offline image to support pre-provisioning. It may be desirable for Azure to deploy and pre-configure the virtual machines with default configurations by going through Windows Setup and Windows PA.

As shown in <FIG>, the method of flowchart <NUM> begins at step <NUM>. In step <NUM>, a machine-based provisioning agent is executed on a virtual machine that is hosted on a computing system. In an example implementation, the virtual processor(s) <NUM> execute the machine-based provisioning agent <NUM> on the virtual machine <NUM>, which is hosted on the computing system <NUM>. For instance, the first provisioning mechanism <NUM> may store the machine-based provisioning agent <NUM> on the virtual hard disk <NUM> of the virtual machine <NUM>, and the virtual processor(s) <NUM> may retrieve the machine-based provisioning agent <NUM> from the virtual hard disk <NUM> to execute the machine-based provisioning agent <NUM>.

At step <NUM>, deployment of the virtual machine is initiated by the machine-based provisioning agent. In an implementation, the machine-based provisioning agent <NUM> initiates deployment of the virtual machine <NUM>.

At step <NUM>, a user-specific provisioning agent is installed on the virtual machine by the machine-based provisioning agent. In an implementation, the machine-based provisioning agent <NUM> installs the user-specific provisioning agent <NUM> on the virtual machine <NUM>.

At step <NUM>, a restart of the virtual machine is initiated by the machine-based provisioning agent. In an implementation, the machine-based provisioning agent <NUM> initiates a restart of the virtual machine <NUM>.

At step <NUM>, the user-specific provisioning agent is executed on the virtual machine. For instance, the user-specific provisioning agent may be executed on the virtual machine in response to the virtual machine being restarted. In an implementation, the virtual processor(s) <NUM> execute the user-specific provisioning agent <NUM> on the virtual machine <NUM>. For instance, the second provisioning mechanism <NUM> may store the user-specific provisioning agent <NUM> on the virtual hard disk <NUM> of the virtual machine <NUM>, and the virtual processor(s) <NUM> may retrieve the user-specific provisioning agent <NUM> from the virtual hard disk <NUM> to execute the user-specific provisioning agent <NUM>.

At step <NUM>, the deployment of the virtual machine is paused, prior to execution of code that depends on a name of the virtual machine, to wait for receipt of user-specific setting(s) of the virtual machine by the user-specific provisioning agent. For example, the user-specific provisioning agent may prevent the operating system (OS) that is handling the deployment from continuing with booting the virtual machine. In accordance with this example, the user-specific provisioning agent may cause the OS to enter a program loop until the user-specific setting(s) are received. A program loop is execution of a sub-routine that is configured to repeat until a triggering event stops the execution of the sub-routine. For instance, the user-specific provisioning agent may be configured to stop the execution of the sub-routine based at least in part on receipt of the user-specific setting(s). In an implementation, the user-specific provisioning agent <NUM> pauses the deployment of the virtual machine <NUM>, prior to execution of code that depends on a name of the virtual machine <NUM>, to wait for receipt of user-specific setting(s) of the virtual machine <NUM>.

At step <NUM>, the deployment of the virtual machine is continued (e.g., resumed) by the user-specific provisioning agent. For instance, the deployment of the virtual machine may be continued based at least in part on receipt of the user-specific setting(s). Continuing the deployment of the virtual machine includes configuring the virtual machine to have at least one of the user-specific setting(s). For instance, continuing the deployment may include configuring the virtual machine to have a user-specific name that is included among the user-specific setting(s). In an implementation, the user-specific provisioning agent <NUM> continues the deployment of the virtual machine <NUM>, which includes configuring the virtual machine <NUM> to have at least one of the user-specific setting(s).

In an aspect, continuing the deployment of the virtual machine at step <NUM> is performed based at least in part on receipt of a request to deploy a virtual machine from a user and further based at least in part on a determination that configuration parameter(s) of the virtual machine on which the user-specific provisioning agent is installed and configuration parameter(s) that are specified by the request are same.

In another aspect, continuing the deployment of the virtual machine at step <NUM> is performed without rebooting the virtual machine.

In yet another aspect, the user-specific setting(s) of the virtual machine include a machine name, a user name, and/or a password. In accordance with this aspect, continuing the deployment of the virtual machine at step <NUM> includes assigning the machine name, the user name, and/or the password to the virtual machine by the user-specific provisioning agent. For instance, continuing the deployment of the virtual machine at step <NUM> may include assigning the machine name, the user name, and/or the password to the virtual machine by the user-specific provisioning agent prior to execution of code that depends on the machine name.

At step <NUM>, the machine-based provisioning agent is called by the user-specific provisioning agent. In an implementation, the user-specific provisioning agent <NUM> calls the machine-based provisioning agent <NUM>.

At step <NUM>, the deployment of the virtual machine is finished by the machine-based provisioning agent. For instance, the machine-based provisioning agent may configure the virtual machine to have a user-specific username and/or a user-specific password. In accordance with this example, the user-specific username and the user-specific password may be included among the user-specific setting(s). In an example implementation, the machine-based provisioning agent <NUM> finishes the deployment of the virtual machine.

In an example aspect, a plurality of operations are configured to deploy the virtual machine. In accordance with this aspect, the machine-based provisioning agent performs a first portion of the plurality of operations, and the user-specific provisioning agent performs a second portion of the plurality of operations. In accordance with this aspect, the first portion of the plurality of operations includes initiating the deployment of the virtual machine at step <NUM>, installing the user-specific provisioning agent at step <NUM>, and initiating the restart of the virtual machine at step <NUM>. In further accordance with this aspect, the second portion of the plurality of operations includes pausing the deployment of the virtual machine at step <NUM> and continuing the deployment of the virtual machine at step <NUM>. In an example implementation, the machine-based provisioning agent <NUM> performs the first portion of the plurality of operations, and the user-specific provisioning agent <NUM> performs the second portion of the plurality of operations.

In another example aspect, finishing the deployment of the virtual machine at step <NUM> includes performing user-specific operations that configure the virtual machine by the machine-based provisioning agent. For instance, finishing the deployment may include configuring the virtual machine to have a user-specific username and/or a user-specific password that is included among the user-specific setting(s). The username may be an administrator username. The password may be an administrator password.

In another aspect, the method of flowchart <NUM> further includes providing a notification, which indicates that deployment of the virtual machine is complete, by the machine-based provisioning agent to a user from whom a request for the virtual machine is received in response to the machine-based provisioning agent finishing the deployment of the virtual machine. For example, the machine-based provisioning agent <NUM> may provide a notification <NUM>, which indicates that deployment of the virtual machine <NUM> is complete, to a user from whom the deployment request <NUM> is received in response to the machine-based provisioning agent <NUM> finishing the deployment of the virtual machine <NUM>.

As shown in <FIG>, the method of flowchart <NUM> begins at step <NUM>. In step <NUM>, deployment of a virtual machine on a computing system is initiated. In an implementation, the machine-based provisioning agent <NUM> initiates deployment of the virtual machine <NUM> on the computing system <NUM>.

At step <NUM>, a restart of the virtual machine is initiated. In an implementation, the machine-based provisioning agent <NUM> restarts the virtual machine <NUM>.

At step <NUM>, the deployment of the virtual machine is paused, prior to execution of code that depends on a name of the virtual machine, to wait for receipt of user-specific setting(s) of the virtual machine. In an implementation, the user-specific provisioning agent <NUM> pauses the deployment of the virtual machine <NUM> prior to execution of code that depends on a name of the virtual machine <NUM> to wait for receipt of user-specific setting(s) of the virtual machine <NUM>.

At step <NUM>, a status request is received from the computing system while the deployment of the virtual machine is paused. In an implementation, the user-specific provisioning agent <NUM> receives a status request <NUM> from the status logic <NUM>. The status logic <NUM> is shown in <FIG> to be incorporated in the hypervisor <NUM> for non-limiting, illustrative purposes. It will be recognized that the status logic <NUM> need not necessarily be included in the hypervisor <NUM>.

At step <NUM>, a status response is provided to the computing system while the deployment of the virtual machine is paused. The status response indicates that the virtual machine is available to be assigned to a user. In an example implementation, the user-specific provisioning agent <NUM> provides a status response <NUM> to the status logic <NUM> while the deployment of the virtual machine <NUM> is paused. The status response <NUM> indicates that the virtual machine <NUM> is available to be assigned to a user.

At step <NUM>, the deployment of the virtual machine is continued. For instance, the deployment of the virtual machine may be continued based at least in part on receipt of the user-specific setting(s). Continuation of the deployment includes configuring the virtual machine to have at least one of the user-specific setting(s). For instance, continuing the deployment of the virtual machine is performed without rebooting the virtual machine. In an example implementation, the user-specific provisioning agent <NUM> continues the deployment of the virtual machine <NUM>, including configuring the virtual machine <NUM> to have at least one of the user-specific setting(s) <NUM>.

In an example aspect, the user-specific setting(s) of the virtual machine include a machine name, a user name, and/or a password. In accordance with this aspect, continuing the deployment of the virtual machine at step <NUM> includes assigning the machine name, the user name, and/or the password to the virtual machine. In further accordance with this aspect, the machine name, the user name, and/or the password may be assigned to the virtual machine prior to execution of code that depends on the machine name.

At step <NUM>, a notification, which indicates that deployment of the virtual machine is complete, is provided to the user. In an example implementation, the machine-based provisioning agent <NUM> or the user-specific provisioning agent <NUM> provides a notification <NUM> to the user. In accordance with this implementation, the notification <NUM> indicates that deployment of the virtual machine <NUM> is complete.

In some example aspects, one or more steps <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and/or <NUM> of flowchart <NUM> may not be performed. Moreover, steps in addition to or in lieu of steps <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and/or <NUM> may be performed. For instance, in an example aspect, the method of flowchart <NUM> further includes receiving a request to deploy a virtual machine having specified configuration parameter(s) from a user. For example, the request may be received in response to providing the status response at step <NUM>. In an example implementation, the hypervisor <NUM> receives a deployment request <NUM>, which requests deployment of a virtual machine having the specified configuration parameter(s), from the user. The deployment request <NUM> includes the user-specific setting(s) <NUM> of the virtual machine <NUM>, which may include one or more of the configuration parameter(s). In accordance with this aspect, the method of flowchart <NUM> further includes determining that configuration parameter(s) of the virtual machine and the specified configuration parameter(s) are same. In an example implementation, the hypervisor <NUM> determines that the configuration parameter(s) of the virtual machine <NUM> and the specified configuration parameter(s) are the same. In further accordance with this implementation, the deployment of the virtual machine may be continued at step <NUM> in response to determining that the configuration parameter(s) of the virtual machine and the specified configuration parameter(s) are the same.

It will be recognized that the computing system <NUM> may not include one or more of the hypervisor <NUM>, the virtual machine <NUM>, the prediction logic <NUM>, the pre-dependency pausing logic <NUM>, the first provisioning mechanism <NUM>, the second provisioning mechanism <NUM>, the status logic <NUM>, the virtual hard disk <NUM>, the virtual processor(s) <NUM>, the machine-based provisioning agent <NUM>, and/or the user-specific provisioning agent <NUM>. Furthermore, the computing system <NUM> may include components in addition to or in lieu of the hypervisor <NUM>, the virtual machine <NUM>, the prediction logic <NUM>, the pre-dependency pausing logic <NUM>, the first provisioning mechanism <NUM>, the second provisioning mechanism <NUM>, the status logic <NUM>, the virtual hard disk <NUM>, the virtual processor(s) <NUM>, the machine-based provisioning agent <NUM>, and/or the user-specific provisioning agent <NUM>.

Although the operations of some of the disclosed methods are described in a particular, sequential order for convenient presentation, it should be understood that this manner of description encompasses rearrangement, unless a particular ordering is required by specific language set forth herein. Moreover, for the sake of simplicity, the attached figures may not show the various ways in which the disclosed methods may be used in conjunction with other methods.

The pre-dependency pausing logic <NUM>, the pre-dependency pausing logic <NUM>, flowchart <NUM>, flowchart <NUM>, and/or flowchart <NUM> may be implemented in hardware, software, firmware, or any combination thereof.

For example, the pre-dependency pausing logic <NUM>, the pre-dependency pausing logic <NUM>, flowchart <NUM>, flowchart <NUM>, and/or flowchart <NUM> may be implemented, at least in part, as computer program code configured to be executed in one or more processors.

In another example, the pre-dependency pausing logic <NUM>, the pre-dependency pausing logic <NUM>, flowchart <NUM>, flowchart <NUM>, and/or flowchart <NUM> may be implemented, at least in part, as hardware logic/electrical circuitry. Such hardware logic/electrical circuitry may include one or more hardware logic components. Examples of a hardware logic component include but are not limited to a field-programmable gate array (FPGA), an application-specific integrated circuit (ASIC), an application-specific standard product (ASSP), a system-on-a-chip system (SoC), a complex programmable logic device (CPLD), etc. For instance, a SoC may include an integrated circuit chip that includes one or more of a processor (e.g., a microcontroller, microprocessor, digital signal processor (DSP), etc.), memory, one or more communication interfaces, and/or further circuits and/or embedded firmware to perform its functions.

<FIG> depicts an example computer <NUM> in which aspects may be implemented. Any one or more of the user devices 102A-<NUM> and/or any one or more of the servers 106A-106N shown in <FIG> and/or computing system <NUM> shown in <FIG> may be implemented using computer <NUM>, including one or more features of computer <NUM> and/or alternative features. Computer <NUM> may be a general-purpose computing device in the form of a conventional personal computer, a mobile computer, or a workstation, for example, or computer <NUM> may be a special purpose computing device. The description of computer <NUM> provided herein is provided for purposes of illustration, and is not intended to be limiting. Aspects may be implemented in further types of computer systems, as would be known to persons skilled in the relevant art(s).

As shown in <FIG>, computer <NUM> includes a processing unit <NUM>, a system memory <NUM>, and a bus <NUM> that couples various system components including system memory <NUM> to processing unit <NUM>. Bus <NUM> represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures.

Computer <NUM> also has one or more of the following drives: a hard disk drive <NUM> for reading from and writing to a hard disk, a magnetic disk drive <NUM> for reading from or writing to a removable magnetic disk <NUM>, and an optical disk drive <NUM> for reading from or writing to a removable optical disk <NUM> such as a CD ROM, DVD ROM, or other optical media. The drives and their associated computer-readable storage media provide nonvolatile storage of computer-readable instructions, data structures, program modules and other data for the computer. Although a hard disk, a removable magnetic disk and a removable optical disk are described, other types of computer-readable storage media can be used to store data, such as flash memory cards, digital video disks, random access memories (RAMs), read only memories (ROM), and the like.

A number of program modules may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. These programs include an operating system <NUM>, one or more application programs <NUM>, other program modules <NUM>, and program data <NUM>. Application programs <NUM> or program modules <NUM> may include, for example, computer program logic for implementing any one or more of (e.g., at least a portion of) pre-dependency pausing logic <NUM>, pre-dependency pausing logic <NUM>, flowchart <NUM> (including any step of flowchart <NUM>), flowchart <NUM> (including any step of flowchart <NUM>), and/or flowchart <NUM> (including any step of flowchart <NUM>), as described herein.

A user may enter commands and information into the computer <NUM> through input devices such as keyboard <NUM> and pointing device <NUM>. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, touch screen, camera, accelerometer, gyroscope, or the like. These and other input devices are often connected to the processing unit <NUM> through a serial port interface <NUM> that is coupled to bus <NUM>, but may be connected by other interfaces, such as a parallel port, game port, or a universal serial bus (USB).

A display device <NUM> (e.g., a monitor) is also connected to bus <NUM> via an interface, such as a video adapter <NUM>. In addition to display device <NUM>, computer <NUM> may include other peripheral output devices (not shown) such as speakers and printers.

Computer <NUM> is connected to a network <NUM> (e.g., the Internet) through a network interface or adapter <NUM>, a modem <NUM>, or other means for establishing communications over the network. Modem <NUM>, which may be internal or external, is connected to bus <NUM> via serial port interface <NUM>.

As used herein, the terms "computer program medium" and "computer-readable storage medium" are used to generally refer to media (e.g., non-transitory media) such as the hard disk associated with hard disk drive <NUM>, removable magnetic disk <NUM>, removable optical disk <NUM>, as well as other media such as flash memory cards, digital video disks, random access memories (RAMs), read only memories (ROM), and the like. Example aspects are also directed to such communication media.

As noted above, computer programs and modules (including application programs <NUM> and other program modules <NUM>) may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. Such computer programs may also be received via network interface <NUM> or serial port interface <NUM>. Such computer programs, when executed or loaded by an application, enable computer <NUM> to implement features of aspects discussed herein. Accordingly, such computer programs represent controllers of the computer <NUM>.

Example aspects are also directed to computer program products comprising software (e.g., computer-readable instructions) stored on any computer-useable medium. Such software, when executed in one or more data processing devices, causes data processing device(s) to operate as described herein. Aspects may employ any computer-useable or computer-readable medium, known now or in the future. Examples of computer-readable mediums include, but are not limited to storage devices such as RAM, hard drives, floppy disks, CD ROMs, DVD ROMs, zip disks, tapes, magnetic storage devices, optical storage devices, MEMS-based storage devices, nanotechnology-based storage devices, and the like.

It will be recognized that the disclosed technologies are not limited to any particular computer or type of hardware. Certain details of suitable computers and hardware are well known and need not be set forth in detail in this disclosure.

Claim 1:
A system (106A, <NUM>, <NUM>) to pause deployment of a pre-provisioned virtual machine, the system (106A, <NUM>, <NUM>) comprising:
memory (<NUM>, <NUM>, <NUM>); and
one or more processors (<NUM>) coupled to the memory (<NUM>, <NUM>, <NUM>), the one or more processors (<NUM>) configured to execute (<NUM>) a machine-based provisioning agent (<NUM>) and a user-specific provisioning agent (<NUM>), which are configured to perform respective portions of a plurality of operations that deploy a virtual machine (<NUM>) that is hosted on the system, on the virtual machine (<NUM>);
the machine-based provisioning agent (<NUM>) configured to perform the following operations:
initiate (<NUM>) deployment of the virtual machine (<NUM>);
install (<NUM>) the user-specific provisioning agent (<NUM>) on the virtual machine (<NUM>); and
initiate (<NUM>) a restart of the virtual machine (<NUM>) after installing the user-specific provisioning agent (<NUM>);
the user-specific provisioning agent (<NUM>) configured to be executed (<NUM>) on the virtual machine to perform the following operations in response to the restart of the virtual machine (<NUM>):
pause (<NUM>) the deployment of the virtual machine (<NUM>), prior to execution of code that depends on a name of the virtual machine (<NUM>), to wait for receipt of one or more user-specific settings (<NUM>) of the virtual machine (<NUM>); and
continue (<NUM>) the deployment of the virtual machine (<NUM>), which includes configuring the virtual machine (<NUM>) to have at least one of the one or more user-specific settings (<NUM>), based at least in part on receipt of the one or more user-specific settings (<NUM>), by assigning the machine name to the virtual machine prior to execution of code that depends on the machine name;
wherein pausing the user-specific provisioning agent comprises the user-specific provisioning agent to be configured to:
reboot the virtual machine and to launch a native executable, via a session manager, and
await one or more user specific settings, via a provisioning mechanism that contains the machine name; and
wherein the user-specific provisioning agent is further configured to call (<NUM>) the machine-based provisioning agent in response to configuring the virtual machine to have the at least one of the one or more user-specific settings, which causes the machine-based provisioning agent to finish (<NUM>) the deployment of the virtual machine.