Patent Publication Number: US-8978032-B2

Title: Host naming application programming interface

Description:
BACKGROUND 
     Traditional information technology infrastructures for entities usually require several operating environments, vendor resource deployment, authentication repositories and mechanisms, and several application servers working together in order to operate a large entity&#39;s information technology. 
     Furthermore installing and/or implementing core functions, such as new software or hardware within an entity&#39;s information technology infrastructure requires several time consuming steps. For example, ordering and installing a new physical server and/or associate work station requires a logical process to load the necessary operating systems, secure the server, install applications, ensure licensing from proper vendors, and the like. In some cases this process can take several weeks or months for the server(s) to become operational and business-ready for the entity. 
     Furthermore, the new physical server and/or associate work station may have hardware or software features that provide functionality to the physical server and/or associate work station that are not being utilized. For example, the associate work station may have a large amount of memory that the associate may have requested, but may not be utilized. Thus, the entity may be paying for information technology infrastructure that is not being utilized to its fullest capacity. 
     Therefore, a need exists for a logical management system of information technologies within an entity that drastically limits the time required for core functions to be completed and intelligently monitors the core functions once implemented. 
     BRIEF SUMMARY 
     The following presents a simplified summary of all embodiments in order to provide a basic understanding of such embodiments. This summary is not an extensive overview of all contemplated embodiments, and is intended to neither identify key or critical elements of all embodiments nor delineate the scope of any or all embodiments. Its sole purpose is to present some concepts of all embodiments in a simplified form as a prelude to the more detailed description that is presented later. 
     Embodiments of the invention address the above needs and/or achieve other advantages by providing apparatus (e.g., a system, computer program product, and/or other devices) and methods for providing an information technology build service for building a platform in response to a service request. 
     According to some embodiments of the invention, a system has a memory device with computer-readable program code stored thereon, a communication device, and a processing device operatively coupled to the memory device and the communication device. The processing device is configured to execute the computer-readable program code to apply a set of naming rules to one or more attributes associated with one or more virtual machines, assign a unique name to each individual virtual machine based on the set of naming rules, and publish at least one of the assigned unique names over the network. 
     In some embodiments, the processing device is further configured to execute the computer-readable program code to receive a service request for a platform build from a requester, receive a plurality of build parameters associated with the platform build from the requester, and the one or more attributes associated with the one or more virtual machines are based at least in part on some or all the plurality of build parameters associated with the platform build. In some embodiments, the processing device is further configured to execute the computer-readable program code to provide access to the virtual machine associated with the at least one unique assigned name in response to an internet protocol network request or request to resolve a host name. In some embodiments, the processing device is further configured to execute the computer-readable program code to reclaim the unique assigned name from at least one of the virtual machines in response to the attributes of the at least one virtual machine changing, apply the set of naming rules to one or more attributes associated with the at least one virtual machine, assign a second unique name to the at least one virtual machine based on the set of naming rules, and publish the assigned second unique name over the network. In some embodiments, the processing device is further configured to execute the computer-readable program code to receive a naming framework administrator request for isolation of virtual machines having one or more specified attributes and provide a naming framework interface configured to isolate and present the unique names assigned to those of the plurality of virtual machines having the one or more specified attributes in response to the request. 
     In some embodiments, the set of rules comprises rules for assigning one or more characters of the unique name at least in part based on a type of a first resource allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a size of a second resource allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a network location or physical location of some or all the resources allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an operating system running on the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a functional use of the virtual machine; and rules for assigning one or more characters of the unique name at least in part based on some or all the software loaded or to be loaded on the machine. 
     In some embodiments, the set of rules comprises rules for assigning one or more characters of the unique name at least in part based on a number of virtual machines included in the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of the requester of the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of a line of business associated with the request for the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of an administrator of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of a manufacturer of some of the physical resources allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a time and a date of the request of the build of the virtual machine; and rules for assigning one or more characters of the unique name at least in part based on a time and a data of the completion of the build of the virtual machine. 
     According to embodiments of the invention, a computer program product provides a unique naming framework for a plurality of virtual machines attached to a network. The computer program product includes at least one non-transitory computer-readable medium having computer-readable program code portions embodied therein. The computer-readable program code portions include an executable portion configured for applying a set of naming rules to one or more attributes associated with one or more virtual machines; an executable portion configured for assigning a unique name to each individual virtual machine based on the set of naming rules; and an executable portion configured for publishing at least one of the assigned unique names over the network. 
     In some embodiments, the computer-readable program code portions include an executable portion configured for receiving a service request for a platform build from a requester; an executable portion configured for receiving a plurality of build parameters associated with the platform build from the requester; and the one or more attributes associated with the one or more virtual machines are based at least in part on some or all the plurality of build parameters associated with the platform build. In some embodiments, the computer-readable program code portions include an executable portion configured for providing access to the virtual machine associated with the at least one unique assigned name in response to an internet protocol network request or request to resolve a host name. In some embodiments, the computer-readable program code portions include an executable portion configured for reclaiming the unique assigned name from at least one of the virtual machines in response to the attributes of the at least one virtual machine changing; an executable portion configured for applying the set of naming rules to one or more attributes associated with the at least one virtual machine; an executable portion configured for assigning a second unique name to the at least one virtual machine based on the set of naming rules; and an executable portion configured for publishing the assigned second unique name over the network. In some embodiments, the computer-readable program code portions include an executable portion configured for receiving a naming framework administrator request for isolation of virtual machines having one or more specified attributes; and an executable portion configured for providing a naming framework interface configured to isolate and present the unique names assigned to those of the plurality of virtual machines having the one or more specified attributes in response to the request. 
     In some embodiments, the set of rules comprises rules for assigning one or more characters of the unique name at least in part based on a type of a first resource allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a size of a second resource allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a network location or physical location of some or all the resources allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an operating system running on the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a functional use of the virtual machine; and rules for assigning one or more characters of the unique name at least in part based on some or all the software loaded or to be loaded on the machine. 
     In some embodiments, the set of rules comprises rules for assigning one or more characters of the unique name at least in part based on a number of virtual machines included in the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of the requester of the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of a line of business associated with the request for the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of an administrator of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of a manufacturer of some of the physical resources allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a time and a date of the request of the build of the virtual machine; and rules for assigning one or more characters of the unique name at least in part based on a time and a data of the completion of the build of the virtual machine. 
     According to embodiments of the invention, a computer-implemented method provides a unique naming framework for a plurality of virtual machines attached to a network. The method is embodied in at least one non-transitory computer-readable medium having computer-readable program code embodied therein. The computer-readable program code is to cause a computer processor to apply a set of naming rules to one or more attributes associated with one or more virtual machines; assign a unique name to each individual virtual machine based on the set of naming rules; and publish at least one of the assigned unique names over the network. 
     In some embodiments, the computer-readable program code is further to cause a computer processor to receive a service request for a platform build from a requester; receive a plurality of build parameters associated with the platform build from the requester; and the one or more attributes associated with the one or more virtual machines are based at least in part on some or all the plurality of build parameters associated with the platform build. In some embodiments, the computer-readable program code is further to cause a computer processor to provide access to the virtual machine associated with the at least one unique assigned name in response to an internet protocol network request or request to resolve a host name. In some embodiments, the computer-readable program code is further to cause a computer processor to the at least one virtual machine based on the set of naming rules; and publish the assigned second unique name over the network. In some embodiments, the computer-readable program code is further to cause reclaim the unique assigned name from at least one of the virtual machines in response to the attributes of the at least one virtual machine changing; apply the set of naming rules to one or more attributes associated with the at least one virtual machine; assign a second unique name a computer processor to receive a naming framework administrator request for isolation of virtual machines having one or more specified attributes; and provide a naming framework interface configured to isolate and present the unique names assigned to those of the plurality of virtual machines having the one or more specified attributes in response to the request. 
     In some embodiments, the set of rules comprises rules for assigning one or more characters of the unique name at least in part based on a type of a first resource allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a size of a second resource allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a network location or physical location of some or all the resources allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an operating system running on the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a functional use of the virtual machine; and rules for assigning one or more characters of the unique name at least in part based on some or all the software loaded or to be loaded on the machine. 
     In some embodiments, the set of rules comprises rules for assigning one or more characters of the unique name at least in part based on a number of virtual machines included in the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of the requester of the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of a line of business associated with the request for the build of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of an administrator of the virtual machine; rules for assigning one or more characters of the unique name at least in part based on an identity of a manufacturer of some of the physical resources allocated to the virtual machine; rules for assigning one or more characters of the unique name at least in part based on a time and a date of the request of the build of the virtual machine; and rules for assigning one or more characters of the unique name at least in part based on a time and a data of the completion of the build of the virtual machine. 
     The features, functions, and advantages that have been discussed may be achieved independently in various embodiments of the present invention or may be combined with yet other embodiments, further details of which can be seen with reference to the following description and drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Having thus described embodiments of the invention in general terms, reference will now be made the accompanying drawings, wherein: 
         FIG. 1  illustrates an ETE system  100  by way of a compute hosting program environment abstraction  110  according to embodiments of the invention; 
         FIG. 2  illustrates the resource management layer  130  originally presented in  FIG. 1  in greater detail and according to embodiments of the invention; 
         FIG. 3  illustrates a flowchart of a method  300  for building a platform according to embodiments of the invention; 
         FIG. 4  illustrates a flowchart of a method  400  for potential post-build processing; 
         FIG. 5  illustrates an information technology infrastructure  500  according to embodiments of the invention; 
         FIG. 6  illustrates intelligent management of the provisioning of resources within the information technology infrastructure  600 , in accordance with embodiments of the invention; 
         FIG. 7  is a block diagram that illustrates a cloud computing system environment  700  wherein various systems of the invention and various methods of the invention operate according to embodiments of the invention; 
         FIG. 8  is a block diagram that illustrates the modular IT application  709  originally presented in  FIG. 7  in greater detail according to embodiments of the invention; and 
         FIG. 9  is a flowchart that illustrates a method  900  for host naming according to embodiments of the invention. 
     
    
    
     DETAILED DESCRIPTION OF EMBODIMENTS OF THE INVENTION 
     Embodiments of the present invention will now be described more fully hereinafter with reference to the accompanying drawings, in which some, but not all, embodiments of the invention are shown. Indeed, the invention may be embodied in many different forms and should not be construed as limited to the embodiments set forth herein; rather, these embodiments are provided so that this disclosure will satisfy applicable legal requirements. Where possible, any terms expressed in the singular form herein are meant to also include the plural form and vice versa, unless explicitly stated otherwise. Also, as used herein, the term “a” and/or “an” shall mean “one or more,” even though the phrase “one or more” is also used herein. Furthermore, when it is said herein that something is “based on” something else, it may be based on one or more other things as well. In other words, unless expressly indicated otherwise, as used herein “based on” means “based at least in part on” or “based at least partially on.” Like numbers refer to like elements throughout. 
     In accordance with embodiments of the invention, the term “information technology data” as used herein includes any data that may be needed for an entity to provide information technology infrastructure. For example, this data may include software, hardware, memory, storage, programs, operating systems, programming notes, instructions, output resulting from the use of any software program, including word processing documents, spreadsheets, database files, charts, graphs and outlines, electronic mail or “e-mail,” personal digital assistant (“PDA”) messages, instant messenger messages, source code of all types, programming languages, linkers and compilers, peripheral drives, PDF files, PRF files, batch files, ASCII files, crosswalks, code keys, pull down tables, logs, file layouts and any and all miscellaneous files or file fragments, deleted file or file fragment. Information technology data may also include any and all items stored on computer memory or memories, hard disks, floppy disks, zip drives, CD-ROM discs, Bernoulli Boxes and their equivalents, magnetic tapes of all types and kinds, microfiche, punched cards, punched tape, computer chips (including but not limited to EPROM, PROM, ROM and RAM of any kind) on or in any other vehicle for digital data storage or transmittal, files, folder tabs, or containers and labels appended to or associated with any physical storage device associated with each original and each copy. In accordance with embodiments of the invention, the term “information technology infrastructure” as used herein refers to the totality of interconnecting hardware and software that supports the flow and processing of information. Information technology infrastructures include all information technology data, physical components, and the like that make up the computing, internet communications, networking, transmission media, etc. of an entity. 
     Furthermore, embodiments of the present invention use the term “user.” A user may be an individual, financial institution, corporation, or other entity that may require electronic data, software, and/or hardware though an information technology infrastructure. Embodiments of the present invention also use the term “vendor” to describe a company, business, individual, or other entity that provides systems, software, hardware, and other technology required for operation of an entity. 
     Although some embodiments of the invention herein are generally described as involving a “financial institution,” other embodiments of the invention may involve other businesses that take the place of or work in conjunction with the financial institution to perform one or more of the processes or steps described herein as being performed by a financial institution. Still in other embodiments of the invention the financial institution described herein may be replaced with other types of entities that have an information technology infrastructure. 
     According to embodiments of the invention, an end to end modular information technology system (ETE system) provides responses to requests for service. A user or entity may submit a request for a build of a platform of one or more functional information technology (IT) servers. The request for the build may involve a unique configuration for the platform. A “platform” refers to a set of one or more servers to be built, being built or previously built to a specific configuration. The platform for a requested build may be chosen from a collection of predefined common configurations or may be customized by the requester. The platform for a build may also be chosen from a collection of predefined templates and customizable features may then be added as desired. Some components of the platform may include the number of virtual central processing units (CPUs), the amount of memory and the amount of storage to be included in one or more of the IT servers. The ETE system, in order to determine and configure the proper amount of storage for the platform, for example, calls the storage black box system (SBB), which accepts detailed input from the requester and/or the ETE system in order to configure the necessary number of unique storage components and their respective parameters. Once the requester has specified the parameters of the needed platform, the ETE system builds one or more usable servers as requested. 
     The one or more servers of the platform may be virtual or physical servers. A virtual or logical server may be built using a hypervisor that functions similarly to an operating system and allows multiple servers to run on one machine as though they were each individually running on a unique physical machine. In this scenario the end user cannot tell whether the server(s) being used are virtual or physical. In applications requiring less processing power or memory, such virtual servers may be stacked on one physical box, or in a situation where high performance is needed, a very large, very high performance physical machine may be built to the specifications of the requester. In this regard, the ETE system is considered to include a modular process for building servers. Among other benefits, the ETE system, in conjunction with the Orchestration Management Database, the Host Naming Application Programming Interface, the Storage Black Box and the Capacity Reclamation and Resource Adjustment Systems, provides streamlined building of servers based on a configuration associated with a particular requested platform. For example, in various instances the time from build request to completed build may be approximately 30 minutes to three hours whereas the process prior to implementation of the ETE system and its tools may take 60 to 90 hours to complete. 
     Referring now to  FIG. 1 , an ETE system  100 , which may be operating using cloud computing, is illustrated by way of a compute hosting program environment abstraction  110 . The abstraction  110  has three layers including an automation intelligence workload manager  120 , a resource manager  130  and a physical infrastructure  140 . The workload manager  120  is configured to balance the workload of the various components of the resource management layer  130  and/or the components of the physical infrastructure  140 . The resource management layer  130  represents an isolation and compartmentalization of specific functions needed to manage the physical device or devices of the physical infrastructure  140  so that efficiency of use of the physical device(s) is maximized. Each of the specific functions of the resource management layer  130  are represented by one of the boxes illustrated in  FIG. 2  and is considered a stand-alone component despite the possibility that each of the specific functions, in various embodiments, may be performed by a standalone physical computing device or multiple physical computing devices in collaboration. In various embodiments, one or more physical computing devices may function as a single component or system of the ETE system  100 , such as the OMDB, and in some embodiments a single component or system of the ETE system  100  may perform one or several of the specific functions discussed with reference to  FIG. 2  and/or other functions. 
     Referring now to  FIG. 2 , the resource management layer  130  originally presented in  FIG. 1  is shown in greater detail. The resource management layer  130  includes several boxes representing specific, modular functions categorized as various resource managers (RMs) of the ETE system  100 . The first box represents a server provisioning RM  202 . The server provisioning RM  202  functions similarly to a person directing traffic. When a request for service is received by the ETE system  100 , RM  202  recognizes the request and then instructs the various systems and components of the ETE system  100  regarding timing of processes. The RM  202  is, in some embodiments, an open source package that sequentially manages the service request. The RM  202  receives the input parameters for the build from the requester and is used to automate the “build” servers and operating system configuration based on those input parameters. 
     The next box represents a storage provisioning RM  204 . In some embodiments, the storage provisioning RM  204  is or includes the Storage Black Box (SBB) system, which is discussed in concurrently filed patent application Ser. No. 13/678,419, entitled “Storage Black Box”, which is assigned to the assignee of this application and is incorporated by reference in its entirety herein. Storage provisioning RM  204  provides for the automated creation, expansion, contraction and deletion of storage allocations for hosts. The storage allocations may be or include network file system (NFS) storage (or network-attached storage or Internet Protocol storage), fiber channel storage (or Storage Area Network (SAN)), or virtual storage. The storage provisioning RM  204  is initiated by the server provisioning RM  202 , which calls RM  204  and passes necessary parameters from a requester&#39;s service request to RM  202 . 
     The next box represents a virtual machine/hypervisor management RM  206 . RM  206  describes the aggregate functionality for building virtual machines (VMs). Thus, if the build requires one or more virtual machines to be built rather than a more traditional physical server or “bare metal machine”, then RM  206  communicates through one or more hypervisors for interacting with the virtual machine. RM  206  manages multiple sequential steps that must be taken to prepare for creating the virtual machine and to build and manage the virtual machine. 
     The next box represents a cloud intelligence RM  208 . RM  208  provides vision into the building process by communication with the hypervisor and/or other components. In some embodiments, the ETE system  100  creates a temporary virtual construct called a shell to facilitate the build of a virtual machine. RM  208  communicates with and gains intelligence from the shell for use by other resource managers or for presentation to a user. 
     The next box represents a power management RM  210 . RM  210  controls the power of resources being used during the building process. For example, RM  210  may control power up, power down, standby, idle and reboot of physical machines being used during the building process. For example, an automated build may require multiple reboots. 
     The next box represents a cloud usage tracking RM  212 . RM  212  provides vision into numerous parameters for each virtual machine being used in the build process. In some embodiments, RM  212  uses an orchestration management database (OMDB), which is discussed in concurrently filed patent application Ser. No. 13/678,029, entitled “Orchestration Management of Information Technology”, which is assigned to the assignee of this application and is incorporated by reference in its entirety herein. In short, the OMDB is a single, authoritative source for accurate data or metadata storage and retrieval. In some scenarios, the OMDB maintains data regarding over one hundred parameters associated with a single virtual machine, and RM  212  provides usage tracking information regarding the virtual machine based on the metadata provided by the OMDB. Examples of parameters tracked by RM  212  using the OMDB include when the VM was created, how long has it been running, how much physical storage, how much virtual storage, identity of requester, when was the last time the VM performed a specific function and the like. Any of these parameters may be provided to the user of the ETE system using RM  212  to retrieve metadata stored in the OMDB. 
     The next box represents a network automation RM  214 . RM  214  provides an interface whereby the ETE system can register, add, change, delete or otherwise manipulate domain name system (DNS) and Internet Protocol (IP) data. RM  214  presents a host name for an IP address match and promulgation to the network. In order for the machine being built to be recognizable to the network, it must be matched with an IP address and that IP address must be promulgated through the network so that it is known. 
     The next box represents an identity management RM  216 . RM  216  provides access management functionality. For example, once the server has been fully built and turned over to the requester, RM  216  ensures that the requester (and/or any other authorized person) is granted access to the server. 
     The next box represents a cloud configuration management RM  218 . RM  218  tracks and shares configuration and placement of all resources. In some embodiments, RM  218  is or includes the OMDB. RM  218  represents the configuration of the OMDB such that metadata regarding each of the VMs is stored and retrieved appropriately. The next box represents a system management integration RM  220 , which in some embodiments, is or includes the OMDB. RM  220  provides two different types of communication, namely, data may be published and may be submitted. A requester can submit a demand for data as it is needed using various methods of access. RM  220  also represents a near real-time copy of the data that is stored in an off-line database so that any external system or user who needs access to the data may get it without impacting the performance of the “real-time” production copy of the data being used in the build process. 
     The next box represents a compute resource analysis RM  250 . In some embodiments, RM  250  provides administrators an opportunity to perform preventive maintenance on the ETE system. For example, the administrator may run some tests designed to stress the infrastructure and the virtual machines to ensure no problems exist. RM  250  may detect patterns or conflicts, systems that should not be within the ETE system environment (e.g., because they consume too many resources). 
     The next box represents an application build and launch RM  252 . RM  252  provides multiple ways to put an application on a server. Once the ETE system has built a platform, which generally includes the network, host name, working server with operating system and any un-configured database or middleware, applications may need to be installed for the server(s) to be ready for use by the business. In some embodiments, the RM  252  must pull down one or more applications from an external system. The ETE system is considered an “open” system, i.e., it functions in an open format such that it may access any type of external system. 
     Additionally, the ETE system periodically performs quality assurance checks throughout the build process. For example, if a requester requests a basic server with a common operating system for hosting a website, the ETE system builds the virtual server through the automated process without further manual input after the platform parameters have been input by the requester. The ETE system may build the server to a certain point, reboots the server, does some additional work, reboots the server again, and throughout performs periodic QA checks on the server to ensure appropriate parameters are met. If the build passes the QA check, then the process continues, and if the build does not pass the QA check, then the process remediates the problem. 
     Referring now to  FIG. 3 , a flowchart illustrates a method  300  for building a platform according to embodiments of the invention. The first step, as represented by block  302 , is receiving a service request for a platform build, and the second step, as represented by block  304 , is receiving platform parameters from the requester. In various embodiments, the service request may be received in different ways. For example, a user may access an intranet or Internet page including a form having multiple questions and/or fields for inputting information regarding the request for service or build request. In other embodiments, a user may prepare a document or message including parameters for a service request and the document may be manually or automatically received and processed in order to extract the parameters for the service request. For example, the document or message may be scanned and key words extracted so that the parameters for the service request may be known or determined. In some instances, after such an automated extraction, the user is asked to confirm the parameters in some way, such as by email, message, phone call or otherwise. In some embodiments, the requester is not a person or entity, but rather is a software module, resource manager or other automated requester. For example, in some embodiments, a software module is configured to recognize when a line of business requires one or more additional servers and to determine the parameters necessary for the additional servers to fill the needs of the line of business. 
     The next step, as represented by block  306 , is to determine whether the service request requires any standalone physical machine and/or any virtual machines. In some instances, the requester may indicate a preference for one or the other. For example, in one instance, a requester may specify that they want a single physical machine in response to the service request. In other instances, where the requester does not specify or where the requester may specify that the ETE system should take the build the most efficient machine(s) possible, the system typically determines that one or more virtual machines or virtual servers will be appropriate end products of the build. The next step, as represented by block  308 , is to initiate a build of one or more physical machines based on the received parameters in the case where it is determined that one or more physical machines is needed. Alternatively, or in combination with step  308 , block  310  represents initiating a build of one or more virtual machines based on the received parameters in the case where it is determined that one or more virtual machines is needed. 
     The next step, as represented by block  312 , is provisioning physical and virtual storage based on the received parameters. In some embodiments, the SBB system is used to provision storage. The SBB provides a framework for accepting and managing storage from any external vendor. The SBB is programmed to recognize the specific interface controls for each of the storage vendors and each storage component such that it provides a touch-free, logical provisioning of storage based on the parameters required for the build. For example, a particular platform may include storage provisioned at many different physical sites each utilizing different interface protocols on the cloud. 
     The next step, as represented by block  314 , is provisioning physical and virtual processing power based on the received parameters. The ETE system may determine that a platform requires a specific amount of processing power based on the parameters received and may provision the processing power from one or more processors that match the characteristics required for the processing. For example, the processing speed and the types of calculations that will be required of the server may factor into the provisioning of the processing power. In some embodiments, the processing power is provisioned in a real-time or near-real-time way such that processing power is provisioned as it is needed, and once it is no longer needed for a specific task, it may be reclaimed and either used by one or more other virtual machines for processing or by the same virtual machine for processing a different task, rather than sitting idly and awaiting another processing task similar to the completed task. In this regard, processing resources may be utilized in an extremely efficient manner. This processing allocation or provisioning, reclamation and adjustment is described in concurrently filed patent application Ser. No. 13/678,415, entitled “Capacity Reclamation and Resource Adjustment”, which is assigned to the assignee of this application and is incorporated by reference in its entirety herein. 
     The next step, as represented by block  316 , is creating a shell and building and managing the virtual machines based on the received parameters. The build may involve many steps such as installation of operating systems and other software and configuration changes and/or powering adjustments such as reboots in order for the installations and configurations to function properly. Vision may be provided into the build process by communication with the hypervisors that are managing the virtual machines or from other sources such as the resource managers that are running the build process, as represented by block  318 . 
     The next step, as represented by block  320 , is managing power of resources. For example, the power of the various physical components that are being used in the build may be managed. If a virtual machine has an operating system installed on a physical component and that physical component must be restarted for the operating system to become appropriately functional, then the ETE system manages the physical component such that any other virtual machine&#39;s resources that are currently utilizing the physical component are either suspended temporarily or transferred to secondary or alternate physical components or resources during the power change. In some embodiments, power is managed on a micro level within a physical component. In other words, the portions of the physical component requiring power change or cycling in order to achieve a goal for one or more virtual machines are manipulated, while the remaining portions of the physical component retain power configurations otherwise running. 
     The next step, as represented by block  322 , is tracking cloud usage associated with parameters for the virtual machines. As discussed above, metadata associated with the virtual machine(s) is stored regularly and can be retrieved as necessary in response to a user request and/or a request from a software module or resource manager. The next step, as represented by block  324 , is integrating the platform with network services. This allows the virtual machine to appear to the network, internally and/or externally so that it may be queried, searched, used for processing or otherwise utilized in accordance with its design parameters. 
     The next step, as represented by block  326 , is managing addition and participation of active directory for user authentication. This allows the authorized users to access and use the platform upon completion of the build and also allows for modification of those granted access and their access parameters. 
     The next step, as represented by block  328 , is tracking and sharing configuration and placement of all resources. This step, in some embodiments, involves the OMDB. The OMDB provides for aggregation of vendor and institution data necessary for information technology infrastructure deployment, management, and federation. Utilizing cloud computing technology, the OMDB provides an aggregation of all data necessary for information technology infrastructures within an entity into one usable database that dramatically simplifies the ability to perform core functions and integrate external vendors and components with the entity&#39;s information technology infrastructure. In this way, the present invention modularly stores data required for an entity&#39;s information technology infrastructure and allows for easy deployment, intelligent monitoring, federation of data, and feedback associated with all aspects of the entity&#39;s information technology infrastructure. 
     Finally, the next step, as represented by block  330 , is providing an offline database of near-real-time data for non-build access. In some embodiments, a copy or partial copy of the OMDB or other datastore and/or database used in conjunction with a build process is created and used for offline access of non-build access. This eliminates efficiency drops in the OMDB or other primary data source due to non-build related functions and therefore further increases the speed with which the build takes place. 
     Referring now to  FIG. 4 , a flowchart illustrates a method  400  for potential post-build processing. The first step, as represented by block  402 , is performing periodic and/or regular checks for problems and analyzing the results of the checks. In instances where problems with the build are detected, the system may then pause the current build process or continue the current build process and perform a remediation concurrently, as represented by block  404 . 
     The last step, as represented by block  406 , is building and launching the platform. This build refers to building the desired software into the machines for functionality meeting or exceeding the expectations of the requester based on the requested build parameters. This may include calling external systems using an open format for installing one or more applications to make the machines business ready. Once the software build has been completed, the machines may be launched and used for their intended business purpose. 
     In various embodiments, a host naming application programming interface (HAPI) is used. The HAPI is a new IP service that provides a unique name for the platform on the network. The naming framework accounts for any unique naming schema associated with any of the various systems of the cloud such that no other name provided by the HAPI naming framework will be a duplicate. The name assigned a service request is used for asset tracking, application interaction and it is published as part of the platform&#39;s IP address and host name. The HAPI is described in greater detail below with reference to  FIGS. 8 and 9 . 
     As illustrated in  FIG. 5 , the automation intelligence workload manager  120  of  FIG. 1  may monitor the systems within the information technology infrastructure  500 , which may also be referred to as or be part of the “cloud” as referred to herein, which functions over and using a network  502 . In the illustration of  FIG. 5 , there are three different virtual local area networks (VLAN)  510  illustrated. Any number of VLAN may be present within the information technology infrastructure. As illustrated, VLAN 1 , VLAN 2 , and VLANx all include multiple hypervisors  512  within each of the VLANs. The hypervisors  512  are virtual managers of individual virtual machines within an information technology infrastructure. The hypervisors  512 , for example, may provide the OMDB with an indication as to the use of the information technology data within each virtual machine. As illustrated in  FIG. 5 , one of the hypervisors  514  within VLANx is only using a limited amount of the information technology data deployed to the virtual machine associated with the hypervisor  514 . Because the OMDB interacts with resource managers and/or an automation intelligence workload manager that is capable of monitoring each of the information technology components or infrastructures, including the network  502 , VLANs  510 , individual hypervisors  512 ,  514  associated with each virtual machine, the ETE system is capable of determining which virtual machines may be over capacity or under capacity with respect to the information technology data the virtual machine is utilizing. Also shown in the infrastructure  500  is the storage  506 , such as the SBB, the storage controller  508  and a SAN fabric  504 , which is the hardware that connects workstations and servers to the storage  506 . The SAN fabric  504  enables any-server-to-any-storage device connectivity through the use of Fibre Channel switching technology. 
       FIG. 6  illustrates intelligent management of the provisioning of resources within the information technology infrastructure  600 , in accordance with embodiments of the invention. The automation intelligence workload manager  602  may continually update workload, resources, and state, as illustrated in block  604 , by being in constant communication with the virtual machines through the system&#39;s hypervisors  605 ,  606 ,  608 ,  610 . As illustrated, the hypervisors are monitored to determine the amount of resources (e.g., storage and processing power) being used by each virtual machine and/or other system within the information technology infrastructure. The automation intelligence workload manager  602 , in this embodiment, provides a monitoring display of all the hypervisors within an information technology infrastructure for the user to monitor. As discussed herein, software modules or resource managers may also request information regarding the status of current resources being utilized by each individual virtual machine. 
     As illustrated in  FIG. 6 , a monitoring display illustrates several different statuses within each hypervisor. A hypervisor that is utilizing approximately half of its designated resources is illustrated as hypervisor  605 . A hypervisor that is utilizing all of its designated resources is illustrated as hypervisor  610 . A hypervisor that is using none of its designated resources is illustrated as hypervisor  606 . A hypervisor that is using one third of its designated resources is illustrated as hypervisor  608 . In each of these cases the ETE system may be able to drill down within each hypervisor to determine specifically what resources are being utilized and what resources are available for reclamation and re-allocation. In this way, the ETE system may pinpoint specific resources, such as a particular program, memory, etc. that is not being utilized, and re-allocate it to a new purpose. Furthermore, the monitoring of the information technology infrastructure allows for monitoring of every information technology infrastructure component built, the information technology data used for the builds, the data on the cloud, the inventory available, capacity available, performance, billing, building sequences, etc. that may be necessary to build and/or operate an information technology infrastructure for an entity. 
     In some embodiments, the monitoring of individual hypervisors with the ability to drill down to the individual resources being utilized by the a virtual machine may further allow the ETE system to provide feedback with respect to the operational status of the virtual machine and/or resources associated with it. For example, the monitoring of a virtual machine may recognize an error or virus within data or resources within a single virtual machine. As such, the recognized error may be sent in the form of feedback to a user or other individual, such that the error may be monitored and/or remediated to ensure smooth operation of the rest of the information technology infrastructure. 
     Referring now to  FIG. 7 , a block diagram illustrates a cloud computing system environment  700  wherein an ETE system  701 , a storage black box system  703 , an OMDB system  704  and/or other components and/or systems of the invention and the various methods of the invention operate according to various embodiments. 
     A cloud  702  may allow for on-demand network access to a shared pool of configurable resources provided by the OMDB  704 , user system  708 , vendor systems (not shown), the ETE system  701 , the SBB system  703  or otherwise. These resources may include but are not limited to hardware, software, networks, servers, storage, services, applications, systems, programs, packages, etc. and updates or programs to operate the same. The ETE system allows for these resources to be rapidly provisioned and released within the modular system. The network access may be a global area network (GAN), such as the Internet, a wide area network (WAN), a local area network (LAN), or any other type of network or combination of networks. The network may provide for wireline, wireless, or a combination wireline and wireless communication between devices on the network. 
     In some embodiments, resources and data may be stored on the cloud  702  and not at a local computing device, such that the memory of the local computing device is not affected by the work associated with the resources on the cloud  702 . Furthermore, the cloud  702  may provide processing capabilities, such that the user may access processing power and/or other resources from the cloud  702  and not on his/her local computing device. In this way, a shared pool of resources may be accessed, processed, and stored by users of the cloud computing environment  700  all within the cloud  702 . In some embodiments, the OMDB  704  may store data that may be accessible via the cloud  702 . In this way, the data and associated resources may be stored on the cloud  702 . 
     The cloud  702 , in some embodiments, may take the form of several different service and/or deployment models as required by the managing entity of the cloud  702 . The service models include, but are not limited to cloud software as a service, cloud application as a service, cloud platform as a service, and count infrastructure as a service. Cloud software as a service model provides the user with the ability to run programs and applications on the cloud infrastructure as opposed to the user system  708 . Cloud application as a service is similar to cloud software as a service, but in this model the user is able to specify and save customer server configurations and application templates. Cloud platform as a service allows a user to be able to deploy onto the cloud user-created or acquired applications and programs. Cloud infrastructure as a service allows a user to control portions of the cloud&#39;s operating systems, deployment applications, storage, networking, and other fundamental computing resources of the cloud  702 . 
     The deployment models may include, but are not limited to private model, public model, community model, and hybrid model. In some embodiments, the cloud  702  may be provided in a private model. The private model allows the cloud  702  to only be used only be a single entity. In some embodiments, the cloud  702  may be provided in a public model. The public model allows the cloud  702  to be available to the public or to multiple entities. In some embodiments, the cloud  702  may be provided in a community model. The community model allows the cloud to be accessed and/or used by a group of related entities. In some embodiments, the cloud  702  may be provided in a hybrid model. In the hybrid model the cloud  702  may be used both publicly and privately based on the provider&#39;s requests  702  may each be utilized for the cloud  702  associated with the ETE system  701 . However, some models may require more monitoring than others. For example, in the public deployment model, a larger number of users may access the cloud  702  and therefore there is more likely going to be a security issue, simply based on the number of individuals who have access to the cloud  702  and the data or applications located on the cloud  702 . In some embodiments, a private cloud  702  may provide the most security protection to an entity such as a financial institution and other users of the cloud  702 . 
     In some embodiments, the user is an individual. The individual may be an associate and/or other employee within a financial institution. In other embodiments, the user may be a financial institution, government organization, corporation, or other entity with an information technology infrastructure. The user may wish to retrieve vendor provided data off of the cloud  702  for use on his/her user system  708 . In some embodiments, the user may be provided with data from the cloud  702  via one or more of the other systems in the environment  700 . 
     An end to end system (ETE) system  701  is a computer system, server, multiple computer systems and/or servers or the like and may include one or more of the other system and/or components shown in  FIG. 7 . The ETE system  701  may be part of the cloud  702  rather than merely connected to it. The facility management system  701 , in the embodiments shown has a communication device  712  communicably coupled with a processing device  714 , which is also communicably coupled with a memory device  716 . The processing device is configured to control the communication device  712  such that the facility management system  701  communicates across the network  702  with one or more other systems. The processing device is also configured to access the memory device  716  in order to read the computer readable instructions  718 , which in some embodiments includes a modular IT application  709 . The memory device  716  also has a datastore  719  or database for storing pieces of data for access by the processing device  714 . 
     The modular IT application  709  is configured for instructing the processing device  714  to perform various steps of the methods discussed herein, and/or other steps and/or similar steps. In various embodiments, the modular IT application  709  is included in the computer readable instructions stored in a memory device of one or more systems other than the ETE system  701 . For example, in some embodiments, the modular IT application  709  is stored and configured for being accessed by a processing device of one or more other systems connected with the ETE system  701  through cloud  702 . 
     An OMDB system  704  is configured for storing information as detailed herein. The OMDB system  704  is a computer system, server, multiple computer system, multiple servers, a mobile device or some other computing device configured for use by the ETE system  701  in conjunction with the methods discussed herein. The OMDB  704  may have a communication device  722  communicatively coupled with a processing device  724 , which is also communicatively coupled with a memory device  726 . The processing device  724  is configured to control the communication device  722  such that the OMDB system  704  communicates across the cloud  702  with one or more other systems. The processing device  724  is also configured to access the memory device  726  in order to read the computer readable instructions  728 , which in some embodiments include an OMDB application  720 . The memory device  726  also has a datastore  729  or database for storing pieces of data for access by the processing device  724  and other components, virtual machines and systems of the environment  700 . The OMDB application  720  is configured to provide a secondary near-real-time copy of the data for non-build usage as discussed herein and/or other functions. 
     The storage black box (SBB) system  703  is configured for providing storage for one or more of the pieces of data used by the ETE system  701  when running the modular IT application  709  as discussed herein. In some embodiments, the SBB system  703  includes a communication device  742  communicatively coupled with a processing device  744 , which is also communicatively coupled with a memory device  746 . The processing device  734  is configured to control the communication device  742  such that the SBB system  703  communicates across the cloud  702  with one or more other systems. The processing device  744  is also configured to access the memory device  746  in order to read the computer readable instructions  748 , which in some embodiments include instructions for communicating with the ETE system  701 , and in some embodiments, includes some or all of the modular IT application  709 . 
     The user system  708  is configured for providing access to the ETE system  701  and/or the other components, virtual machines and/or systems of the environment  700  when running the modular IT application  709  as discussed herein. In some embodiments, the user system  708  includes a communication device  732  communicatively coupled with a processing device  734 , which is also communicatively coupled with a memory device  736 . The processing device  734  is configured to control the communication device  732  such that the user system  708  communicates across the cloud  702  with one or more other systems. The processing device  734  is also configured to access the memory device  736  in order to read the computer readable instructions  738 , which in some embodiments include instructions for communicating with the ETE system  701 , and in some embodiments, includes some or all of the modular IT application  709 . In some embodiments, the user system also includes a datastore  739 . 
     In various embodiments, one of the systems discussed above, such as the ETE system  701 , is more than one system and the various components of the system are not collocated, and in various embodiments, there are multiple components performing the functions indicated herein as a single device. For example, in one embodiment, multiple processing devices perform the functions of the processing device  714  of the ETE system  701  described herein. In various embodiments, the ETE system  701  includes one or more of the OMDB system  704 , the SBB system  703 , and/or any other system or component used in conjunction with or to perform any of the method steps discussed herein. 
     Referring now to  FIG. 8 , the modular IT application  709 , which may be stored in the cloud  702  in one or more memory devices, for example memory device  716 , as computer readable instructions, for example computer readable instructions  718 , may include computer readable instructions forming a capacity reclamation and resource adjustment (CRRA) application  810  and/or a host naming application programming interface (HAPI) application  820 . In various embodiments, the CRRA application  810  and/or the HAPI application  820  are embedded in the end to end system  701  and used during a build of a platform and/or during multiple platform builds for improving efficiency and subsequent accuracy of network communication, respectively. The CRRA application  810  and/or the HAPI application  820  may be completely stored and executed on one device or portions of one or both may be stored and/or executed on multiple devices and/or over the cloud  702 . 
     Referring now to  FIG. 9 , a flowchart illustrates a host naming method  900  according to embodiments of the invention. Some or all the steps discussed with reference to  FIG. 9 , and in some embodiments, one or more fewer or additional steps are embodied in computer-readable instructions such as the HAPI application  820 . The first step, as represented by block  910 , is to receive build parameters from a requester, such as an application, module or entity requesting a build of one or more servers. The build parameters, as discussed above, may include request for certain amounts of resources to be built into a server as well as specifying particular functional requirements. In some embodiments, the resources actually used in the server build are different than those submitted by the requester. The host naming method  900  typically, in embodiments where the type and size of resources used in the build of the server are used in naming the server, uses the resources actually built into the server rather than the type and/or size of resources requested for the server. In this way, the resources of the actual server, physical or virtual, are consistent with the unique name associated with the server. 
     The next step, as represented by block  920 , is applying a set of naming rules to the received build parameters and/or the actual build parameters to be used, being used, or to be used during the build process. The naming rules, in various embodiments, may be based on some combination of the type and size of allocated resources, the network and/or physical location of the allocated resources, the operating system of the machine, the functional use of the machine, the software loaded or to be loaded on the machine, and/or any other features or characteristics of the machine. Additionally or alternatively, in some embodiments, other features such as the number of machines associated with the build, the identity of the requester of the build, the line(s) of business associated with the request, the administrator of the machine(s), the manufacturer of some or all the resources used to build the machine, the time/date of request of the build, the time/date of the initiation of the build, the time/date of the completion of the build, and/or any other features or information related to the build and/or the specific machine are represented in the set of rules for naming. 
     The next step, as represented by block  930 , is assigning a unique name to each individual server or virtual machine. The name is assigned based on the set of rules discussed above. The name may be, in some embodiments, twenty-four (24), sixty (60) or other number of characters that uniquely identifies the machine from any other servers located in an entity&#39;s network. In some embodiments, specific characters of the name are designated for specifying particular attributes of a server, such as the network address, the operating system or the functional purpose of the server. 
     The next step, as represented by block  940 , is publishing the assigned unique name on the network in association with, or in place of, the server&#39;s IP address and host name. Publishing the unique name allows other nodes on the network to locate the server by using the unique name. The final step, as represented by block  950 , is providing access to the server in response to an IP network request or request to resolve by the host name. For example, a server or other network component may require something from the machine and may request the machine over the network by the unique name assigned to the machine. In this regard, when a unique name is requested, it is ensured that no other node on the network has the same name, which could carry with it catastrophic network consequences. In some embodiments, to further protect against this occurring, the HAPI application performs a check of a listing of previously assigned unique names to ensure that a name being assigned has not previously been assigned. 
     In some embodiments, when a virtual machine is reclaimed, the unique name is also reclaimed such that another server may be built with the previously used unique name. However, in some embodiments, the unique name is not reclaimed and the unique name is never re-used. For example, in an instance where the set of rules utilizes the date and time of creation of a virtual machine as part of the name creating algorithm, the unique name will never again be assigned another machine because no other machine will ever be created on the same date and at the same time. 
     In some embodiments, virtual machines are modified based on resource needs or overuse as discussed above with reference to the CRRA application  810 . When a virtual machine is modified, the HAPI application  820  may also rename the machine, reassign another unique name to the machine and republish the newly assigned unique name to the network. In other embodiments, when the virtual machine is modified, it retains its unique name assignment. This prevents the necessity of publishing a new name over the network. In some embodiments, certain types of changes to a virtual machine may require changing its unique name, whereas other changes do not require changing the unique name. For example, in one embodiment, if a virtual machine has its storage capacity changed, it may not have to change its uniquely assigned name; however, it a virtual machine&#39;s functional purpose changes, then it may have its uniquely assigned name changed. 
     The HAPI naming framework accounts for any unique naming schema promulgated by any of the disparate systems interacting over the network by standardizing the process by which names are assigned to the machines coming out of the build process. The unique name may be used for network access, identification of the machine, asset tracking, application interaction and the like. In some embodiments, a requester may preemptively request unique names to be reserved before a build actually takes place. For example, the requester may provide build parameters, and the system may determine the attributes of the virtual machines that will be built. Thus, based on those attributes, the HAPI application may reserve unique names for the machines to be built based on the determined attributes of the machines to be built. 
     The naming framework provides one or more administrators the benefit of managing all the unique names of the nodes of the network from a consolidated interface that provides reporting and analytical functionality for the administrators. For example, the administrators may sort the unique names based on any attribute or group of attributes and analyze usage of machine associated with unique names associated with particular attributes. For example, the unique names that are associated with a specific operating system may be isolated by the interface tool and analyzed for resource usage or some other analysis. 
     The invention may be embodied as a method (including, for example, a computer-implemented process, a business process, and/or any other process), apparatus (including, for example, a system, machine, device, computer program product, and/or the like), or a combination of the foregoing. Accordingly, embodiments of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.), or an embodiment combining software and hardware aspects that may generally be referred to herein as a “system.” Furthermore, embodiments of the present invention may take the form of a computer program product on a computer-readable medium having computer-executable program code embodied in the medium. 
     Any suitable transitory or non-transitory computer readable medium may be utilized. The computer readable medium may be, for example but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device. More specific examples of the computer readable medium include, but are not limited to, the following: an electrical connection having one or more wires; a tangible storage medium such as a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a compact disc read-only memory (CD-ROM), or other optical or magnetic storage device. 
     In the context of this document, a computer readable medium may be any medium that can contain, store, communicate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device. The computer usable program code may be transmitted using any appropriate medium, including but not limited to the Internet, wireline, optical fiber cable, radio frequency (RF) signals, or other mediums. 
     Computer-executable program code for carrying out operations of embodiments of the present invention may be written in an object oriented, scripted or unscripted programming language such as Java, Perl, Smalltalk, C++, or the like. However, the computer program code for carrying out operations of embodiments of the present invention may also be written in conventional procedural programming languages, such as the “C” programming language or similar programming languages. 
     Embodiments of the present invention are described above with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products. It will be understood that each block of the flowchart illustrations and/or block diagrams, and/or combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer-executable program code portions. These computer-executable program code portions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a particular machine, such that the code portions, which execute via the processor of the computer or other programmable data processing apparatus, create mechanisms for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     These computer-executable program code portions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing apparatus to function in a particular manner, such that the code portions stored in the computer readable memory produce an article of manufacture including instruction mechanisms which implement the function/act specified in the flowchart and/or block diagram block(s). 
     The computer-executable program code may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational phases to be performed on the computer or other programmable apparatus to produce a computer-implemented process such that the code portions which execute on the computer or other programmable apparatus provide phases for implementing the functions/acts specified in the flowchart and/or block diagram block(s). Alternatively, computer program implemented phases or acts may be combined with operator or human implemented phases or acts in order to carry out an embodiment of the invention. 
     As the phrase is used herein, a processor may be “configured to” perform a certain function in a variety of ways, including, for example, by having one or more general-purpose circuits perform the function by executing particular computer-executable program code embodied in computer-readable medium, and/or by having one or more application-specific circuits perform the function. 
     Embodiments of the present invention are described above with reference to flowcharts and/or block diagrams. It will be understood that phases of the processes described herein may be performed in orders different than those illustrated in the flowcharts. In other words, the processes represented by the blocks of a flowchart may, in some embodiments, be in performed in an order other that the order illustrated, may be combined or divided, or may be performed simultaneously. It will also be understood that the blocks of the block diagrams illustrated, in some embodiments, merely conceptual delineations between systems and one or more of the systems illustrated by a block in the block diagrams may be combined or share hardware and/or software with another one or more of the systems illustrated by a block in the block diagrams. Likewise, a device, system, apparatus, and/or the like may be made up of one or more devices, systems, apparatuses, and/or the like. For example, where a processor is illustrated or described herein, the processor may be made up of a plurality of microprocessors or other processing devices which may or may not be coupled to one another. Likewise, where a memory is illustrated or described herein, the memory may be made up of a plurality of memory devices which may or may not be coupled to one another. 
     While certain exemplary embodiments have been described and shown in the accompanying drawings, it is to be understood that such embodiments are merely illustrative of, and not restrictive on, the broad invention, and that this invention not be limited to the specific constructions and arrangements shown and described, since various other changes, combinations, omissions, modifications and substitutions, in addition to those set forth in the above paragraphs, are possible. Those skilled in the art will appreciate that various adaptations and modifications of the just described embodiments can be configured without departing from the scope and spirit of the invention. Therefore, it is to be understood that, within the scope of the appended claims, the invention may be practiced other than as specifically described herein.