Implementation of rolling key to identify systems inventories

Disclosed are systems and methods for implementation of a rolling key to identify systems inventories. One method may include receiving, by a processing device of an inventory server from a client system, a key and a key component, wherein the key component comprises a random string of characters generated by the client system to uniquely identify the client system; identifying, using the key as an identifier, the client system in an inventory database of the inventory server; transmitting an acknowledgement to the client system that the client system has been identified in the inventory database and that the inventory server received the key component, the acknowledgement to cause the client system to store the key component as part of a new key used to identify the client system; and storing the key component, wherein storing the key component causes a modification of the key used to identify the client system.

TECHNICAL FIELD

The present disclosure is generally related to computer systems, and more particularly, to identifying computer systems in a systems inventory.

BACKGROUND

Systems inventories are used to identify systems executing within a computing environment. Such identification may enable features such as billing and metering of systems executing in the computing environment. Examples of computing environments may include, but are not limited to, a virtual infrastructure, public cloud environments, private cloud environments, hybrid cloud environments, containers, software-defined networks, software-defined storage, middleware and its applications, and physical datacenters.

When a client computer system communicates with an inventory server an identification of the communicating client system may be requested for any number of environment management tasks. Such environment management tasks may include providing a self-service portal and capabilities for granular permission for user access, metering and billing for chargeback and showback, ability to provision new instances and applications for an application catalog or from image templates, integration points with existing system management, service catalogs, and configuration management software, and an ability to control and automate the placement and provisioning of new instances based on business and security policies. An inventory server can maintain an inventory to identify the client systems executing within the computing environment.

DETAILED DESCRIPTION

Described herein are methods and systems for implementing a rolling key to identify systems inventories. In a systems inventory a key may be used by an inventory server to identify computer systems communicating with the inventory server from a computing environment. A computer system, such as a virtual machine, communicating with the inventory server, may be referred to as a client system. A key may refer to a string of alphanumeric characters that may be used by the inventory server to identify and authenticate a client system.

The key associated with a client system may be stored in an inventory database of the inventory server. A unique key associated with a client system may be based on hardware keys of the hardware on which the client system is executing. In conventional systems, keys based on hardware keys may become outdated as hardware changes, such as when a virtual client system migrates to another physical machine or when hardware is replaced. A key may also be randomly-generated and stored to a disk of a client system. Each client system may store its associated key on a disk of the client system. However, if such a client system is cloned (i.e., the disk of the client system is copied to create an identical client system), then the cloned client system may store the same key as generated by the original client system from which it was cloned. As a result, the key is no longer unique, creating a duplicate system in the inventory. The two client systems may then be acted upon as if they were a single machine. Other issues may arise from duplicate clients systems interfering with environment management tasks associated with systems inventories.

Aspects of the disclosure address the above-noted issues of conventional systems associated with using a static key to identify client systems executing within a computing environment. In one implementation of the disclosure, a rolling key may be used to cause each client system to be assigned a unique key. When a client system communicates with an inventory server, the client system may generate a random string of characters referred to as a key component. The client system may then send a communication to the inventory server, where the communication includes the client system's current key (if one exists) and the randomly-generated key component. After receiving the communication with the key and key component, the server may identify the client system using the key (if a record of the client system already exists in the inventory). The server may then send an acknowledgment to the client system that the key component was received. The client system may store the key component as part of a new key to identify the client system. The server may then also store the key component as part of the new key to identify the client system. Storing the key component as part of the new key may include storing the key component as the sole key component of the new key or as part of a plurality of key components that together define the new key.

In another example, when a client system communicates with an inventory server, the client system may generate a key component. If the client system has been newly created, the client system may send a communication to the server, where the communication includes the key component but does not include a key identifying the client system (as the client system is newly created). The server may send an acknowledgment of receipt of the key component and a notification that the client system could not be identified in the inventory server. The inventory server may then create a new record for the client system and store the key component as the key to identify the new client system. The client system may also store the key component as the key to identify the client system.

The systems and methods described herein include technology that enhances systems management technology of a computer system. In particular, aspects of the disclosure provide technology that provides enhances in reliability and consistency of system identification and system authentication in a computing environment. The technology may enable inventory systems to identify and differentiate between client systems even when multiple client systems have been created from the same disk. The technology may further enable inventory systems to identify systems more consistently even when changes occur in the physical hardware on which a client system is executing. This may enhance accuracy of identification of systems in a virtual computing environment, preventing duplicate systems and enabling more precise billing and metering of virtual machines executing in the virtual computing environment, or any other computing environment.

FIG. 1depicts a system diagram of an example network computer system100in which examples of the disclosure may operate. It should be noted that other architectures for network computer system100are possible, and that the implementation of a network computer system utilizing examples of the disclosure are not limited to the specific architecture depicted.

The example network computer system100, shown inFIG. 1, may include a host machine110, an inventory server130, and a user device120connected by a network108. One or more virtual machines114A-B may run on the host machine110. Hypervisor112may run on the host machine110and manage virtual machines114A-B. Inventory system manager132may run on inventory server130. Inventory system manager132may be coupled to an inventory database134. Although the below description ofFIG. 1refers to a virtual machine, it should be noted that the disclosure may include any computer system operating within a computing environment. Any computer system that communicates with the inventory server may be referred to as a client system. Therefore, the description below, in reference to a virtual machine, may apply to any client system operating within a computing environment.

Host machine110may be a server, a workstation, a personal computer, a mobile phone, a palm-sized computing device, a personal digital assistant, etc. Host machine110may include a system comprising one or more processors, one or more memory devices, and one or more input/output interfaces. Host machine110may execute, or run, one or more virtual machines114A-B by executing a software layer referred to as hypervisor112on the host machine. Hypervisor112may manage virtual machine resources and access control. Virtual machines114A-B may include a key manager116A-B for generating and storing key components and keys used to identify virtual machines114A-B.

When a virtual machine114A-B communicates with the inventory server130, a rolling key may be used to uniquely identify the virtual machine114A-B. For example, when communicating with the inventory server130, key manager116A may generate a random string of characters referred to as a key component. The key manager116A may provide a key component and a key identifying virtual machine114A in a communication to the inventory system manager132. In response, the inventory system manager132may send an acknowledgement to virtual machine114A that the communication and the key component were received. The acknowledgement may include the key component and the key that were received by the inventory system manager132. Once the key manager116A of virtual machine114A receives the acknowledgment, key manager116A may store the key component as part of the new key used to identify virtual machine114A. The key manager116A may store the key component after confirming that the key component included in the acknowledgment is the same key component that was originally generated and sent by the key manager116A.

In another example, when inventory server130receives a communication from virtual machine114A, inventory system manager132may identify if the communication includes a key and a key component. If the communication includes a key component the inventory system manager132may send an acknowledgment that the key component was received by the inventory server130. The acknowledgement may include the key component that the inventory system manager132received from key manager116A. After sending the acknowledgement, the inventory system manager132may store the key component in the inventory database134as the new key used to identify virtual machine114A. The inventory system manager132may store the key component after receiving an indication from the key manager116A that the acknowledgement included the same key component that was originally generated by key manager116A.

In the same or different example, if the communication does not include a key, virtual machine114A may be a newly-created virtual machine. For newly-created virtual machines, the inventory system manager132may create a new record in the inventory database134for virtual machine114A and store the key component as the key to identify virtual machine114A. If the communication includes a key but the key is not associated with a virtual machine in the inventory system, then virtual machine114A may be a cloned machine. Inventory system manager132may create a new record in the inventory database134for virtual machine114A and store the key component as the new key to identify virtual machine114A. The inventory system manager132may store the key component after receiving an indication from the key manager116A that the acknowledgement included the same key component that was originally-generated by key manager116A.

Inventory system manager132may store, in an inventory database134, a key identifying a virtual machine114A-B executing within a computing environment. For example, a first key stored in key database134may uniquely identify virtual machine114A and a second key stored in key database134may uniquely identify virtual machine114B. Inventory system manager132may also store, in the inventory database134, a list of key components associated with a virtual machine. The list of key components may be referred to as a key component list. For example, a key component list stored in inventory database134may include a first key component used to identify virtual machine114A and one or more additional key components that have previously been used to identify virtual machine114A. As discussed in more detail withFIG. 4B, a combination of multiple key components of the key component list may be used as the key to identify a virtual machine.

A user device120may be connected to the network. User device120may be a server, a workstation, a personal computer, a mobile phone, a palm-sized computing device, a personal digital assistant, and so on. User device120may execute an application122. User device120may communicate with and control a virtual machine114A-B through application122. Inventory system manager132may maintain a record of the user device associated with a virtual machine114A-B. For example, user device120may be associated with virtual machine114B. User device120may be able to control virtual machine114B via application122. Inventory system manager132may store, in inventory database134, an association between virtual machine114B and user device120. Thus, the inventory system manager132may identify a user device120of a virtual machine114A-B.

Network108may be a public network (e.g. the internet), a private network (e.g. a local area network (LAN) or a wide area network (WAN)), or a combination thereof. In one example, network108may include a wired or a wireless infrastructure, which may be provided by one or more wireless communications systems, such as a wireless fidelity (WiFi) hotspot connected with the network108and/or a wireless carrier system that can be implemented using various data processing equipment, communication towers, etc.

FIG. 2is an example system200implementing an inventory system manager220, according to implementations of the disclosure. As shown inFIG. 2, the system200may comprise an inventory system manager220executing on a processing device210and a memory240. In one implementation, inventory system manager220is the same as inventory system manager132described with respect toFIG. 1. Inventory system manager220may include a client system identifier component222, an acknowledgment transmission component224, a key component storage controller226, and a key and key component receiver228. Memory240may store a key component242, a key component list244, a key246, and a client systems inventory248.

The client system identifier component222may identify a client system using a key received in a communication from the client system. The acknowledgment transmission component224may transmit an acknowledgment to the client system that a key component was received from the client system. The acknowledgment may include the key received and the key component received, thus allowing the client system to confirm that the correct key component was received by the inventory system manager220. The key component storage controller226may store a key component242in memory240after receipt of the key component242has been acknowledged, or after the client device indicates that the acknowledgement included the correct key component. Key and key component receiver228may receive and identify the key and key component sent from the client device.

The key component242may be the key component received from the client system. The key component list244may be a list of previous key components used to identify the client system. Key246may be the key received from client system that is used to identify the client system. Client systems inventory248may be an inventory database of all client systems executing within a computing environment. Although depicted separately, the key246and key component242may be stored as part of the key component list244. The key246, the key component242, and the key component list244may also be stored as part of the client systems inventory248. For example, key component242may be appended to the key component list244when the key component storage controller226stores the key component242. The key246may comprise the key component list244, the key component242, or any subset of the key component242and the key components of the key component list244.

FIG. 3is an example system300implementing a key manager320, according to implementations of the disclosure. The system300may comprise a key manager320executing on a processing device310and a memory340. In one implementation, key manager320is the same as key manager116A-B described with respect toFIG. 1. Key manager320may execute on a client system that is identified as a component in a systems inventory. Key manager320may comprise a key component generator322, a communication component324, a key component storage controller326, and a key handler component328. Memory340may store a key component342, a key component list344, and a key346.

Key component generator322may generate a random string of alphanumeric characters called a key component. The communication component324may transmit a communication including a key and a key component to an inventory server, such as inventory server130as described withFIG. 1. The communication component324may also receive an acknowledgment from the inventory server. The key component storage controller326may store a key component342as part of a new key346, stored in memory340, to identify the client system. Key handler component328may identify the key used to identify the client system before and after storing the key component as the new key346.

Key component342may be the key component that has been randomly-generated by the key component generator322. The key component list344may be a list of key components previously used to identify the client system. The key component342may be appended to the key component list344after the communication component324receives an acknowledgment from the inventory server. Key346may be the key that is used by the inventory server to identify the client system. Although depicted separately, the key346and key component342may be stored as part of the key component list344. For example, key component342may be appended to the key component list344when the key component storage controller326stores the key component342. The key346may comprise the key component list344, the key component342, or any subset of the key component342and the key components of the key component list344.

FIG. 4Ais an example inventory database450according to an implementation of the disclosure. Inventory database450may include any data structure that can be used to store data associated with a client system. As shown inFIG. 4A, a key452comprising a string of characters may be used as a unique identifier of a client system, such as a virtual machine. Inventory database450may store additional data associated with the identified machine, such as identification of a user454, a host456, power state (not shown), and the IP address (not shown) of the client system, along with any other properties of the identified machine.

In an inventory system database450, a rolling key may be used to uniquely identify each virtual machine, even if a virtual machine is cloned. Inventory system database450may be located on a server, such as the inventory server130as described with respect toFIG. 1. For example, if the machine associated with the key “ABC123” were cloned, the key stored by both the original machine and the clone would be “ABC123.” In such a case, each virtual machine would be associated with the same record in the inventory system database450, rather than being uniquely identified. However, in accordance with aspects of this disclosure, after the virtual machine is cloned, each virtual machine may communicate with the server on which the inventory system database450resides. Each virtual machine may generate a random key component that differs from other random key components of other virtual machines. When a first virtual machine communicates with the server, it is identified as the machine with the key “ABC123.” However, the key is subsequently replaced by the key component that was randomly-generated by that machine (e.g., “CDD243”). When the second virtual machine communicates with the server, the “ABC123” key is no longer associated with a virtual machine in the inventory database450and the server then has to create a new record for the second virtual machine and append the key component that was randomly-generated by the second machine to that record (e.g., “HYE986”).

In another example,FIG. 4Adepicts virtual machines410,420,430, and440. Virtual machine410may be cloned into one or more other virtual machines420,430, and440. Virtual machines410,420,430, and440may each initially be identified by the same key. After virtual machine410communicates with the server it is identified by a new unique key (e.g., “ABC123”). Furthermore, after each of the virtual machines420,430, and440communicate with the server, they are each identified by a new unique key. For example, virtual machine420may be identified by key “BDA242,” virtual machine430may be identified by key “CFA892,” and virtual machine440may be identified by key “DFF798.” In this way, each of the cloned virtual machines may be identified by a unique key after communication with the server.

FIG. 4Bdepicts an example key component list460, according to an implementation of the disclosure. The key component list460may comprise a newly-generated key component462and one or more key components464A-C that have been previously generated and used to identify a client system. The key component list460, or a subset of the key components462and464A-C in the key component list460, may be the key used to identify the client system. In some implementations, the key component list460may be stored on both the client system and an inventory server.

In one example, the most recent key component462appended to the key component list460(e.g. “ABC123”) is the key used by the inventory server to identify the client system. In another example, the two most recent key components (e.g.,462and464A) appended to the key component list460(e.g., “ABC123:HKD386”) is the key used by the inventory server to identify the client system. In one more example, all key components (e.g.,462and464A-C) of the key component list460are used as the key to identify the client system. The key component list460may include any number of key components. In some instances, the key component list460may be of a specific length. After that length is reached, when a new key component (e.g.,462) is appended to the key component list460, the oldest key component (e.g.,464C) may be removed from the key component list460. The client system and inventory server may also store a hash of the key component list to verify that each of the key components appended to the key component list were previously used to identify the client system.

FIG. 5Adepicts a component diagram of an example inventory system manager500, according to one implementation. As shown inFIG. 5A, inventory system manager500may include a client system identifier510, an acknowledgment transmission component520, a key component storage controller530, and a key and key component receiver540. In one implementation, inventory system manager500is the same as inventory system manager132described with respect toFIG. 1.

The client system identifier510may identify a client system using a key received in a communication from the client system. The acknowledgment transmission component520may transmit an acknowledgment to the client system that a key component was received from the client system. The acknowledgment may include the key received and the key component received, allowing the client system to confirm that the correct key component was received by the inventory system manager500. The key component storage controller530may store a key component in the inventory database, or any such data store. The key component may be stored after receipt of the key component has been acknowledged, or after the client device indicates that the acknowledgement included the correct key component. Key and key component receiver540may receive and identify the key and key component sent from the client device.

FIG. 5Bdepicts a component diagram of an example key manager550, according to one implementation. Key manager550may comprise a key component generator560, a communication component570, a key component storage controller580, and a key handler component590. In one implementation, key manager550is the same as key manager116A-B described with respect toFIG. 1.

Key component generator560may generate a random string of alphanumeric characters called a key component. The communication component570may transmit a communication comprising a key and a key component to an inventory server, as well as receive an acknowledgment from the inventory server that the inventory server received the key component. The key component storage controller580may store the key component as part of a new key to identify the client system. Key handler component590may identify the key used to identify the client system before and after storing the key component as part of the new key.

FIG. 6Adepicts a flow diagram illustrating an example process600implementing a rolling key between a client650and a server660, according to an implementation of the disclosure. In one implementation, client650may be the virtual machine114A-B as described with respect toFIG. 1. Server660may be the inventory server130as described with respect toFIG. 1. As depicted inFIG. 6A, at step601client650may generate a key component. The key component may comprise a random string of characters (e.g., “bb43”). In step602, client650may transmit a communication including the key component (“bb43”) and a key identifying the client650(“ac23:76bc”) to the server660. In step603, the server660may identify the client650in an inventory database. In step604, server660may send an acknowledgment to the client650indicating that the server660received the key component. The acknowledgment may include the key component. In step605, the client may store the key component after receiving the acknowledgment from step604. Storing the key component may include appending the key component to a key component list (e.g., “ac23:76bc:bb43” not depicted in figure). Storing the key component may include removing the least recently used key component from the key component list (e.g., “76bc:bb43”). The client650may store the key component in response to determining that the key component included in the acknowledgment is the same key component generated by the client650in step601. In step606, the server660may store the key component. The server may store the key component in response to the client650indicating that the client650stored the key component.

FIG. 6Bdepicts a flow diagram illustrating an example process608implementing a rolling key between a new client670without a key and a server680, according to an implementation of the disclosure. In one implementation, client670may be the virtual machine114A-B as described with respect toFIG. 1. Server680may be the inventory server130as described with respect toFIG. 1. In step610, client670may generate a key component. The key component may comprise a random string of characters (e.g., “ef34”). In step611, client670may transmit a communication comprising the key component (“ef34”) to the server680. In step612, the server680may search an inventory database to determine if the client670is in the database. The server680may determine that the client670is not in the inventory database. In step613, server680may send an acknowledgment to the client670indicating that the server680received the key component. The acknowledgment may include the key component and an indication that the client670was not identified in the inventory database. In step614, the client670may store the key component after receiving the acknowledgment from step613. Storing the key component may include creating a new key component list and appending the key component to the key component list. The client670may store the key component in response to determining that the key component included in the acknowledgment is the same key component generated by the client670in step610. In step615, the server680may store the key component. The server680may store the key component in response to the client670indicating that the client670stored the key component.

FIG. 7depicts a flowchart of an example process700implementing a rolling key to uniquely identify by a server760a first client750(client A) and a second client770(client A′), which is a clone of the first client750, according to an implementation of the disclosure. In one implementation, the first client750, the second client770, and the server760may be the same as virtual machine114A, virtual machine114B, and inventory server130respectively, as described with respect toFIG. 1. Before process700begins the first client750may be cloned to create the second client770. Cloning may refer to copying the disk of one computer system to initialize a new computer system that is identical, or nearly identical, to the first computer system.

In step701, the first client750may generate a key component. The key component may comprise a random string of characters (e.g., “bb43”). In step702, the first client750may transmit a communication including the key component (“bb43”) and a key identifying the first client750(“ac23:76bc”) to the server760. In step703, the server760may check the inventory database to determine if the first client750is in the inventory database. The server760may identify the first client750if it is in the inventory database. In step704, server760may send an acknowledgment to the first client750indicating that the server760received the key component. The acknowledgment may include the key component. In step705, the first client750may store the key component after receiving the acknowledgment from step704. In one implementation, storing the key component may include appending the key component to a key component list (e.g., “ac23:76bc:bb43”—not depicted in figure). In one implementation, storing the key component may include removing the least recently used key component from the key component list (e.g., “76bc:bb43”). The first client750may store the key component in response to determining that the key component included in the acknowledgment is the same key component generated by the first client750in step701. In step706, the server760may store the key component. The server760may store the key component in response to the first client750indicating that the first client750stored the key component.

In step710, the second client770may generate a key component. The key component may comprise a random string of characters (e.g., “a3fd”). In step711, the second client770may transmit a communication including the key component (“a3fd”) and a key (“ac23:76bc”) to the server760. In the current example of process700, the server760would not be able to identify the second client770based on the key received because that key was updated when the first client750communicated with the server760. At step712, the server760may transmit an acknowledgment to the second client770that the key component was received and that the server760was unable to identify the second client770in the inventory database. In step713, the second client770may receive the acknowledgment and store the key component as part of the new key to identify the second client770. The second client770may send an indication to the server760that the acknowledgment included the same key component generated by the second client770in step710. In step714, the server760may store the key component. The server760may store the key component in response to the second client770indicating that the second client770stored the key component. The same process may be repeated by each client750,770, continuing to generate unique key components to cause each client750,770to be uniquely identified by the inventory server.

FIGS. 8, 9, and 10depict flow diagrams of example methods800,900, and1000for using a rolling key to identify a client system according to various implementations of the disclosure. Method800illustrates an example process flow of using a rolling key to uniquely identify a client system by an inventory server. Method900illustrates an example process flow of a client system using a rolling key. Method1000illustrates an example process flow of using a rolling key generated by an inventory server to uniquely identify client systems.

For simplicity of explanation, the methods of this disclosure are depicted and described in a series of acts. However, acts in accordance with this disclosure may occur in various orders and/or concurrently, and with other acts not presented and described herein. Furthermore, not all illustrated acts may be required to implement the methods in accordance with the disclosed subject matter. In addition, the methods could alternatively be represented as a series of interrelated states via a state diagram or events. Additionally, the methods disclosed in this specification are capable of being stored on an article of manufacture to facilitate transporting and transferring such methods to computing devices. The term “article of manufacture,” as used herein, is intended to encompass a computer program accessible from any computer-readable storage device or memory page media.

Referring toFIG. 8, method800may be performed by a processing device of an inventory server. In one implementation, the inventory server is the inventory server130as described with respect toFIG. 1. At block802, a key and key component may be received from a client system, wherein the key component is a random string of characters generated by the client system to uniquely identify the client system. In one implementation, the client system is the virtual machine114A-B as described with respect toFIG. 1. The key may be a key component or a combination of key components of a key component list. At block804, the client system may be identified using the key provided by the client system. The client system may be identified in an inventory database of the inventory server using the key as an identifier. In one implementation, the inventory database is the inventory database134as described with respect toFIG. 1. At block806, an acknowledgment may be transmitted to the client system indicating that the client system has been identified in the inventory database and that the inventory server received the key component. The acknowledgment may include the key component. The client system may store the key component as part of a new key used to identify the client system in response to determining that the key component included in the acknowledgement is the same key component that was originally generated by the client system. At block808, the key component may be stored. Storing the key component may include replacing or causing a modification of the previous key used to identify the client system. In response to the key component being stored, the client system is now identified by a new unique key.

Referring toFIG. 9, method900may be performed by a client processing device. At block902, a key component comprising a random string of alphanumeric characters may be generated by a client system. In one implementation, the client system may be virtual machine114A-B as described with respect toFIG. 1. At block904, a communication including a key and the generated key component may be transmitted to an inventory server from the client system. In one implementation, the inventory server is the inventory server130as described with respect toFIG. 1. The key may be used by the inventory server to identify the client system in an inventory database. At block906, an acknowledgement may be received from the inventory server indicating that the inventory server received the key component. The acknowledgment may indicate that the inventory server has identified the client system in the inventory database and that the inventory server received the key component. At block908, the client system may store the key component as part of a new key to identify the client system after receiving the acknowledgment. The client system may store the key component in response to determining that the key component received in the acknowledgement is the same key component generated at block902.

Referring toFIG. 10, method1000may be performed by a processing device of an inventory server. In one implementation, the inventory server may be the inventory server130as described with respect toFIG. 1. At block1002, a communication from a client system is received. In one implementation, the client system is virtual machine114A-B as described with respect toFIG. 1. The communication may include a key used to identify the client system. At block1004, the client system is identified using the key included in the communication. The inventory server may identify the client system from an inventory database of client systems using the key as an identifier. At block1006, a key component comprising a random sting of characters may be generated by the inventory server. A random key component may be generated each time a client system communicates with the server. At block1008, a communication comprising the key component may be transmitted to the client system. The client system may store the key component as part of a new key used to identify the client system. At block1010, the inventory server may store the key component as part of the new key used to identify the client system. The inventory server may store the key component in response to receiving an acknowledgment from the client system that the client system received the key component. The inventory server may send an indication to the client system that the acknowledgment included the same key component as the key component generated at block1006.

The example computer system1100includes a processing device1102, a main memory1104(e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM) or DRAM (RDRAM), etc.), a static memory1106(e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device1118, which communicate with each other via a bus1130. The processing device1102may be operatively coupled with the main memory1104, static memory1106, and/or the data storage device1118.

The computer system1100may further include a network interface device1108. The computer system1100also may include a video display unit1110(e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)), an alphanumeric input device1112(e.g., a keyboard), a cursor control device1114(e.g., a mouse), and a signal generation device1116(e.g., a speaker).

The data storage device1118may include a machine-readable storage medium1128(also known as a computer-readable medium) on which is stored one or more sets of instructions or software1122embodying any one or more of the methodologies or functions described herein. The instructions1122may also reside, completely or at least partially, within the main memory1104and/or within the processing device1102during execution thereof by the computer system1100, the main memory1104and the processing device1102also constituting machine-readable storage media.

In one implementation, the instructions1122include instructions for an inventory system manager (e.g., inventory system manager132ofFIG. 1) and/or a software library containing methods that call inventory system manager. While the machine-readable storage medium1128is shown in an example implementation to be a single medium, the term “machine-readable storage medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store the one or more sets of instructions. The term “machine-readable storage medium” shall also be taken to include any medium that is capable of storing or encoding a set of instructions for execution by the machine and that cause the machine to perform any one or more of the methodologies of the present disclosure. The term “machine-readable storage medium” shall accordingly be taken to include, but not be limited to, solid-state memories, optical media and magnetic media.

Other computer system designs and configurations may also be suitable to implement the system and methods described herein. The following examples illustrate various implementations in accordance with one or more aspects of the present disclosure.

Example 1 is a method including receiving, by a processing device of an inventory server from a client system, a key and a key component, wherein the key component comprises a random string of characters generated by the client system to uniquely identify the client system, identifying, using the key as an identifier, the client system in an inventory database of the inventory server, transmitting an acknowledgement to the client system that the client system has been identified in the inventory database and that the inventory server received the key component, the acknowledgement to cause the client system to store the key component as part of a new key used to identify the client system, and storing the key component, wherein storing the key component causes a modification of the key used to identify the client system.

Example 2 is the method of example 1, wherein the key received from the client system comprises a string of characters stored at both the client system and the inventory server to identify the client system upon communication of the client system with the inventory server.

Example 3 is the method of example 1, wherein the client system comprises a virtual machine executing on a physical host machine and wherein the inventory server comprises an inventory system to maintain an inventory of client systems associated with a computing environment.

Example 4 is the method of example 3, wherein the inventory system of the inventory server comprises the inventory database, and wherein the inventory system identifies the client system in view of a record stored in the database, the record comprising an association between the key and the client system.

Example 5 is the method of example 3, wherein identifying the client system using the key comprises: comparing the key to a list of keys in the inventory database, wherein each key in the list of keys is associated with one of a plurality of client systems; and identifying the client system associated with the key in the inventory database.

Example 6 is the method of example 1, wherein storing the key component comprises appending the key component to a key component list and removing a least recently used key component from the key component list.

Example 7 is the method of example 6, wherein the key component list comprises one or more key components and wherein the key used to identify the client system comprises a subset of the one or more key components of the key component list.

Example 8 is the method of example 1, wherein the acknowledgment to the client system comprises the key component and wherein the key component uniquely identifies the client system from other systems generated from a single disk.

Example 9 is the method of example 7 that further includes storing a hash of the key component list, the hash utilized to verify that each key component of the key component list was a key previously used to identify the client system.

Example 10 is the method of example 8, wherein the key component is stored in response to receiving an indication from the client system that the key component received by the client system in the acknowledgment is the key component generated by the client system.

Example 11 is the method of example 7, wherein the client system executes a key management component, wherein the key management component performs functions corresponding to management of the key, the key component, and the key component list associated with the client system.

Example 12 is a system comprising a memory, a processing device operatively coupled to the memory, the processing device to generate, by a client system, a key component comprising a random string of characters, transmit, to an inventory server, a communication comprising a key and the key component, wherein the key is used by the inventory server to identify the client system, receive, from the inventory server, an acknowledgment that the client system has been identified in an inventory database of the inventory server and that the inventory server received the key component, and responsive to receiving the acknowledgment, store the key component as part of a new key to identify the client system.

Example 13 is the system of example 12, wherein the client system comprises a virtual machine executing on a physical host machine and wherein the inventory server comprises an inventory system to maintain an inventory of client systems associated with a computing environment.

Example 14 is the system of example 13, wherein the inventory system comprises the inventory database, wherein the inventory system identifies the client system in view of a record stored in the inventory database, the record comprising an association between the key and the client system.

Example 15 is the system of example 12, wherein the key transmitted to the inventory server comprises a string of characters stored at both the client system and the inventory server to identify the client system upon communication of the client system with the inventory server.

Example 16 is the system of example 12, wherein storing the key component comprises causing the processor to append the key component to a key component data structure and remove a least recently used key component from the key component data structure.

Example 17 is the system of example 16, wherein the processing device is further to store a hash of the key component data structure, the hash utilized to verify that each key component of the key component data structure was a key previously used to identify the client system.

Example 18 is a non-transitory machine-readable storage medium including instructions that, when accessed by a processing device, cause the processing device to receive, by the processing device of an inventory server from a first client system, a key and a first key component, wherein the first key component comprises a random string of characters generated by the first client system to uniquely identify the first client system from a second client system, identify, using the key as an identifier, the first client system in an inventory database of the inventory server, transmit an acknowledgement to the first client system that the first client system has been identified in the inventory database and that the inventory server received the first key component, the acknowledgement to cause the first client system to store the first key component as part of a new key used to identify the first client system, and store the first key component, wherein storing the first key component causes a modification of the key used to identify the first client system.

Example 19 is the storage medium of example 18, wherein the processing device is further caused to receive, by the processing device of the inventory server from a second client system, the key and a second key component, wherein the second key component comprises a random string of characters generated by the second client system to uniquely identify the second client system, transmit an acknowledgement to the second client system that the inventory server received the second key component, the acknowledgment to cause the second client system to store the second key component as part of a new key used to identify the second client system.

Example 20 is the storage medium of example 19, wherein the acknowledgment transmitted to the second client system comprises an indication that the key received by the server is not associated with a client system in the inventory database, and wherein the second client system is generated as a clone of the first client system.

Example 21 is the storage medium of example 19, wherein the first and second client systems each comprise a virtual machine executing on a physical host machine and wherein the inventory server comprises an inventory system to maintain an inventory of client systems associated with a computing environment.

Example 22 is a method that includes receiving, by an inventory system from a client system, a key and a key component, wherein the key component comprises a random string of characters generated by the client system, transmitting an acknowledgement to the client system that the key component was received by the inventory system, the acknowledgement to cause the client system to store the key component as part of a new key used to identify the client system, and storing the key component as part of the new key to identify the client system.

Example 23 is the method of example 22, wherein storing the key component as part of the new key to identify the client system comprises creating a new record in an inventory database of the inventory server and associating the key component with the client system in the new record.

Example 24 is the method of example 22, wherein the acknowledgement comprises an indication that there is not a key associated with the client system in the inventory system.

Example 25 is a method that includes receiving, at a server, a communication from a client system, the communication comprising a key, identifying the client system using the key, generating, by the server, a key component comprising a random string of characters, transmitting a communication comprising the key component to the client system, and responsive to receiving an acknowledgment that the client system received the key component, storing the key component as a new key to identify the client system.

Example 26 is the method of example 25 that further includes sending a confirmation to the client system that the key component received in the acknowledgement matches the key component generated by the server, the confirmation causing the client system to store the key component as the new key to identify the client system.

Example 27 is the method of example 25, wherein storing the key component comprises appending the key component to a key component data structure and removing a least recently used key component from the key component data structure.

Example 28 is the method of example 27, wherein the key component data structure comprises a hash of a key component list.

Example 29 is the method of example 28, wherein the key component list comprises a list of key components previously used to identify the client system.

Example 30 is an apparatus comprising means for generating, by a client system, a key component comprising a random string of characters to uniquely identify the client system from other client systems, means for transmitting a communication comprising a key and the key component to an inventory server, means for receiving from the inventory server an acknowledgment that the inventory server received the key component, and means for, responsive to receiving the acknowledgment, storing the key component as part of a new key to identify the client system.

Example 31 is the apparatus of example 30 further comprising means for appending the key component to a key component list and means for removing a least recently used key component from the key component list.