SECURITY ENHANCED AUTOMATICALLY DEPLOYED INFORMATION TECHNOLOGY (IT) SYSTEM AND METHOD - Patent application

The IT system addresses scalability, security, and management challenges by using an automated controller that applies global system rules and templates for self-deployment and secure management of IT resources.

JP7670629B2Active Publication Date: 2025-04-30NET THUNDER LLC
View PDF 3 Cites 0 Cited by

Patent Information

Application Number
JP2021573500
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2019-06-11
Filing Date
2020-06-10
Publication Date
2025-04-30
Estimated Expiration
2040-06-10

AI Technical Summary

Technical Problem

Existing IT systems face challenges in scalability, security, and management due to complex infrastructure setups, inadequate documentation, and the risk of human error during configuration and change management.

Method used

The proposed IT system employs a controller that automates the setup, configuration, and management of IT systems using global system rules, templates, and IT system states, enabling self-deployment, resource allocation, and secure management of bare metal cloud nodes and virtual resources.

Benefits of technology

This approach enhances scalability by dynamically adding or removing resources, improves security by isolating resources from unauthorized access, and reduces human error through automated processes, thereby simplifying IT system management and maintenance.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007670629000005
    Figure 0007670629000005
  • Figure 0007670629000006
    Figure 0007670629000006
  • Figure 0007670629000007
    Figure 0007670629000007
Patent Text Reader

Abstract

Systems and methods for deploying IT computer systems are disclosed. According to exemplary embodiments, the system may include a controller that provisions and manages interrelated services within the system. By way of example, cleanup rules may be created and maintained that govern how modifications are resolved upon deletion of a service that has interdependencies with other services. According to additional exemplary embodiments, the system may include a controller that provisions storage for computer resources and / or provisions and connects resources to cloud instances. Innovative techniques for backing up system components are also described.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This patent application claims priority to U.S. Provisional Patent Application Serial No. 62 / 860,148, filed June 11, 2019, and entitled “Automatically Deployed Information Technology (IT) System and Method with Enhanced Security,” the disclosure of which is incorporated herein by reference in its entirety. [Background technology]

[0002] The demand, use, and need for computing has grown exponentially over the past few decades. At the same time, the demand for greater storage, speed, computing power, applications, and accessibility has led to rapid change in the computing field, providing tools to entities of various types and sizes. As a result, public virtual computing and cloud computing systems have been developed to provide more computing resources to a greater number of users and user types. This exponential growth is expected to continue. At the same time, infrastructure setup, management, change management, and updates become more complex and costly as failure and security risks increase. Scalability, i.e., growing systems over time, is also a major challenge in the field of information technology.

[0003] Most IT system problems, many of which are performance and security related, can be difficult to diagnose and address. Time and resource constraints allowed for system setup, configuration, and deployment can lead to errors and result in future IT problems. Over time, many different administrators may be involved in modifying, patching, or updating IT systems, including users, applications, services, security, software, and hardware. Often, configuration and change documentation and history is inadequate or lost, making it difficult to understand later how a particular system is configured to function. This can make future changes or troubleshooting difficult. When problems or failures occur, IT configurations and settings can be difficult to recover and reproduce. Also, system administrators can easily make mistakes, for example, incorrect commands or other mistakes, that can take down computers as well as web databases and services. Additionally, an increased risk of security breaches is not uncommon, while changes, updates, and patches to avoid security breaches can cause unwanted downtime.

[0004] Once critical infrastructure is in place, functioning, and operational, the costs or risks may often seem to outweigh the benefits of changing the system. Issues with making changes to live IT systems or environments can cause significant, sometimes catastrophic, problems for users or entities that rely on these systems. At the very least, the time it takes to troubleshoot and resolve failures or issues that arise during change management can require significant time, personnel, and monetary resources. Technical issues that may arise when changes are made to a live environment can have cascading effects and may not be resolved by simply reversing the changes that were made. Many of these issues contribute to the inability to quickly reconstruct systems when failures exist during change management.

[0005] Additionally, a bare metal cloud node or resource within an IT system may be vulnerable to security issues or may be compromised or accessed by unauthorized users. Hackers, attackers, or unauthorized users may pivot from that node or resource to access or hack other parts of the IT system or networks connected to the node. A bare metal cloud node or controller of an IT system may also be vulnerable through resources connected to application networks that may expose the system to security threats or otherwise compromise the system. In accordance with various exemplary embodiments disclosed herein, an IT system may be configured to interface with the Internet or improve security of bare metal cloud nodes or resources from application networks with or without connections to external networks.

[0006] According to an exemplary embodiment, the IT system includes bare metal cloud nodes or physical resources. When the bare metal cloud nodes or physical resources are powered on, set up, managed, or used, they may be connected to a network with nodes that other people or customers may be using, and in-band management may be omitted, switchable, disconnectable, or filtered from the controller. Also, an application network or a network of multiple applications in the system may be disconnected, disconnectable, switchable, or filtered from the controller via the resource(s) through which the application network is coupled to the controller.

[0007] Physical resources, including virtual machines or hypervisors, may also be vulnerable to security issues and may be compromised or accessed by unauthorized users when a hypervisor may be used to pivot to other hypervisors that are shared resources. An attacker may break out of the virtual machine and gain network access to a management system and / or supervisory system via a controller. According to various exemplary embodiments disclosed herein, an IT system may be configured to improve security, and one or more physical resources, including virtual resources on a cloud platform, may be disconnected, disconnectable, filtered, filterable, or disconnected from the controller via an in-band management connection.

[0008] According to an example embodiment, the physical resources of the IT system may include one or more virtual machines or hypervisors, and the in-band management connection between the controller and the physical resources may be omitted from the resources, may be disconnected, may be disconnectable, or may be filtered / filterable.

[0009] According to an example embodiment, a system may include a controller that uses techniques described herein to provision and manage interrelated services within the system. By way of example, cleanup rules may be created and maintained that govern how modifications are resolved upon deletion of a service that has interdependencies with other services.

[0010] According to an example embodiment, a system may include a controller that uses techniques described herein to provision storage to computing resources and / or provision and connect resources to a cloud instance.

[0011] Furthermore, in accordance with example embodiments, a system can utilize the architecture described herein to facilitate efficient backup operations, including backups involving multiple interdependent services. [Brief description of the drawings]

[0012] [Figure 1] 1 is a schematic diagram of a system in accordance with an exemplary embodiment. [Figure 2A] FIG. 2 is a schematic diagram of an example controller for the system of FIG. 1. [Figure 2B] 1 illustrates an example flow of operation of an example set of storage expansion rules. [Figure 2C] 2B shows an alternative for performing steps 210.1 and 210.2 of FIG. 2B. [Figure 2D] 2B shows an alternative for performing steps 210.1 and 210.2 of FIG. 2B. [Figure 2E] 1 shows an exemplary template. [Figure 2F] 1 illustrates an example process flow of the controller logic for processing a template. [Figure 2G] An exemplary process flow for steps 205.11, 205.12, and 205.13 of FIG. 2F is shown. [Figure 2H] An exemplary process flow for steps 205.11, 205.12, and 205.13 of FIG. 2F is shown. [Figure 2I] 4 illustrates another exemplary template. [Figure 2J] 4 illustrates another exemplary process flow of the controller logic for processing a template. [Figure 2K] 1 illustrates an exemplary process flow for managing service dependencies. [Figure 2L] 4 is a schematic diagram of an exemplary image derived from a template in accordance with an exemplary embodiment; [Figure 2M] 1 illustrates an exemplary set of system rules. [Figure 2N]2C illustrates an exemplary process flow for the controller logic to process the system rules of FIG. 2M. [Figure 2O] 1 illustrates an exemplary process flow for composing storage resources from a group of file system blobs or other files. [Figure 3A] FIG. 2B is a schematic diagram of the controller of FIG. 2A with added computational resources. [Figure 3B] 4 is a schematic diagram of an exemplary image derived from a template in accordance with an exemplary embodiment; [Figure 3C] 1 illustrates an exemplary process flow for adding resources, such as computational, storage, and / or networking resources, to a system. [Figure 4A] FIG. 2B is a schematic diagram of the controller of FIG. 2A with additional storage resources. [Figure 4B] 4 is a schematic diagram of an exemplary image derived from a template in accordance with an exemplary embodiment; [Figure 5A] FIG. 2B is a schematic diagram of the controller of FIG. 2A with added JBOD and storage resources. [Figure 5B] 1 illustrates an exemplary process flow for adding a storage resource and direct attached storage of a storage resource to a system. [Figure 6A] FIG. 2B is a schematic diagram of the controller of FIG. 2A with added networking resources. [Figure 6B] 4 is a schematic diagram of an exemplary image derived from a template in accordance with an exemplary embodiment; [Figure 7A] FIG. 1 is a schematic diagram of a system according to an example embodiment in an example physical deployment. [Figure 7B] 1 illustrates an exemplary process for adding a resource to an IT system. [Figure 7C] 1 illustrates an example process flow for deploying an application across multiple computing resources, multiple servers, multiple virtual machines, and / or multiple sites. [Figure 7D]1 illustrates an example process flow for deploying an application across multiple computing resources, multiple servers, multiple virtual machines, and / or multiple sites. [Figure 8A] FIG. 1 is a schematic diagram of a system according to an exemplary embodiment in an exemplary deployment. [Figure 8B] 1 illustrates an exemplary process flow for expanding from a single node system to a multi-node system. [Figure 8C] 1 illustrates an exemplary process flow for migrating storage resources to new physical storage resources. [Figure 8D] 1 illustrates an example process flow for migrating virtual machines, containers, and / or processes on a single node of a multi-tenant system to a multi-node system that may have separate hardware for compute and storage. [Figure 8E] 13 illustrates another exemplary process flow for expanding from a single node to multiple nodes in a system. [Figure 9A] FIG. 1 is a schematic diagram of a system according to an example embodiment in an example physical deployment. [Figure 9B] 4 is a schematic diagram of an exemplary image derived from a template in accordance with an exemplary embodiment; [Figure 9C] Here is an example of installing an application from an NT package. [Figure 9D] FIG. 1 is a schematic diagram of a system according to an exemplary embodiment in an exemplary deployment. [Figure 9E] 1 illustrates an exemplary process flow for adding a virtual computing resource host to an IT system. [Figure 9F] An exemplary system is shown having an additional connection to resources including instance 310a on the cloud. [Figure 9G-1] 9C illustrates an exemplary process flow for the system of FIG. 9F. [Figure 9G-2] 9C illustrates an exemplary process flow for the system of FIG. 9F. [Figure 9G-3]9C illustrates an exemplary process flow for the system of FIG. 9F. [Figure 9G-4] 9C illustrates an exemplary process flow for the system of FIG. 9F. [Figure 9H] FIG. 9F illustrates an example system having an additional instance on the cloud, which is connected to a cloud API and also connected to the controller through a VPN by an in-band management connection. [Figure 9I] 9C illustrates an exemplary process flow for the system of FIG. 9H. [Figure 9J] This figure also illustrates another example system shown in FIG. 9F with an additional instance on the cloud, which is connected to a cloud API and also connected to the controller through a VPN by an in-band management connection. [Figure 9K] 9C illustrates an exemplary process flow for the system of FIG. 9J. [Figure 9L] 1 illustrates an exemplary process flow for splitting a system from a cloud onto a local host. [Figure 10] FIG. 1 is a schematic diagram of a system according to an exemplary embodiment in an exemplary deployment. [Figure 11A] 1 illustrates a system and method according to an exemplary embodiment. [Figure 11B] 1 illustrates a system and method according to an exemplary embodiment. [Figure 12] 1 illustrates a system and method according to an exemplary embodiment. [Figure 13A] 1 is a schematic diagram of a system in accordance with an exemplary embodiment. [Figure 13B] FIG. 2 is another schematic diagram of a system in accordance with an exemplary embodiment. [Figure 13C] 1 illustrates an example process flow of a system in accordance with an example embodiment. [Figure 13D] 1 illustrates an example process flow of a system in accordance with an example embodiment. [Figure 13E] 1 illustrates an example process flow of a system in accordance with an example embodiment. [Figure 14]A shows an example system with a main controller deploying controllers in different systems. B shows an example flow illustrating possible steps for provisioning a controller with a main controller. C shows an example flow illustrating possible steps for provisioning a controller with a main controller. [Figure 15A] 1 illustrates an exemplary system in which a main controller creates an environment. [Figure 15B] 1 illustrates an exemplary process flow for a controller to set up an environment. [Figure 15C] 1 illustrates an exemplary process flow for a controller to set up multiple environments. [Figure 16A] 1 illustrates an exemplary embodiment in which a controller acts as a main controller for setting up one or more controllers. [Figure 16B] 1 illustrates an exemplary system in which an environment can be configured to write to other environments. [Figure 16C] 1 illustrates an exemplary system in which an environment can be configured to write to other environments. [Figure 16D] 1 illustrates an exemplary system in which an environment can be configured to write to other environments. [Figure 16E] 1 illustrates an exemplary system that allows a user to purchase new environments that are created by a controller. [Figure 16F] 1 illustrates an exemplary system provided with a user interface for interfacing with an environment created by a controller. [Figure 17A] Provides examples of change management tasks for new environments. [Figure 17B] Provides examples of change management tasks for new environments. [Figure 18A] Provides examples of change management tasks for new environments. [Figure 18B] Provides examples of change management tasks for new environments. [Figure 19A]1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 19B] 1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 19C] 1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 19D] 1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 19E] 1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 19F] 1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 19G] 1 illustrates an example system and its process flows for provisioning and managing interrelated services within the system. [Figure 20] A illustrates an example system and associated process flows in which one or more computing resources host one or more services that utilize storage from one or more storage resources. B illustrates an example system and associated process flows in which one or more computing resources host one or more services that utilize storage from one or more storage resources. C illustrates an example system and associated process flows in which one or more computing resources host one or more services that utilize storage from one or more storage resources. D illustrates an example system and associated process flows in which one or more computing resources host one or more services that utilize storage from one or more storage resources. [Figure 21A]1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21B] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21C-1] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21C-2] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21C-3] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21C-4] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21D] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21E] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21F] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21G] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Fig. 21H] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21I]1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21J] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21K] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21L-1] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 21L-2] 1 illustrates an example system and associated process flows for backing up a system, service, or other component within the system. [Figure 22A] 1 illustrates an example system and associated process flows for updating a system, service, or other component within the system. [Figure 22B] 1 illustrates an example system and associated process flows for updating a system, service, or other component within the system. [Figure 22C] 1 illustrates an example system and associated process flows for updating a system, service, or other component within the system. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0013] In an effort to provide technical solutions to the needs in the art as described above, the inventors disclose various inventive embodiments relating to systems and methods for information technology providing automated IT system setup, configuration, maintenance, testing, change management, and / or upgrades. For example, the inventors disclose a controller configured to automatically manage a computer system based on a number of system rules, a system state of the computer system, and a number of templates. As another example, the inventors disclose a controller configured to automatically manage a physical infrastructure of a computer system based on a number of system rules, a system state of the computer system, and a number of templates. Examples of automated management that may be performed by a controller may include remotely or locally accessing and modifying settings or other information on a computer that may run an application or service, building an IT system, modifying an IT system, building individual stacks within an IT system, creating a service or application, loading a service or application, configuring a service or application, migrating a service or application, modifying a service or application, deleting a service or application, cloning a stack to another stack on a different network, creating, adding, deleting, setting up, configuring, reconfiguring, and / or modifying resources or system components, automatically adding, deleting, and / or restoring resources, services, applications, IT systems, and / or IT stacks, configuring interactions between applications, services, stacks, and / or other IT systems, and / or monitoring the health of IT system components. In an exemplary embodiment, the controller may be embodied as a physical or virtual computing resource that may be remote or local. Additional examples of controllers that may be employed include, but are not limited to, any or any combination of processes, virtual machines, containers, remote computing resources, applications deployed by other controllers, and / or services.The controller may be distributed across multiple nodes and / or resources and may be located in other locations or networks.

[0014] IT infrastructure is most often built from individual hardware and software components. Hardware components used typically include servers, racks, power supplies, interconnects, display monitors, and other communication equipment. The methods and techniques for selecting and interconnecting these individual components are highly complex with numerous optional configurations that function with various degrees of efficiency, cost-effectiveness, performance, and security. Individual technicians / engineers skilled in connecting these infrastructure components are expensive to hire and train. Also, the numerous repetitive possibilities of the hardware and software make maintaining and updating that hardware and software complicated. This creates additional challenges when updates cannot be performed by the individuals and / or engineering companies that originally installed the IT infrastructure. Software components, such as operating systems, are either generically designed to work with a wide range of hardware or are highly specialized for a particular component. In most cases, complex plans or blueprints are written and executed. Changes, growth, scaling, and other challenges require updating the complex plans.

[0015] Some IT users purchase cloud computing services from a growing supplier industry, but this does not solve the problems and challenges of infrastructure setup, but rather shifts them from the IT user to the cloud service provider. Furthermore, large cloud service providers address the challenges and problems of infrastructure setup in ways that may reduce flexibility, customizability, scalability, and rapid adoption of new hardware and software technologies. Also, cloud computing services do not provide out-of-the-box bare metal setup, configuration deployment, and updates, nor do they allow migration to, from, or between bare metal and virtual IT infrastructure components. These and other limitations of cloud computing services can result in many computational, storage, and networking inefficiencies. For example, speed or latency inefficiencies in computation and networking can be incurred by the cloud service or in applications or services that utilize the cloud service.

[0016] The system and method of the exemplary embodiment provides for the deployment, utilization, and management of a new and unique IT infrastructure. According to the exemplary embodiment, the complexity of resource selection, installation, interconnection, management, and update is rooted in the core controller system and its parameter files, templates, rules, and IT system state. The system includes a set of self-assembly and operation rules that configure components to self-assemble rather than requiring a technician to assemble, connect, and manage them. Furthermore, the system and method of the exemplary embodiment enable greater customizability, scalability, and flexibility using the self-assembly rules without the need for current typical external blueprints. They also enable efficient resource usage and reuse.

[0017] Systems and methods are provided that ameliorate many of the problems and issues of current IT systems, whether in whole or in part physical or virtual. The systems and methods of the illustrative embodiments provide a structure that allows flexibility, reduces variability and human error, and may improve system security.

[0018] Although some solutions may exist individually to one or more of the problems of current IT systems, such solutions do not comprehensively address the multitude of problems as solved by the exemplary embodiments described herein. Moreover, while such existing solutions may address certain problems, they may exacerbate others.

[0019] Some of the current challenges addressed include, but are not limited to, issues related to setup, configuration, infrastructure deployment, asset tracking, security, application deployment, service deployment, maintenance and compliance documentation, maintenance, scaling, resource allocation, resource management, load balancing, software failures, software and security updates / patching, testing, IT system recovery, change management, and hardware refresh.

[0020] As used herein, IT systems may include, but are not limited to, servers, virtual and physical hosts, databases and database applications, such as, but not limited to, IT services, business computing services, computer applications, customer facing applications, web applications, mobile applications, backend, case number management, customer tracking, ticketing, business tools, desktop management tools, accounting, email, documentation, compliance, data storage, backups, and / or network management.

[0021] One of the problems that a user may face before setting up an IT system is predicting infrastructure needs. A user may not know how much storage, computing power, or other requirements will be needed initially or over time as the system grows or changes. According to an exemplary embodiment, the IT system and infrastructure allows for flexibility in that if the system requires changes, the self-deploying infrastructure (both physical and / or virtual) of the exemplary embodiment may be used to automatically add, remove, or reallocate within the infrastructure later. Thus, the challenge of predicting future needs that will be presented at the time of setting up the system is addressed by providing the ability to populate the system with global rules, templates, and system states, and by tracking changes to such rules, templates, and system states.

[0022] Other challenges may also be related to correct configuration, uniformity of configuration, interoperability, and / or interdependencies, which may include, for example, future incompatibilities due to changes in configured system elements or their configuration over time. For example, when an IT system is initially set up, there may be missing elements or failure to configure some elements. Also, for example, when iterations of elements or infrastructure components are set up, there may be a lack of uniformity between the iterations. Configurations may need to be re-configured when changes are made to the system. A difficult choice is presented between optimal configuration and flexibility for future infrastructure changes. According to an exemplary embodiment, when initially deploying a system, configurations are self-deployed from templates to infrastructure components using global system rules, so that the configurations are uniform and repeatable or predictable, allowing optimal configuration. While such initial system deployment may be on physical components, subsequent components may be added or modified, which may or may not be physical. Furthermore, while such initial system deployment may be on physical components, subsequent environments may be cloned from the physical structure, which may or may not be physical. This allows for optimal system configuration while minimizing future problematic changes.

[0023] During the deployment phase, there are typically challenges of interoperability of bare metal and / or software defined infrastructure. There may also be challenges of interoperability of software with other applications, tools, or infrastructure. These may include, but are not limited to, challenges with deployed products from different vendors. The inventors disclose an IT system that may provide infrastructure interoperability, regardless of bare metal, virtual, or any combination thereof. Thus, interoperability, i.e., the ability of parts to work together, may be built into the disclosed infrastructure deployment, where the infrastructure is automatically configured and deployed. For example, different applications may depend on each other and may reside on separate hosts. To enable such applications to interact with each other, the controller logic, templates, system states, and system rules described herein contain information and configuration instructions used to configure and track application interdependencies. Thus, the infrastructure features described herein provide a way to manage how each application or service interacts with each other. As an example, ensuring that an email service communicates properly with an authentication service and / or ensuring that a groupware service communicates properly with an email service. Moreover, such management can go down to the infrastructure level, making it possible to track, for example, how compute resources are communicating with storage resources. Otherwise, the complexity of IT systems would increase by O(n n ) could rise.

[0024] As disclosed, automatic deployment of resources does not require pre-configuration of operating system software due to the controller's ability to deploy based on global system rules, templates, and IT system state / system self-awareness. According to exemplary embodiments, a user or IT professional may not need to know whether resource additions, allocations, or reallocations are coordinated to ensure interoperability. Additional resources according to exemplary embodiments may be automatically added to the network.

[0025] To use an application, many different resources are required, typically including compute, storage, and networking. It also requires interoperability between resources and system components, including knowledge of what is in place and working, and interoperability with other applications. Applications may need to connect to other services to get configuration files and ensure all components work properly together. Thus, configuring an application can be time and resource intensive. If there are interoperability issues with other applications, configuring an application can have cascading effects on the rest of the infrastructure. This can lead to outages or compromises. We disclose automated application deployment to address these pain points. Thus, as we disclose, applications can be self-deployed by reading from IT system state, global system rules, and templates and intelligently configuring using knowledge of the current state of the system. Furthermore, according to an exemplary embodiment, pre-deployment testing of the configuration can be performed using the change management functionality described herein.

[0026] Another issue addressed by the exemplary embodiments relates to problems that may arise with intermediate configurations when it is desirable to switch to a different vendor or other tool. According to one aspect of the exemplary embodiments, template translation is provided between the rules and templates of the controller and the application templates of a particular vendor, allowing the system to automatically change vendors of software or other tools.

[0027] Many security issues stem from misconfigurations, patching failures, and the inability to test patching before deployment. Often security issues can occur during the configuration phase of the setup. For example, misconfigurations can leave sensitive applications exposed to the Internet or allow email forgery from an email server. We disclose a system setup that is automatically configured to protect against attackers, avoid unnecessary exposure to attackers, and provide security engineers and application security architects with more knowledge of the system. Automation reduces security flaws due to human error or misconfiguration. The disclosed infrastructure also provides introspection between services, allows rule-based access, and can limit communication between services to only what is actually necessary. We disclose a system and method that has the ability to safely test patches before deployment, for example as described with respect to change management.

[0028] Documentation is often a problematic area of ​​IT management. During setup and configuration, the main goal may typically be to get components to work together. This usually involves a troubleshooting and trial and error process, and it may be difficult to know what actually made the system work. While the exact commands that were executed are usually documented, the troubleshooting or trial and error process that may have resulted in a functioning system is often not well documented or not documented at all. Problems or deficiencies in documentation may cause problems with audit trails and audits. Documentation problems that arise may cause problems in demonstrating compliance. Often, compliance issues may not be well known when building a system or its components. Applicable compliance determinations may only be known after an IT system is set up and configured. Thus, documentation is essential for audits and compliance. The inventors disclose a system that includes a global system rules database, templates, and an IT system state database that provides automatically documented setup and configuration. Every configuration that occurs is recorded in the database. According to an exemplary embodiment, the automatically documented configuration provides an audit trail and can be used to demonstrate compliance. Inventory management may involve automatically documenting and tracking information.

[0029] Another challenge arising from the setup, configuration, and operation of IT systems is related to hardware and software inventory management. For example, it is usually important to know how many servers there are, whether they are up and still functioning, what their functions are, which rack each server is in, which power supply is connected to which server, which network cards and which network ports each server uses, which IT system components are running on, and many other important things. In addition to inventory information, passwords and other sensitive information used for inventory management need to be effectively managed. Especially in large IT systems, data centers, or data centers where equipment is frequently changed, collecting and maintaining this information is a time-consuming task, which is often managed manually or using various software tools. Compliant protection of secure passwords is a major risk factor that can become a key issue in ensuring a secure computing environment. The inventors disclose an IT system in which the collection and maintenance of the inventory and operational state of all servers and other components is automatically updated, stored, and protected as part of the IT system state, global system rules, templates, and controller logic of the controller.

[0030] In addition to issues related to IT system setup and configuration, the inventors disclose an IT system that may also address issues and problems that arise in the maintenance of IT systems. For example, many issues arise with the continued functioning of a data center with hardware failures, such as power failures, memory failures, network failures, network card failures, and / or CPU failures, among others. Additional failures occur when migrating hosts during hardware failures. Thus, the inventors disclose dynamic resource migration, e.g., migrating resources from one resource provider to another when a host goes down. In such situations, according to an exemplary embodiment, the IT system can be migrated to other servers, nodes, or resources, or to other IT systems. The controller may report the state of the system. A copy of the data is on another host with a known, automatically set up configuration. When a hardware failure is detected, any resources that the hardware may have provided may be automatically migrated after automatically detecting the failure.

[0031] A key issue with many IT systems is scalability. Growing businesses or other organizations typically add or reconfigure IT systems as they grow and their needs change. Problems arise when more resources are needed for existing IT systems, such as adding hard drive capacity, storage capacity, CPU processing, more network infrastructure, more endpoints, more clients, and / or more security. Problems also arise in configuration, setup, and deployment when different services and applications or infrastructure changes are required. According to the exemplary embodiment, a data center can be automatically scaled. Nodes or resources can be dynamically and automatically added or removed from the pool of resources. Resources added and removed from the resource pool can be automatically allocated or reallocated. Services can be provisioned and quickly moved to new hosts. A controller can detect and dynamically add more resources to the resource pool and know where to allocate / reallocate resources. A system according to the exemplary embodiment can scale from a single node IT system to a scaled system that requires many physical and / or virtual nodes or resources across multiple data centers or IT systems.

[0032] The inventors disclose a system that allows flexible resource allocation and management. The system includes computational, storage, and networking resources that may be in a resource pool and may be dynamically allocated. The controller may recognize new nodes or hosts on the network and then configure them so that they can be part of the resource pool. For example, when a new server is plugged in, the controller may configure it as part of the resource pool and add it to the resources, which may be dynamically started to be used. Nodes or resources may be discovered by the controller and added to different pools. Resource requests may be made, for example, via API requests to the controller. The controller may then provision or allocate the required resources from the pools according to rules. This allows the controller and / or applications via the controller to load balance and dynamically distribute resources based on the needs of the requests.

[0033] Examples of load balancing include, but are not limited to, deploying new resources in the event of a hardware or software failure, deploying one or more instances of the same application in response to an increase in user load, and deploying one or more instances of the same application in response to an imbalance in storage, computation, or networking requirements.

[0034] Problems with making changes to a live IT system or environment can create significant, sometimes catastrophic, issues for users or entities that depend on these systems to be up and running consistently. These outages not only represent a potential loss in the use of the system, but also an economic loss due to data loss and the substantial resources of time, manpower, and money required to resolve the issue. Problems can be exacerbated by the difficulty of reconstructing the system if the configuration documentation is incorrect or there is a lack of understanding of the system. Because of this issue, many IT system users are reluctant to patch their IT resources to eliminate known security risks, thus leaving them more vulnerable to security breaches.

[0035] Many problems that arise in maintaining IT systems are related to software failures due to change management or control that may require configuration. Situations in which such failures may occur include, but are not limited to, upgrading to a new software version, migrating to a different software, changing passwords or authentication management, switching between services or between different providers of a service.

[0036] Manually configured and maintained infrastructure is typically difficult to recreate. Recreating the infrastructure can be important for several reasons, including, but not limited to, rolling back problematic changes, power outage or other disaster recovery. It is difficult to diagnose problems in manually configured systems. It is difficult to recreate manually configured and maintained infrastructure. Also, system administrators can easily make mistakes, such as an incorrect command that is known to take down a computer system.

[0037] Making changes to a live IT system or environment can cause significant, sometimes catastrophic, problems for users or entities that depend on these systems to start and operate consistently. Not only do these outages represent a potential loss in the use of the system, such outages can also cause economic loss due to data loss as well as the substantial resources of time, personnel, and money required to resolve the problem. Problems can be exacerbated by the difficulty of reconstructing the system if the configuration documentation is incorrect or there is a lack of understanding of the system. Also, it is often very difficult to restore a system to its previous state after a significant or major change.

[0038] Furthermore, technical issues that may arise when changes are made to a live environment may have cascading effects. These cascading effects may make it difficult, and in some cases impossible, to revert to a state prior to the change. Thus, even if a change needs to be reverted due to issues with the implemented change, the state of the system has already been altered. In recent years, reverting infrastructure and system administration errors, as well as incomplete changes to a production environment, has been stated to be an unsolvable problem. Furthermore, testing changes to a system prior to deployment to a live environment is known to be problematic.

[0039] Accordingly, the inventors disclose several exemplary embodiments of systems and methods configured to revert changes to a running system to a pre-change state. Further, the inventors disclose systems and methods configured to enable significant reversion of the state of a system or environment that has undergone a running change, which may prevent or ameliorate one or more of the problems discussed above.

[0040] According to a variant of the exemplary embodiment, the IT system has a complete knowledge of the system with global system rules, templates, and IT system state. The complete knowledge of the system can be used to clone the infrastructure. The system or system environment can be cloned as a software-defined infrastructure or environment. The system environment including the volatile database in use, called the production environment, can be written to a non-volatile read-only database and used as the development environment in the development and testing process. The desired changes can be made to the development environment and tested there. The user or controller logic can make changes to the global rules and create a new version. The rule versions can be tracked. Then, according to other aspects of the exemplary embodiment, the newly developed environment can be automatically implemented. The previous production environment can also be kept or can be fully functional, so that revisions to the production environment in a previous state are possible without losing data. The development environment can then be booted with the new specifications, rules, and templates, and the database or system can be synchronized with the production database and switched to a writeable database. The original production database can then be switched to a read-only database and the system can be switched back to it in case of recovery being required.

[0041] With respect to software upgrades or patching, new hosts may be deployed if services are detected that require an upgrade or patch, and if a failure occurs due to the upgrade or patch, new services may be deployed if it is possible to revert the changes as described above.

[0042] Hardware upgrades are important in many situations, especially where the latest hardware is essential. One example of this type of situation occurs in the high frequency trading industry, where IT systems that take advantage of millisecond speeds can enable users to achieve superior trading results and profits. In particular, problems arise in ensuring interoperability with the current infrastructure, so that the new hardware knows how to communicate using protocols and work with the existing infrastructure. In addition to ensuring interoperability of components, the components require integration with the existing setup.

[0043] 1, an exemplary embodiment of an IT system 100 is shown. System 100 may be one or more types of IT systems, including but not limited to those described herein.

[0044] A user interface (UI) 110 is shown coupled to a controller 200 via an application program interface (API) application 120, which may or may not reside on a standalone physical or virtual server. The controller 200 may be deployed on one or more processors and one or more memories to perform any control operations described herein. Instructions executed by the processor(s) to perform such control operations may reside on a non-transitory computer-readable storage medium, such as a processor memory. The API 120 may include one or more API applications, which may be redundant and / or may operate in parallel. The API application 120 receives requests to configure system resources, parses the requests, and passes them to the controller 200. The API application 120 receives one or more responses from the controller, parses the response(s), and passes them to the UI (or application) 110. Alternatively, or in addition, an application or service may communicate with the API application 120. The controller 200 is coupled to computational resource(s) 300, storage resource(s) 400, and networking resource(s) 500. The resources 300, 400, 500 may or may not reside on a single node. One or more of the resources 300, 400, 500 may be virtual. The resources 300, 400, 500 may or may not reside on multiple nodes or in various combinations on multiple nodes. A physical device may include one or more or each of the resource types including, but not limited to, the computational resources 300, the storage resources 400, and the networking resources 500. The resources 300, 400, 500 may also include pools of resources, whether or not in different physical locations and whether or not they are virtual. Also, bare metal computing resources may be used to enable the use of virtual or containerized computing resources.

[0045] In addition to known definitions of a node, a node as used herein may be any system, device, or resource connected to a network(s) or other functional unit that performs a function on a standalone device or on a networked device. A node may also include, for example, but is not limited to, a server, a service / application / multiple services on a physical or virtual host, a virtual server, and / or multiple or single services running on a multi-tenant server or in a container.

[0046] The controller 200 may include one or more physical or virtual controller servers, which may also be redundant and / or operate in parallel. The controller may operate on a physical or virtual host that is acting as a computation host. As an example, the controller may be comprised of a controller operating on a host that serves other purposes, e.g., because it has access to sensitive resources. The controller may receive requests from the API application 120, analyze the requests, optimize task distribution to other resources, instruct the other resources, monitor and receive information from the resources, keep a history of system states and changes, and communicate with other controllers in the IT system. The controller may also include the API application 120.

[0047] A computational resource as defined herein may include a single computational node, real or virtual, or a resource pool including one or more computational nodes. A computational resource or computational node may include one or more physical or virtual machine or container hosts that may host one or more services or run one or more applications. A computational resource may be on hardware designed for multiple purposes, including but not limited to computing, storage, caching, networking, specialized computing, including but not limited to GPUs, ASICs, co-processors, CPUs, FPGAs, and other specialized computing methods. Such devices may be added using PCI Express switches or similar devices, and may be dynamically added in such manner. A computational resource or computational node may include or run one or more hypervisors or container hosts that include multiple different virtual machines that run services or applications or may be virtual computational resources. A computational resource may be focused on providing computational capabilities, but may also include data storage capabilities and / or networking capabilities.

[0048] A storage resource as defined herein may include a storage node or a pool of storage resources. A storage resource may include any data storage medium, e.g., high speed, low speed, hybrid, cache, and / or RAM. A storage resource may include one or more types of networks, machines, devices, nodes, or any combination thereof, which may or may not be directly connected to other storage resources. In accordance with aspects of an exemplary embodiment, a storage resource may be bare metal or virtual or a combination thereof. A storage resource may be focused on providing storage functionality, but may also include computing and / or networking functionality.

[0049] The networking resource(s) 500 may include a single networking resource, multiple networking resources, or a pool of networking resources. The networking resource(s) may include physical or virtual device(s), tool(s), switches, routers, or other interconnections between system resources, or applications for managing networking. Such system resources may be physical or virtual and may include computational resources, storage resources, or other networking resources. The networking resources may provide connectivity between external networks and application networks and may host core network services, including but not limited to Domain Name System (DNS or dns), Dynamic Host Configuration Protocol (DHCP), subnet management, Layer 3 routing, Network Address Translation (NAT), and other services. Some of these services may be deployed on computational, storage, or networking resources on physical or virtual machines. The networking resources may utilize one or more fabrics or protocols, including but not limited to Infiniband, Ethernet, Remote Direct Memory Access (DMA) over Converged Ethernet (RoCE), Fibre Channel, and / or Omnipath, and may include interconnections between multiple fabrics. The networking resources may or may not be software-defined networking (SDN) enabled. The controller 200 may be capable of configuring the topology of the IT system by directly modifying the networking resources 300 using SDN, virtual local area networks (VLANs), etc. The networking resources may be focused on providing networking functionality, but may also include computing and / or storage functionality.

[0050] As used herein, an application network refers to networking resources or any combination thereof for connecting or coupling applications, resources, services, and / or other networks, or for connecting users and / or clients to applications, resources, and / or services. An application network may include a network used by servers to communicate with other application servers (physical or virtual) and to communicate with clients. An application network may communicate with machines or networks external to the system 100. For example, an application network may connect a web front end to a database. Users may connect to web applications over the Internet or through other networks that may or may not be managed by the controller.

[0051] According to an example embodiment, each of the computational resources 300, storage resources 400, and networking resources 500 may be automatically added, removed, set up, allocated, reallocated, configured, reconfigured, and / or deployed by the controller 200. According to an example embodiment, additional resources may be added to the resource pool.

[0052] While illustrated is a user interface 110, such as a Web UI or other user interface through which a user 105 may access and interact with the system, alternatively or additionally, applications may communicate or interact with the controller 200 via API application(s) 120 or in another manner. For example, a user 105 or application may send requests including, but not limited to, configuring an IT system, configuring an individual stack within an IT system, creating a service or application, migrating a service or application, modifying a service or application, deleting a service or application, cloning a stack to another stack on a different network, creating, adding, deleting, setting up or configuring, reconfiguring a resource or system component.

[0053] The system 100 of Fig. 1 may include a server having connections or other communication interfaces with various elements, components or resources that may be physical or virtual or any combination thereof. According to a variant, the system 100 shown in Fig. 1 may include a bare metal server having connections.

[0054] As described in more detail herein, the controller 200 may be configured to add resources, allocate resources, manage resources, and update available resources by powering on resources or components and automatically setting up, configuring, and / or controlling the boot-up of resources. The power-on process may begin with powering on the controller so that the order of devices booted is consistent and does not depend on a user powering on the devices. This process may also include detection of powered-on resources.

[0055] 2A-10, a controller 200, controller logic 205, a global system rules database 210, an IT system state 220, and a template 230 are shown.

[0056] The system 100 includes global system rules 210. The global system rules 210 may declare rules to set up, configure, boot, allocate, and manage resources, which may include compute, storage, and networking, among others. The global system rules 210 include minimum requirements for the system 100 to be in a correct or desired state. These requirements may include IT tasks that are expected to be completed and an updatable list of expected hardware required to predictably build the desired system. The updatable list of expected hardware allows the controller to verify that the required resources are available (e.g., before starting a rule or using a template). The global rules may include a list of operations required for various tasks and corresponding instructions related to sequencing the operations and tasks. For example, the rules may specify the order in which components are powered on, the order in which resources, applications, and services are booted, dependencies, when various tasks should be initiated, such as when to initiate an application load, configuration, start, reload, or hardware update. The rules 210 may also include, for example, one or more of a list of resource allocations required for applications and services, a list of templates that may be used, a list of applications and configuration methods to load, a list of services and configuration methods to load, a list of application networks and which applications fit into which networks, a list of various application specific configuration variables and user specific application variables, an expected state that allows the controller to check the system state to ensure that the state is as expected and that the results of each instruction are as expected, and / or a version list that includes a list of rule changes (e.g., snapshots) that may allow tracking of rule changes and the ability to test or revert to different rules in different situations. The controller 200 may be configured to apply the global system rules 210 to the IT system 100 on the physical resources.The controller 200 may be configured to apply the global system rules 210 to the IT system 100 on virtual resources. The controller 200 may be configured to apply the global system rules 210 to the IT system 100 on a combination of physical and virtual resources.

[0057] FIG. 2M illustrates an exemplary set of system rules 210 that may take the form of global system rules. The exemplary set of system rules 210 illustrated in FIG. 2M may be loaded into the controller 200 or derived by querying the system state (see 210.1). In the example of FIG. 2M, the system rules 210 include a set of instructions that may take the form of configuration routines 210.2 and also include data 210.3 for creating and / or recreating an IT system or environment. The configuration rules in the system rules 210 may know how to find the template 230 via the requested template list 210.7 (the template 230 may exist in a file system, disk, storage resource, or may be placed in the system rules). The controller logic 205 may also look for the template 230 before processing it and enable the system rules 210 after verifying that the template 230 exists. The system rules 210 may include a subset 210.15 of the system rules, which may be executed as part of the configuration routines 210.2.

[0058] Also, subsystem rules 210.15 can be used, for example, as a tool for building a system of integrated IT applications (where they are processed by system rule execution routine 210.16 to update the system state and current configuration rules to reflect the addition of 210.15). Subsystem rules 210.15 can also be located elsewhere and loaded into system state 220 by user interaction. For example, one can have subsystem rules 210.15 as playbooks and have them available and run (and then global system rules 210 are updated so that the playbook can be replayed if one wants to clone the system).

[0059] Configuration routines 210.2 may be a set of instructions used to configure the system. Configuration routines 210.2 may also include subsystem rules 210.15 or system state pointers 210.8 if the implementer desires. When executing configuration routines 210.2, controller logic 205 processes a set of templates in a particular order (210.9) to optionally allow parallel deployment while maintaining proper dependency processing (210.12). Configuration routines 210.2 may optionally invoke API calls 210.10 that may set configuration parameters 210.5 for applications that may be configured by processing templates according to 210.9. Also, requested services 210.11 are services that need to be up and running when the system makes API call(s) 210.10.

[0060] Routines 210.2 may include procedures, programs, or methods for data loading (210.13) for volatile data 210.6, which may include, but are not limited to, copying data, transferring databases to computational resources, pairing computational resources with storage resources, and / or updating system state 220 with the location of volatile data 210.6. A pointer (see 210.4) to the volatile data may be kept with data 210.3 to locate volatile data that may be stored elsewhere. Data loading routines 210.13 may also be used to load configuration parameters 210.5 if they are located in a non-standard data store (e.g., included in a database).

[0061] The system rules 210 may also include resource lists 210.18, which may dictate which components are assigned to which resources, allowing the controller logic 205 to determine if appropriate resources and / or hardware are available. The system rules 210 may also include alternative hardware and / or resource lists 210.19 for alternative deployments (e.g., for a development environment where software engineers may want to perform demonstration testing but may not want to allocate an entire data center). The system rules may also include data backup and / or standby routines 210.17 that provide instructions on how to back up the system and how to use standby for redundancy. Examples of data backup systems and / or backup routines that implement the backup rules include, but are not limited to, those described herein with reference to Figures 21A-21J.

[0062] After any action is taken, the system state 220 may be updated and the query (which may include writing) may be saved as a system state query 210.14.

[0063] FIG 2N illustrates an example process flow in which controller logic 205 processes system rules 210 (or subsystem rules 210.15) of FIG 2M. At step 210.20, controller logic 205 checks to ensure that appropriate resources are available (see 210.18 of FIG 2M). If not, alternative configurations may be checked at step 210.21. A third option may include the user being prompted to select an alternative configuration that may be supported by templates 230 referenced in list 210.7 of FIG 2M.

[0064] At step 210.22, the controller logic may then verify that the computational resource (or any appropriate resource) has access to the volatile data. This may involve connecting to a storage resource or adding a storage resource to the system state 220. At step 210.23, the configuration routines are then processed and as each routine is processed, the system state 220 is updated (step 210.24). The system state 220 may also be queried to check if a particular step has finished before proceeding (step 210.25).

[0065] The configuration routine processing steps shown in FIG. 210.23 may include any of the procedures (or a combination thereof) of 210.26. It may also include other procedures. For example, processing in 210.26 may include template processing (210.27), loading configuration data (210.28), loading static data (210.29), loading dynamic volatile data (210.30), and / or binding services, applications, subsystems, and / or environments (210.31). Such procedures in 210.26 may be repeated in a loop or may be executed in parallel, since some system components are independent and others are dependent. Controller logic, service dependencies, and / or system rules may dictate which services may depend on each other, and services may be bound together to further construct an IT system from system rules.

[0066] The global system rules 210 may also include storage expansion rules. The storage expansion rules may, for example, provide a set of rules to automatically add storage resources to existing storage resources in the system. Additionally, trigger points may be provided that know when an application running on a computing resource(s) requests storage expansion (or the controller 200 may know when to expand the storage of a computing resource or application). The controller 200 may allocate and manage new storage resources, and may merge or consolidate storage resources with existing storage resources for a particular running resource. Such a particular running resource may be, but is not limited to, a computing resource in the system, an application running a computing resource in the system, a virtual machine, a container, or a physical or virtual computing host, or a combination thereof. A running resource may inform the controller 200 that it is running out of storage space, for example, through a storage space query. An in-band management connection 270, a SAN connection 280, or any networking or coupling to the controller 200 may be used in such queries. An out-of-band management connection 260 may also be used. Those storage expansion rules (or a subset of those storage expansion rules) may be used even for resources that are not running.

[0067] Storage expansion rules dictate how to find, connect, and set up new storage resources in the system. The controller registers new storage resources in the system state 220 and informs running resources where the storage resource exists and how to connect to it. The running resources use such registration information to connect to the storage resource. The controller 200 may merge the new storage resource with an existing storage resource or may add the new storage resource to a volume group.

[0068] FIG. 2B illustrates an exemplary flow of operation of an exemplary set of storage expansion rules. At step 210.41, the running resource determines that it is low on storage based on a trigger point or otherwise. At step 210.42, the running resource connects to the controller 200 through an in-band management connection 270, a SAN connection 280, or another type of connection visible to the operating system. Through this connection, the running resource can notify the controller 200 that it is low on storage. At step 210.43, the controller configures storage resources to increase storage capacity for the running resource. At step 210.44, the controller provides the running resource with information about where the newly configured storage resource is located. At step 210.45, the running resource connects to the newly configured storage resource. At step 210.46, the controller adds a mapping of the location of the new storage resource to the system state 220. The controller may then add the new storage resource to the volume group assigned to the running resource (step 210.47), or the controller may add the assignment of the new storage resource to the running resource to the system state 220 (step 210.48).

[0069] FIG. 2C shows an alternative example of performing steps 210.41 and 210.42 in FIG. 2B. In steps 210, 50, the controller sends a key command through the out-of-band management connection 260 to view a monitor or console for storage status updates for the running resource. For example, the monitor can be an ipmi console through which a screen can be reviewed via the out-of-band connection 260. As an example, the out-of-band connection 260 can be connected to a USB as a keyboard / mouse and a VGA monitor port. In step 210.51, the running resource displays information on the screen. In step 210.52, the controller then reads the information presented on the monitor or console via the out-of-band management connection 260 and a screen scrape or similar operation, which may indicate a low storage condition based on the trigger point. The process flow may then continue with step 210.43 of FIG. 2B.

[0070] Figure 2D shows another alternative to performing steps 210.41 and 210.42 in Figure 2B. At step 210.55, the running resource automatically displays information on a monitor or console for retrieval by the controller. At step 210.56, the controller automatically, periodically, or constantly retrieves the monitor or console to check the running resource. In response to this retrieval, the controller determines that the running resource is low on storage (step 210.57). Process flow may then continue with step 210.43 of Figure 2B.

[0071] The controller 200 also includes a library of templates 230, which may include bare metal and / or service templates. The templates may include, but are not limited to, email, file storage, voice over IP, software accounting, software XMPP, wiki, version control, account authentication management, and third party applications that may be configurable by a user interface. The templates 230 may have associations with resources, applications, or services, and may act as recipes that define how such resources, applications, or services are integrated into the system.

[0072] Thus, a template may include an established set of information used to create, configure, and / or deploy a resource or an application or service loaded onto the resource. Such information may include, but is not limited to, a kernel, an initrd file, a file system or file system image, files, configuration files, configuration file templates, information used to determine the appropriate setup for different hardware and / or computing backends, and / or other available options for configuring resources to run applications and operating system images that enable and / or facilitate the creation, boot, or execution of the application.

[0073] A template may contain information that can be used to deploy an application on multiple supported hardware types and / or compute backends, including, but not limited to, multiple physical server types or components, multiple hypervisors running on multiple hardware types, and container hosts that can be hosted on multiple hardware types.

[0074] A template may derive a boot image for an application or service to run on a computing resource. Templates and images derived from templates may be used to create applications, deploy applications or services, and / or prepare resources for various system functions, which enables and / or expedites the creation of applications. Templates may have variable parameters in files, file systems, and / or operating system images that may be overridden by configuration options from either default settings or settings provided by a controller. Templates may have configuration scripts used to configure applications or other resources, and templates may utilize configuration variables, configuration rules, and / or default rules or variables, which may include specific rules, scripts, or variables for specific hardware or other resource specific parameters, e.g., hypervisor (if virtual), available memory. Templates may have files in the form of binary resources, binary resources, or compilable source code that yield hardware or other resource specific parameters, a specific set of binary resources, or source code with compilation instructions for specific hardware or other resource specific parameters, e.g., hypervisor (if virtual), available memory. A template may contain a set of information that is independent of what is running on a resource.

[0075] A template may include a base image. A base image may include a base operating system file system. The base operating system may be read-only. A base image may also include basic tools of an operating system independent of the running one. A base image may include a base directory and operating system tools. A template may include a kernel. The kernel or kernels may include an initrd kernel, or multiple kernels configured for different hardware and resource types. Images may be derived from a template and loaded or deployed to one or more resources. A loaded image may also include boot files, such as the corresponding template kernel or initrd kernel.

[0076] The image may include template file system information that may be loaded into the resource based on the template. The template file system may configure the application or service. The template file system may include a shared file system that is common to all resources or similar resources, for example to save storage space on which the file system is stored or to facilitate the use of read-only files. The template file system or image may include a set of files that are common to the service being deployed. The template file system may be preloaded on the controller or may be downloaded. The template file system may be updated. The template file system may allow for relatively quick deployment since it may not need to be rebuilt. Sharing a file system with other resources or applications may allow for reduced storage since files are not duplicated unnecessarily. This may also allow for easier recovery from failures since only files that are different from the template file system need to be restored.

[0077] The template boot file may contain a kernel and / or an initrd or similar file system used to assist the boot process. The boot file may boot the operating system and may set up the template file system. The initrd may contain a small temporary file system with instructions on how to set up the template so that it can be booted.

[0078] The template may further include BIOS settings. The template BIOS settings may be used to set optional settings for running the application on the physical host. When used, the out-of-band management 260 may be used to boot the resource or application as described herein with respect to FIGS. 1-12. The physical host may boot the resource or application using the out-of-band management network 260 or a CDROM. The controller 200 may set application-specific BIOS settings defined in such templates. The controller 200 may use the out-of-band management system to make direct BIOS changes through APIs specific to the particular resource. The settings may be verified through console and image recognition. Thus, the controller 200 may use the console functionality and make BIOS changes through a virtual keyboard and mouse. The controller may also use a UEFI shell and type directly into the console and use image recognition to verify successful results, type commands correctly, and ensure successful setting changes. If there is a bootable operating system available for the BIOS change or update to a particular BIOS version, the controller 200 may remotely load a disk image or ISO boot that runs an application that updates the BIOS and allows the operating system to make configuration changes in a trusted manner.

[0079] A template may further include a template-specific list of supported resources or a list of resources required to run a particular application or service.

[0080] The template image, or a portion of the image or template, may be stored in the controller 200, or the controller 200 may move or copy it to the storage resource 410.

[0081] FIG. 2E illustrates an example template 230. The template contains all the information necessary to create an application or service. The template 230 may also contain information for different hardware types, alternative data, files, binaries that provide similar or identical functionality. For example, there may be file system blobs 232 for / usr / bin and / bin with binaries 234 compiled for different architectures. The template 230 may also contain daemons 233 or scripts 231. The daemons 233 are binaries or scripts that may run at boot time when the host is powered on and ready to go, and in some cases, the daemons 233 may expose APIs that may be accessible by the controller and allow the controller to change the host's configuration (and the controller may then update active system rules). The daemons may be powered down and restarted through out-of-band management 260 or in-band management 270 described above and below. The daemons may also expose generic APIs to provide dependent services for the new service (e.g., a generic web server API that communicates with an API to control nginx or apache). Script 231 may be an installation script that may be executed during or after booting an image, or after starting a daemon or enabling a service.

[0082] The template 230 may also include a kernel 235 and a pre-boot file system 236. The template 230 may also include multiple kernels 235 and one or more pre-boot file systems (such as an initrd or initramfs in Linux, or a read-only RAM disk in bsd) for different hardware and different configurations. The initrd may also be used to mount file system blobs 232 presented as overlays and mount root file systems on remote storage by booting into an initramfs 236, which may optionally be connected to storage resources through a SAN connection 280, as described below.

[0083] Filesystem blobs 232 are filesystem images that may be split into separate blobs. The blobs may be interchangeable based on configuration options, hardware type, and other differences in the setup. A host booted from template 230 may boot from a union filesystem (such as an overlayfs) that includes multiple blobs or images created from one or more filesystem blobs.

[0084] The template 230 may also include or be linked to additional information 237, such as volatile data 238 and / or configuration parameters 239. For example, the volatile data 238 may be included in the template 230 or may be included externally. The volatile data 238 may be in the form of a file system blob 232 or other data store including, but not limited to, a database, a flat file, a file stored in a directory, a tarball of files, a git, or other version control repository. Additionally, the configuration parameters 239 may be included externally or internally to the template 230 and are optionally included in system rules and applied to the template 230.

[0085] System 100 further includes IT system state 220, which tracks, maintains, changes, and updates the state of system 100, including but not limited to resources. System state 220 may track available resources, which informs controller logic if and which resources are available for rule implementation and templates. System state may track resources used, which allows controller logic 205 to check and take advantage of efficiencies, whether there is a need to switch for upgrades or other reasons such as efficiency improvements or priorities. System state may track which applications are running. Controller logic 205 may compare expected running applications to actual running applications according to the system state and whether they need to be revised. System state 220 may also track where applications are running. Controller logic 205 may use this information for purposes of evaluating efficiency, change management, updates, troubleshooting, or audit trails. System state may track networking information, such as which networks are on or currently running, or configuration values ​​and history. System state 220 may also track the history of changes. System state 220 may also track which templates are used in which deployments based on global system rules that dictate which templates are used. The history may be used for auditing, alerts, change management, build reports, tracking versions correlated with hardware and applications and configurations, or configuration variables. System state 220 may maintain a history of configurations for auditing, compliance testing, or troubleshooting purposes.

[0086] The controller has logic 205 for managing all information contained in the system state, templates, and global system rules. The controller logic 205, global system rule database 210, IT system state 220, and templates 230 are managed by the controller 200 and may or may not reside on the controller 200. The controller logic or application 205, global system rule database 210, IT system state 220, and templates 230 may be physical or virtual and may or may not be distributed services, distributed databases, and / or files. The API application 120 may be included with the controller logic / controller application 205.

[0087] The controller 200 may run a standalone machine and / or may include one or more controllers. The controller 200 may include a controller service or application and may run in another machine. The controller machine may start the controller service first to ensure that the boot of the entire stack or a group of stacks is ordered and / or consistent.

[0088] The controller 200 may control one or more stacks having computational, storage, and networking resources. Each stack may or may not be controlled by a different subset of rules in the global system rules 210. For example, there may be pre-built, build, development, test stacks, parallel, backup, and / or other stacks with different functions within the system.

[0089] The controller logic 205 may be configured to read and interpret the global system rules to achieve a desired IT system state. The controller logic 205 may be configured to use templates according to the global rules to build system components, such as applications or services, and allocate, add, or remove resources to achieve a desired IT system state. The controller logic 205 may read the global system rules, develop a task list to reach the correct state, and issue instructions to satisfy the rules based on available operations. The controller logic 205 may include logic to perform operations, such as to start the system, add, remove, reconfigure resources, and identify what is available to do so. Upon start-up and at regular intervals, the controller logic may check the system state to see if hardware is available, and if so, may perform the task. If the required hardware is not available, the controller logic 205 may use the available hardware from the global system rules 210, templates 220, and system state 230 to present alternative options and modify the global rules and / or system state 220 accordingly.

[0090] The controller logic 205 may know what variables are needed, what the user needs to input to continue, or what the user needs in the system to function. The controller logic may use the list of templates from the global system rules and may compare with the templates required in the system state to ensure that the required templates are available. The controller logic 205 may identify from the system state database whether resources on the template-specific list of supported resources are available. The controller logic may allocate resources, update the state, and proceed to the next set of tasks to implement the global rules. The controller logic 205 may start / run the application on the allocated resources as specified in the global rules. The rules may specify how to build the application from the templates. The controller logic 205 may get the template(s) and may configure the application from the variables. The templates may inform the controller logic 205 what kernel, boot files, file systems, and supported hardware resources are required. The controller logic 205 may then add information about the application deployment to the system state database. After each instruction, the controller logic 205 may check the system state database against the predicted states of the global rules to verify that the predicted actions were completed correctly.

[0091] The controller logic 205 may use the version according to the version rules. The system state 220 may have a database that correlates which rule versions are being used in different deployments.

[0092] The controller logic 205 may include efficiency logic and efficiency ordering for rule optimization. The controller logic 205 may be configured to optimize resources. System state information, rules, and templating related to running or predicted running applications may be used by the controller logic to implement efficiency or prioritization for resources. The controller logic 205 may use information in "used resources" in system state 220 to determine the efficiency or need to switch resources for upgrade, reclamation, or another purpose.

[0093] The controller may check the running applications according to the system state 220 and compare the execution of global rules to the predicted applications. If the application is not running, it may be started. If the application should not be running, it may be stopped and resources may be reallocated if appropriate. The controller logic 205 may include a database of resource (compute, storage, networking) specifications. The controller logic may include logic to recognize the resource types available to the system that can be used. This may be performed using the out-of-band management network 260. The controller logic 205 may be configured to recognize new hardware using the out-of-band management 260. The controller logic 205 may also retrieve information about the history of changes, rules used, and versions from the system state 220 for auditing, building reports, and change management purposes.

[0094] FIG. 2F illustrates an exemplary process flow of controller logic 205 for processing template 230 and deriving an image for booting, powering on, and / or enabling resources, which for this exemplary purpose may be referred to as hosts. This process may also include configuring storage resources and binding storage and compute hosts and / or resources. Controller logic 205 keeps track of hardware resources available in system 100, and system rules 210 may indicate which hardware resources are available. Controller logic 205 parses template 230, at step 205.1, which may include an instruction file that may be executed to cause controller logic to collect files that are outside of template 230 shown in FIG. 2E. The instruction file may be in json format. At step 205.2, controller logic collects a list of required file buckets. Also, in step 205.3, the controller logic 205 collects in a bucket the necessary hardware-specific files that are referenced by the hardware and, optionally, by the hypervisor (or container host system, multi-tenancy type), which may be necessary if the hardware is to run on a virtual machine.

[0095] If hardware-specific files are present, the controller logic collects the hardware-specific files in step 205.4. In some cases, the file system image may include the kernel and initramfs along with a directory containing the kernel modules (or kernel modules that are ultimately placed in a directory). The controller logic 205 then selects an appropriate base image that is compatible in step 205.5. The base image includes operating system files that may not be specific to the application or image derived from the template 230. Compatibility in this context means that the base image includes the files necessary to turn the template into a working application. The base image may be managed outside of the template as a mechanism to save space (and in many cases the base image may be the same for several applications or services). Additionally, in step 205.6, the controller logic 205 selects the bucket(s) that have the executables, source code, and hardware-specific configuration files. The template 230 may reference other files, including but not limited to configuration files, configuration file templates (which are configuration files that contain placeholders or variables filled by variables in the system rules 210 that may be made known in the template 230 so that the controller 200 can turn the configuration template into a configuration file and, optionally, modify the configuration file through an API endpoint), binaries, and source code (which may be compiled when the image is booted). In step 205.7, hardware specific instructions corresponding to the elements selected in steps 205.4, 205.5, and 205.6 may be loaded as part of the image to be booted. The controller logic 205 derives the image from the selected components. For example, there may be different pre-install scripts for physical hosts versus virtual machines, or differences for Powerpc versus x86.

[0096] In step 205.8, controller logic 205 mounts the overlayfs and repackages the target files into a single filesystem blob. When multiple filesystem blobs are used, an image may be created with the multiple blobs, unpacking the tarball, and / or fetching the git. If step 205.8 is not performed, the filesystem blobs may remain separate and an image is created as a set of filesystem blobs and mounted using a filesystem that can mount multiple smaller filesystems together (such as overlayfs). Controller logic 205 may then find a compatible kernel (or a kernel specified in system rules 210) in step 205.9 and an applicable initrd in step 205.10. A compatible kernel may be a kernel that satisfies the dependencies of the template and the resources used to implement the template. A compatible initrd may be an initrd that loads the template into the desired computing resource. In many cases, an initird may be used for physical resources so that storage resources can be mounted before a full boot (since the root filesystem may be remote). The kernel and initrd may be packaged into a filesystem blob, which may be used for direct kernel boot using kexec or on the physical host to change the kernel on the running system after booting a spare operating system.

[0097] The controller then configures the storage resource(s) to enable the compute resource(s) to run the application(s) and / or image(s) using any of the techniques indicated by 205.11, 205.12, and / or 205.13. Per 205.11, an overlayfs file can be provided as a storage resource. Per 205.12, a file system is presented. For example, a storage resource may present multiple file system blobs that the compute resource may mount simultaneously using a combined file system or file systems similar to overlayfs. Per 205.13, the blobs are sent to the storage resource before presenting the file system.

[0098] 2G and 2H show an example process flow for steps 205.11 and 205.12 of FIG. 2F. Additionally, the system may employ processes and rules for connecting computer resources to storage resources, which may be referred to as a storage connection process. Examples of such storage connection processes in addition to the processes shown by FIG. 2G and 2H are provided in Appendix A included with the specification. FIG. 2G shows an example process flow for connecting storage resources. Some storage resources may be read-only and others may be writable. Storage resources may manage their own write locks so that there are no simultaneous writes that would create a race condition, or system state 220 may track which connections may write to a storage resource (see, e.g., step 205.20) and / or may prevent multiple read-write connections to a resource (step 205.21). The controller logic or the resource itself may query the controller's system state 220 for the location and transport type of the storage resource (e.g., Internet Small Computer System Interface (ISCSI, iSCSI, or iscsi), ISCSI Extensions for Remote Direct Memory Access (RDMA or rdma) (ISER, iSER, or iser), Non-Volatile Memory Express over Fabrics (NVMEOF or nvmeof), Fibre Channel (FC or fc), Fibre Channel over Ethernet (FCOE, FCoE, or fcoe), Network File System (NFS or nfs), nfs over rdma, Andrew File System (AFS or afs), Common Internet File System (CIFS or cifs), windows share) (step 205.22). If the compute resource is virtual, the hypervisor (e.g., via a hypervisor daemon) may handle the connection to the storage resource (step 205.23). This may have desirable security benefits since the virtual machine may not be aware of the SAN 280.

[0099] The process of connecting the computational and storage resources may be directed in the system rules 210, see step 205.24. The controller logic then verifies that the resources are available and can be written to if necessary by querying the system state 220 (step 205.22). The system state 220 may be queried via any of a number of techniques, such as an SQL query (or other type of database query), JSON parsing, etc. The query returns the information the computational resource needs to connect to the storage resource. The controller 200, the system state 220, or the system rules 210 may provide authentication credentials for the computational resource to connect to the system state (step 205.25). The computational resource then updates the system state 220, either directly or via the controller (step 205.26).

[0100] FIG. 2H illustrates an exemplary boot process for a physical, virtual, or other type of computing resource, application, service, or host to power up and connect to a storage resource. The storage resource may optionally utilize a fused file system and / or an expandable volume. In situations where a controller or other system enables a physical host, the physical host may be preloaded with an operating system to configure the system. Thus, in step 205.31, the controller may preload a boot disk with an initramfs. The controller 200 may also network boot a spare operating system using the out-of-band management connection 260 (step 205.30), and then optionally preload the host with the spare operating system (step 205.31). The initramfs is then loaded in step 205.32, and the storage resource is connected in step 205.33 using the method illustrated in FIG. 2G. Next, if an expandable volume exists, the subvolumes or devices that are combined together are optionally assembled into a volume group in step 205.34 if logical volume management (LVM) is in use, or they may be combined using other methods of combining disks in step 205.34.

[0101] If a merged file system is used, then in step 205.36 the files may be combined and then the boot process may continue (step 205.46). If overlayfs is used in linux to fix some known issues, the following sub-processes may be performed: A / data directory may be created in each mounted file system blob, which may be volatile (step 205.37). Then, in step 205.38 a new_root directory may be created and in step 205.39 the overlayfs is mounted to the directory. Then initramfs runs exec_root on / new_root (step 205.40).

[0102] If the host is a virtual machine (VM), additional tools such as direct kernel boot may be available. In this situation, the hypervisor may connect to storage resources before booting the VM (step 205.41) or may do this while booting. The VM may then be direct kernel booted along with loading an initramfs (step 205.42). The initramfs then loads in step 205.43 and the hypervisor may connect to storage resources, which may be remote at this point (step 205.44). For this to be accomplished, the hypervisor host may need to pass in an interface (e.g., if inifiniband is needed to connect to an iSER target, it may pass in an SR-IOV based virtual function using pci-passhtru, or in some circumstances may use a paravirtualized network interface). Those connections are available through the initramfs. The virtual machine may then connect to storage resources in step 205.45 if not already connected. A virtual machine may also receive its storage resources through the hypervisor (optionally through paravirtualized storage). The process may optionally be similar for virtual machines mounting blended file systems and LVM style disks.

[0103] FIG. 2O illustrates an exemplary process flow for constructing storage resources from filesystem blobs or other groups of files, as at 205.13. The blobs may be collected in step 205.75 and copied directly to the storage resource host in 205.73 (if the storage resource host is different from the device that holds the filesystem blobs 232). Once the storage resources are in place, the system state is then updated in 205.74 with the location of the storage resources and the available transport (e.g., iSER, nvmeof, iSCSI, FcoE, Fibre Channel, nfs, nfs over rdma). Some of those blobs may be read-only, in which case the system state remains the same and new compute resources or hosts may connect to that read-only storage resource (e.g., when connecting to a base image). In some cases, it may be desirable to put the files into a single filesystem image to avoid any merging filesystem overhead, as shown in 205.70. This may be accomplished by mounting the blobs as a fused file system (step 205.71), then copying them to a new file system or repackaging them as a single file system (step 205.72), and then optionally copying the new file system image to an appropriate location for it to be presented as a storage resource. Some fused file systems may allow the merging to occur without first mounting in step 205.71, allowing the fused file systems to be merged in a single step.

[0104] FIG. 2I illustrates another exemplary template 230 as shown in FIG. 2E. In this example, the controller may be configured to use the template 230 as shown in FIG. 2I using an intermediate configuration tool. According to an exemplary embodiment, the intermediate configuration tool may include a common API that is used to bind the new application or service with the depended-on application or service. Thus, the template 230 may additionally include a dependency list 244 that may be required for the setup of the template's services. The template 230 may also include connection rules 245 that may include calls to the common APIs of the dependencies. The template 230 may also include one or more common APIs 243 and a list 242 of common APIs and versions. The common API 243 may have methods, functions, scripts, or instructions that may be callable (or not) from the application or controller that allow the controller to configure the depended-on application or service, so that the depended-on application or service may be bound to the new application built by the template 230. The controller may communicate with the common API 243 and / or make API calls to configure the binding of the new service or application with the dependent service or application. Alternatively, the instructions may enable the application or service to directly communicate with and / or send calls to the common API 243 on the depended upon application or service. The connection rules 245 of the template 230 are a set of rules and / or instructions that may include API calls for connecting the new service or application with the dependent service or application.

[0105] The system state 220 may further include a list 246 of running services, which may be queried by the controller logic 205 to seek to satisfy dependencies 244 from the templates 230. The controller may also include a list 247 of various common APIs available for a particular service / application or type of service / application, and may also include templates that include the common APIs. The list may reside in the controller logic 205, the system rules 210, the system state 220, or in template storage that the controller has access to. The controller also maintains an index 248 of common APIs compiled from all existing or loaded templates.

[0106] FIG. 2J illustrates an example process flow for the controller logic 205 processing the template 230 as illustrated by FIG. 2F, but in step 255, the controller manages service dependencies. FIG. 2K illustrates an example process flow for step 255 of FIG. 2J. In step 255.1, the controller collects the dependency list 244 from the template. The controller also collects the list of common APIs 243 from the template. (A) In step 255.2, the controller narrows down the list of possible depended-on applications or services by comparing the list of common APIs 243 from the template with the index of common APIs 248 and based on the type of application or service that is considered to satisfy the dependency. In step 255.3, the controller determines whether the system rules 210 specify a manner in which the dependency is satisfied.

[0107] If yes at step 255.3, the controller determines whether the dependent service or application is running by querying a list of running templates (step 255.4). If no at step 255.4, the service application is executed (and / or configured and then executed) (step 255.5), which may include controller logic processing the template of the dependent service / application. If the dependent service or application is determined to be running at step 255.4, the process flow proceeds to step 255.6. At step 255.6, the controller uses the template to bind the new service or application to be built to the dependent service or application. When binding the new service or application to the depended upon application / service, the controller considers the template it is processing and executes the connection rules 245. The controller sends commands to the common API 243 on how to satisfy the dependency 244 and / or how to bind the application / service based on the connection rules 245. The common API 243 translates instructions from the controller that may include, but are not limited to, calling API functions of the services, changing configurations, executing scripts, calling other programs, connecting the new service or application with the applications or services that are relied upon. Following step 255.6, process flow proceeds to step 205.2 of Figure 2J.

[0108] If step 255.3 determines that the system rules 210 do not specify a manner in which the dependency is satisfied, then the controller queries the system state 220 to see if the appropriate depended-on application or service is running, at step 255.7. In step 255.8, the controller bases its determination on the query as to whether the appropriate depended-on application or service is running. If no in step 255.8, the controller notifies an administrator or user of the action (step 255.9). If yes in step 255.8, the process flow proceeds to step 255.6, which may operate as described above. The user may optionally be queried as to whether the new application should connect to the running depended-on application, in which case the controller may bind the new application or service to the depended-on application or service, at step 255.6, as follows: the controller considers the template 230 it is processing and executes the connection rules 245. The controller then sends commands to the common API 243 based on connection rules 245 as to how to satisfy the dependencies 244. The common API 243 translates the instructions from the controller that connect the new service or application with the depended-on application or service.

[0109] A user, through an external user interface or web UI, or an application, communicates with the controller 200 through an API application 120 which may also be incorporated into the controller application or logic 205 .

[0110] The controller 200 communicates with the stacks or resources by one or more of a number of networks, interconnects, or other connections through which the controller can direct the computational, storage, and networking resources to operate. Such connections may include an out-of-band management connection 260, an in-band management connection 270, a SAN connection 280, and an optional network in-band management connection 290.

[0111] Out-of-band management may be used by the controller 200 to discover, configure, and manage components of the system 100 through the controller 200. Out-of-band management connections 260 may enable the controller 200 to discover resources that are plugged in and available, but not turned on. When a resource is plugged in, it may be added to the IT system state 220. Out-of-band management may be configured to load boot images, configure, and monitor resources belonging to the system 100. Out-of-band management may also boot temporary images for diagnostics of the operating system. Out-of-band management may be used to change BIOS settings and may use console tools to execute commands on a running operating system. Settings may also be changed by the controller using visual recognition of the console, keyboard, and video signals from physical or virtual monitor ports on hardware resources such as VGA, DVI, or HDMI ports, and / or using APIs provided by the out-of-band management, e.g., Redfish.

[0112] Out-of-band management as used herein may include, but is not limited to, a management system capable of connecting to a resource or node independent of the operating system and main motherboard. Out-of-band management connections 260 may include a network or multiple types of direct or indirect connections or interconnections. Examples of types of out-of-band management connections include, but are not limited to, IPMI, Redfish, SSH, telnet, other management tools, keyboard video and mouse (KVM) or KVM over IP, serial console, or USB. Out-of-band management is a tool that may be used over a network that can power a node or resource on or off, monitor temperatures and other system data, make BIOS and other low-level changes that may be outside the control of the operating system, connect to a console to send commands, and control inputs including, but not limited to, a keyboard, mouse, and monitor. Out-of-band management may be coupled to out-of-band management circuitry within a physical resource. Out-of-band management may connect a disk image as a disk that may be used to boot installation media.

[0113] A management network or in-band management connection 270 may enable a controller to gather information about computational, storage, networking, or other resources and communicate directly to the operating systems on which the resources are running. Storage, computational, or networking resources may include a management interface that interfaces with connections 260 and / or 270, so that they can communicate with the controller 200, inform the controller of what is running and available about the resource, and receive commands from the controller. An in-band management network as used herein includes a management network that can communicate directly with the resource and the operating system of the resource. Examples of in-band management connections may include, but are not limited to, SSH, telnet, other management tools, serial console, or USB.

[0114] Although out-of-band management is described herein as a network that is physically or virtually separate from the in-band management network, they may be combined with each other for efficiency or work in concert with each other, as described in more detail herein. Also, out-of-band and in-band management or aspects thereof may communicate through the same port of the controller, or may be combined with a combined interconnect, accordingly. Optionally, one or more of the connections 260, 270, 280, 290 may be separate or combined from others of such networks, and may or may not include the same fabric.

[0115] Additionally, the computing resources, storage resources, and controller may or may not be coupled to a storage network (SAN) 280 in a manner that allows the controller 200 to use the storage network to boot each resource. The controller 200 may send a boot image or other template to a separate storage or other resource so that the other resource can boot from the storage or other resource. The controller may instruct where to boot from in such a situation. The controller may power on the resource and instruct the resource where to boot from and how to configure itself. The controller 200 instructs the resource how to boot, which image to use, and where the image is located if it is on another resource. The BIOS resource may be pre-configured. The controller may additionally or alternatively configure the BIOS through out-of-band management so that the BIOS boots from a storage area network. The controller 200 may also be configured to boot an operating system from an ISO and allow the resource to copy the data to a local disk. The local disk may then be used to subsequently boot. A controller may configure other resources, including other controllers, so that the resources can boot. Some resources may include applications that provide computing, storage, or networking capabilities. Additionally, a controller may boot up a storage resource and then have the storage resource serve to provide the boot images for subsequent resources or services. Storage may also be managed through a different network that is used for another purpose.

[0116] Optionally, one or more of the resources may be coupled to a network in-band management connection 290. The connection 290 may include one or more types of in-band management such as those described with respect to the in-band management connection 270. The connection 290 may connect the controller to an application network to utilize or manage the network through an in-band management network.

[0117] FIG. 2L shows an image 250 that can be loaded from template 230 to a resource directly or indirectly (through another resource or database) to boot the resource or an application or service loaded on the resource. Image 250 can include boot files 240 for the resource type and hardware. Boot files 240 can include kernels 241 corresponding to the resource, application, or service to be deployed. Boot files 240 can also include an initrd or similar file system used to assist the boot process. Boot system 240 can include multiple kernels or initrds configured for different hardware and resource types. Additionally, image 250 can include file systems 251. File systems 251 can include base image 252 and corresponding file systems, service image 253 and corresponding file systems, and volatile image 254 and corresponding file systems. The file systems and loaded data can vary depending on the resource type and the application or service being run. Base image 252 can include a base operating system file system. The base operating system can be read-only. Base image 252 can also include the basic tools of an operating system independent of the one being run. The base image 252 may contain base directories and operating system tools. The service file system 253 may contain configuration files and specifications for resources, applications, or services. The volatile file system 254 may contain information or data specific to the deployment, such as application binaries, specific addresses, and other information, which may or may not be configured as variables, including but not limited to passwords, session keys, and private keys.File systems may be mounted as one single file system using technologies such as overlayFS to allow some read-only and some read-write file systems to reduce the amount of duplicate data used for applications.

[0118] As described above, the controller 200 can be used to add resources, such as compute, storage, and / or networking resources, to the system. FIG. 11A illustrates an exemplary method of adding a physical resource, such as a bare metal node, to the system 100. A resource, i.e., a compute, storage, or networking resource, is plugged into the controller by a network connection (1110). The network connection may include an out-of-band management connection. The controller recognizes that the resource has been plugged in through the out-of-band management connection (1111). The controller recognizes information related to the resource, which may include, but is not limited to, the type, capabilities, and / or attributes of the resource (1112). The controller adds the resource and / or the information related to the resource to its system state (1113). An image derived from the template is loaded into the physical components of the system, which may include, but is not limited to, the resource, another resource, such as a storage resource, or a controller (1114). The image includes one or more file systems, which may include configuration files. Such configuration may include BIOS and boot parameters. The controller instructs the physical resource to boot using the image's file system, 1115. Additional resources, or multiple bare metal or physical resources of different types, may be added in this manner using the template's image, or at least a portion thereof.

[0119] 11B illustrates an exemplary method for automatically allocating resources using global system rules and templates in an exemplary embodiment. A request is made to the system that requires resource allocation to fulfill the request (1120). The controller knows its resource pool based on its system state database (1121). The controller uses the template to determine the required resources (1122). The controller allocates the resources and stores the information in the system state (1123). The controller deploys the resources using the template (1124).

[0120] Referring to Figure 12, an exemplary method for automatically deploying an application or service using the system 100 described herein is shown. A user or application requests a service (1210). The request is translated to an API application (1220). The API application routes the request to a controller (1230). The controller interprets the request (1240). The controller considers the state of the system and its resources (1250). The controller uses its rules and templates for service deployment (1260). The controller sends the request to the resources (1270) and deploys an image derived from the template (1280) to update the IT system state.

[0121] Additional and more detailed examples of operations such as adding resources, allocating resources, and deploying applications or services are described in further detail below.

[0122] Adding Computing Resources to the System 3A, the addition of a computational resource 310 to the system 100 is shown. When the computational resource 310 is added, it may be coupled to the controller 200 and powered off. If the computational resource 310 is preloaded with an image, an alternative step may follow in which any of the network connections may be used to communicate with the resource, boot the resource, and add information to the system state. If the computational resource and the controller are on the same node, the service running the computational resource is off.

[0123] As shown in FIG. 3A, the computing resource 310 is coupled to the controller by networks: out-of-band management connection 260, in-band management connection 270, and optionally, SAN 280. The computing resource 310 is also coupled to one or more application networks 390 through which services, application users, and / or clients can communicate with each other. The out-of-band management connection 260 may be coupled to a separate out-of-band management device 315 or circuitry of the computing resource 310 that is turned on when the computing resource 310 is plugged in. The device 415 may enable features including, but not limited to, powering the device on / off, attaching to a console and typing commands, monitoring temperature and other computer health related factors, and setting BIOS settings and other features outside the scope of the operating system. The controller 200 can see the computing resource 310 through the out-of-band management network 260. The controller 200 may also use in-band or out-of-band management to identify the type of computing resource and identify its configuration. The controller logic 205 is configured to check the out-of-band management 260 or in-band management 270 for added hardware. If a computational resource 310 is detected, the controller logic 205 may use the global system rules 220 to determine if the resource is configured automatically or by interacting with a user. If the resource is added automatically, the setup follows the global system rules 210 in the controller 200. If the resource is added by a user, the global system rules 210 in the controller 200 may query the user to confirm the addition of the resource and what the user wants to do with the computational resource. The controller 200 may query the API application(s) or otherwise request confirmation that the new resource has been approved from the user or any program controlling the stack.The authorization process may also be completed automatically and securely using cryptography to verify the legitimacy of the new resource. The controller logic 205 adds the computational resource 310 to the IT system state 220, including the switch or network into which the computational resource 310 is plugged.

[0124] If the computing resource is physical, the controller 200 may power on the computing resource through the out-of-band management network 260, and the computing resource 310 may boot from an image 350 loaded from the template 230, for example, by the SAN 280, using the global system rules 210 and the controller logic 205. The image may be loaded indirectly through other network connections or by another resource. Once booted, information related to the computing resource 310 received through the in-band management connection 270 may also be collected and added to the IT system state 220. The computing resource 310 may then be added to a storage resource pool and becomes a resource managed by the controller 200 and tracked in the IT system state 220.

[0125] If the computing resource is virtual, the controller 200 may power on the computing resource through the in-band management network 270 or through the out-of-band management 260. The computing resource 310 may boot from an image 350 loaded from the template 230, for example, by the SAN 280, using the global system rules 210 and the controller logic 205. The image may be loaded indirectly through other network connections or by another resource. Once booted, information related to the computing resource 310 received through the in-band management connection 270 may also be collected and added to the IT system state 220. The computing resource 310 may then be added to a storage resource pool and becomes a resource managed by the controller 200 and tracked in the IT system state 220.

[0126] The controller 200 may be capable of automatically turning resources on and off and updating the IT system state according to global system rules for reasons determined by the IT system user, such as turning resources off to conserve power or turning resources on to improve application performance, or for any other reason the IT system user may have.

[0127] FIG. 3B illustrates an image 350 that is loaded directly or indirectly (through another resource or database) from the template 230 onto the computing resource 310 to boot the computing resource and / or load an application. The image 350 may include a boot file 340 for the resource type and hardware. The boot file 340 may include a kernel 341 corresponding to the resource, application, or service to be deployed. The boot file 340 may also include an initrd or similar file system used to assist the boot process. The boot system 340 may include multiple kernels or initrds configured for different hardware and resource types. Additionally, the image 350 may include a file system 351. The file system 351 may include a service image 353 and corresponding file systems, and a volatile image 354 and corresponding file systems, along with a base image 352 and corresponding file systems. The file systems and loaded data may vary depending on the resource type and the running application or service. The base image 352 may include a file system of a base operating system. The base operating system may be read-only. The base image 352 may also contain the basic tools of an operating system independent of what is being executed. The base image 352 may include base directories and operating system tools. The service file system 353 may contain configuration files and specifications for resources, applications, or services. The volatile file system 354 may contain information or data specific to the deployment, such as application binaries, specific addresses, and other information, which may or may not be configured as variables, including but not limited to passwords, session keys, and private keys.File systems may be mounted as one single file system using technologies such as overlayFS to allow some read-only and some read-write file systems to reduce the amount of duplicate data used for applications.

[0128] FIG. 3C illustrates an exemplary process flow for adding a resource, such as a computing resource 310, to the system 100. In this example, the target resource is described as a computing resource 310, but it should be understood that the target resource for the process flow of FIG. 3C may be a storage resource 410 and / or a networking resource 510. In the example of FIG. 3C, the resource 310 being added is not on the same node as the controller 200. In step 300.1, the resource 310 is coupled to the controller 200 in a powered off state. In the example of FIG. 3C, an out-of-band management connection 260 is used to connect the resource 310. However, it should be understood that other network connections may be used as required by the implementer. In steps 300.2 and 300.3, the controller logic 205 checks the out-of-band management connection of the system and uses the out-of-band management connection 260 to recognize and identify the type of the resource 310 being added and its configuration. For example, the controller logic may check the BIOS or other information about the resource (such as serial number information) as a reference to obtain type and configuration information.

[0129] In step 300.4, the controller uses global system rules to determine whether a particular resource 310 should be automatically added. If not, the controller waits until its use is approved (step 300.5). For example, a user may respond to a query that they do not want to use a particular resource 310, or that it may be automatically withheld until it is to be used in step 300.4. If step 300.4 determines that the resource 310 should be automatically added, the controller uses the rules for automatic setup (step 300.6) and proceeds to step 300.7.

[0130] In step 300.7, the controller selects and uses a template 230 associated with the resource to add the resource to the system state 220. In some cases, the template 230 may be specific to a particular resource. However, some templates 230 may cover multiple resource types. For example, some templates 230 may be hardware independent. In step 300.8, the controller powers on the resource 310 through its out-of-band management connection 260 according to the global system rules 210. In step 300.9, using the global system rules 210, the controller finds and loads a boot image for the resource from the selected template(s). The resource 310 is then booted from an image derived from the target template 230 (step 300.10). Additional information about the resource 310 may then be received from the resource 310 through the in-band management connection 270 after the resource 310 has been booted (step 300.11). Such information may include, for example, firmware versions, network cards, any other devices to which the resource may be attached. In step 300.12, the new information may be added to the system state 220. The resource 310 may then be considered to be added to a resource pool and is prepared for allocation (step 300.13).

[0131] With respect to FIG. 3C, it should be understood that if the resource and the controller are on the same node, the service running the resource may be outside of that node. In such a case, the controller may use an inter-process communication technique with the resource, such as, for example, a unix socket, loopback adapter, or other inter-process communication technique to communicate with the resource. From the system rules, the controller may install a virtual host, or a hypervisor or container host, from the controller to run the application using a known template. The resource application information can then be added to the system state 220, and the resource will be ready for allocation.

[0132] Adding storage resources to a system 4A illustrates the addition of a storage resource 410 to system 100. In an exemplary embodiment, the exemplary process flow of FIG. 3C may be followed to add a storage resource 410 to system 100, where the storage resource 410 being added is not on the same node as controller 200. It should also be noted that if the storage resource 410 is preloaded with an image, alternative steps may be followed that may use any of the network connections to communicate with the storage resource 410, boot the storage resource 410, and add information to system state 220.

[0133] When a storage resource 410 is added, the storage resource 410 may be coupled to the controller 200 and powered off. The storage resource 410 is coupled to the controller via a network: an out-of-band management network 260, an in-band management connection 270, a SAN 280, and optionally a connection 290. The storage resource 410 may or may not also be coupled to one or more application networks 390 through which services, application users, and / or clients can communicate with each other. An application or client may have direct or indirect access to the resource's storage through the application, whereby the application or client is not accessed through a SAN. An application network may have storage built into it, or may be accessed and identified as a storage resource in the IT system state. The out-of-band management connection 260 may be coupled to a separate out-of-band management device 415 or circuitry of the storage resource 410 that is turned on when the storage resource 410 is plugged in. The device 415 may enable features including, but not limited to, powering the device on / off, attaching to a console and typing commands, monitoring temperature and other computer health related factors, and setting BIOS settings and other features outside of the operating system. The controller 200 may reference the storage resource 410 through the out-of-band management network 260. The controller 200 may also identify the type of storage resource and may identify its configuration using in-band or out-of-band management. The controller logic 205 is configured to look at the out-of-band management 260 or in-band management 270 for added hardware. If a storage resource 410 is detected, the controller logic 205 may use the global system rules 220 to determine if the resource 410 should be configured automatically or through user interaction.If the resource 410 is added automatically, the setup follows the global system rules 210 in the controller 200. If the resource 410 is added by a user, the global system rules 210 in the controller 200 may ask the user to confirm the addition of the resource and what the user wants to do with the storage resource. The controller 200 may query the API application(s) or otherwise request the user or any program controlling the stack for confirmation that the new resource has been approved. The approval process may also be completed automatically and securely using cryptography to verify the legitimacy of the new resource. The controller logic 205 adds the storage resource 410 to the IT system state 220, including the switch or network to which the storage resource 410 is plugged.

[0134] The controller 200 may power on the storage resource 410 through the out-of-band management network 260, and the storage resource 410 boots from an image 450 loaded from the template 230, for example, via the SAN 280, using the global system rules 210 and the controller logic 205. The image may also be loaded through other network connections or indirectly through another resource. Once booted, information received through the in-band management connection 270 regarding the storage resource 410 may also be collected and added to the IT system state 220. The storage resource 410 is now added to the storage resource pool, and the storage resource 410 becomes a resource managed by the controller 200 and tracked in the IT system state 220.

[0135] A storage resource may comprise a storage resource pool or multiple storage resource pools that an IT system may use or access independently or simultaneously. When a storage resource is added, the storage resource may provide a storage pool, multiple storage pools, a portion of a storage pool, and / or multiple portions of a storage pool to the IT system state. A controller and / or storage resource may manage various storage resources in a pool, or a group of such resources within a pool. A storage pool may include multiple storage pools running on multiple storage resources. For example, a flash storage disk or array caching platter disk or array, or a storage pool on a dedicated compute node coupled to a pool on a dedicated storage node optimizes bandwidth and latency simultaneously.

[0136] FIG. 4B illustrates an image 450 that is loaded directly or indirectly from template 230 (from another resource or database) into storage resource 410 to boot the storage resource and / or load an application. Image 450 may include boot files 440 for a resource type and hardware. Boot files 440 may include kernels 441 corresponding to the resource, application, or service to be deployed. Boot files 440 may also include an initrd or similar file system used to assist the boot process. Boot system 440 may include multiple kernels or initrds configured for different hardware and resource types. Additionally, image 450 may include file systems 451. File systems 451 may include service images 453 and corresponding file systems, and volatile images 454 and corresponding file systems, along with base images 452 and corresponding file systems. The file systems and data loaded may vary depending on the resource type and the application or service to be run. Base image 452 may include a base operating system file system. The base operating system may be read-only. Base image 452 may also include the basic tools of an operating system that are independent of what is being run. Base image 452 may include base directories and operating system tools. Service file system 453 may include configuration files and specifications for resources, applications, or services. Volatile file system 454 may include information or data specific to the deployment, such as application binaries, specific addresses, and other information, which may or may not be configured as variables, including but not limited to passwords, session keys, and private keys.File systems may be mounted as one single file system using technologies such as overlayFS to allow some read-only and some read-write file systems to reduce the amount of duplicate data used for applications.

[0137] 5A illustrates an example in which another storage resource, direct attached storage 510, which may take the form of a node with a JBOD or other type of direct attached storage, is coupled to storage resource 410 as an additional storage resource for the system. A JBOD is typically an external disk array connected to a node that provides a storage resource, and while a JBOD is used in FIG. 5A as an exemplary form of direct attached storage 510, it should be understood that other types of direct attached storage may be employed as 510.

[0138] Controller 200 may add storage resources 410 and JBODs 510 to its system, for example, as described with respect to FIG. 5A. JBODs 510 are coupled to controller 200 via out-of-band management connections 260. Storage resources 410 are coupled to the network, namely, out-of-band management connections 260, in-band management connections 270, SAN 280, and optionally, connections 290. Storage nodes 410 communicate with the storage of JBODs 510 through a SAS or other disk drive fabric 520. JBODs 510 may also include an out-of-band management device 515 that communicates with the controller through out-of-band management connections 260. Through out-of-band management 260, controller 200 may discover JBODs 510 and storage resources 410. Controller 200 may also discover other parameters not controlled by the operating system, for example, as described herein with respect to various out-of-band management circuits. The controller 200 global system rules 210 provide configuration start-up rules for booting or starting up JBODs and storage nodes that have not yet been added. The order of turning on storage resources may be controlled by the controller logic 205 using global rules 220. According to one set of global system rules 220, the controller may first power on the JBOD 510, and then the controller 200 may power on the storage resources using the loaded image 450 in a manner similar to that described with respect to FIG. 4. In another set of global system rules, the controller 200 may first power on the storage resources 410 and then the JBOD 510. Other global system rules may specify power-on timing or delays between various devices. The controller logic 205, global system rules 210, and / or templates 230 may determine the detection of the readiness or operational state of various resources and / or may be used in device allocation management by the controller 200.The IT system state 220 may be updated by communication with the storage resource 410. The storage node 410 is aware of the storage parameters and configuration of the JBOD 510 by accessing the JBOD through the disk fabric 520. The storage resource 410 then provides information to the controller 200 which updates the IT system state 220 with information regarding the amount of available storage and other attributes. The controller updates the IT system state 220 when the storage resource 410 is booted and recognized as part of the pool of storage resources 400 of the system 100. The storage node handles the logic for controlling the JBOD storage resource using the configuration set by the controller 200. For example, the controller may instruct the storage node to configure the JBOD to create a pool from a RAID10 or other configuration.

[0139] 5B illustrates an exemplary process flow for adding storage resource 410 and direct attached storage 510 for storage resource 410 to system 100. In step 500.1, direct attached storage 510 is coupled to powered off controller 200 via out-of-band management connection 260. In step 500.2, storage resource 410 is coupled to powered off controller 200 via out-of-band management connection 260 and in-band management connection 270 while simultaneously coupling storage resource 410 to direct attached storage 510 via SAS 520, e.g., a disk drive fabric.

[0140] Next, controller logic 205 may examine out-of-band management connection 260 to discover storage resources 410 and direct attached storage 510 (step 500.3). Any network connection may be used, but in this example, out-of-band management may be used for the controller logic to recognize and identify the types of resources being added (in this case storage resources 410 and direct attached storage 510) and their configurations (step 500.4).

[0141] In step 500.5, the controller 200 selects and uses a template 230 for a particular type of storage for each type of storage device to add the resources 410 and 510 to the system state 220. In step 500.6, the controller powers on the direct storage and storage nodes through the out-of-band management connection 260 in an order according to global system rules 210 that may specify a power-on boot order (500.6). Using the global system rules 210, the controller finds and loads a boot image for the storage resource 410 from the template 230 selected for that storage resource 410, and then the storage resource is booted from the image (step 500.7). The storage resource 410 is aware of the storage parameters and configuration of the direct attached storage 510 by accessing the direct attached storage 510 through the disk fabric 520. Additional information about the storage resource 410 and / or the direct attached storage 510 may then be provided to the controller through the in-band management connection 270 to the storage resource (step 500.8). In step 500.9, the controller updates the system state 220 with the information obtained in step 500.8. In step 500.10, the controller sets the configuration for the storage resources 410 that handle the direct attached storage 510 and how to configure the direct attached storage. Then, in step 500.11, the new resource comprising the storage resources 410 along with the direct attached storage 510 may be added to the resource pool and is ready to be allocated within the system.

[0142] According to another aspect of the example embodiment, the controller may use out-of-band management to be aware of other devices in the stack that may not be involved in the computations or services. For example, such devices may include, but are not limited to, cooling towers / air conditioners, lighting, temperature, sound, alarms, power systems, or any other devices associated with the system.

[0143] Adding networking resources to a system 6A illustrates the addition of a networking resource 610 to the system 100. In an exemplary embodiment, the exemplary process flow of FIG. 3C may be followed to add a networking resource 610 to the system 100, where the added networking resource 610 is not on the same node as the controller 200. It should also be noted that if the networking resource 610 is preloaded with an image, alternative steps may be followed to communicate with the network resource 610, boot the network resource 610, and add information to the system state 220 using any of the network connections.

[0144] When the networking resource 610 is added, the networking resource 610 may be coupled to the controller 200 and powered off. The networking resource 610 may be coupled to the controller 200 via connections, i.e., out-of-band management connection 260 and / or in-band management connection 270. The networking resource 610 is optionally connected to the SAN 280 and / or connection 290. The networking resource 610 may also be coupled to one or more application networks 390 through which services, application users, and / or clients may communicate with each other, or may not be coupled. The out-of-band management connection 260 may be coupled to a separate out-of-band management device 615 or circuitry of the networking resource 610 that turns on when the networking resource 610 is plugged in. The device 615 may enable features including, but not limited to, powering the device on / off, attaching to a console and typing commands, monitoring temperature and other computer health related factors, and setting BIOS settings and other features outside the scope of the operating system. The controller 200 may reference the networking resource 610 through the out-of-band management connection 260. The controller 200 may identify the type of networking resource and / or network fabric and may identify the configuration using in-band or out-of-band management. The controller logic 205 is configured to look at the out-of-band management 260 or in-band management 270 for added hardware. If the networking resource 610 is detected, the controller logic 205 may use the networking global system rules 220 to determine if the resource 610 should be configured automatically or by user interaction. If the resource 610 is added automatically, the setup follows the global system rules 210 in the controller 200. If added by a user, the global system rules 210 in the controller 200 may prompt the user to confirm the addition of the resource and what the user wants to do with the resource.The controller 200 may query the API application(s) or otherwise request a user or any program controlling the stack for confirmation that the new resources have been approved. The approval process may also be completed automatically and securely using cryptography to verify the legitimacy of the new resources. The controller logic 205 may then add the networking resources 610 to the IT system state 220. For switches that are unable to identify themselves to the controller, the user may manually add them to the system state.

[0145] If the networking resource is physical, the controller 200 may power on the networking resource 610 through the out-of-band management connection 260, and the networking resource 610 may boot from an image 605 loaded from the template 230, for example, via the SAN 280, using the global system rules 210 and the controller logic 205. The image may also be loaded through other network connections or indirectly through other resources. Once booted, information received through the in-band management connection 270 regarding the networking resource 610 may also be collected and added to the IT system state 220. The networking resource 610 is added to a storage resource pool, and the networking resource 610 becomes a resource managed by the controller 200 and tracked in the IT system state 220. Optionally, some networking resource switches may be controlled through a console port connected to the out-of-band management 260, may be configured at power on, or may have a switch operating system installed through a boot loader, for example, through ONIE.

[0146] If the networking resource is virtual, the controller 200 may power on the networking resource through the in-band management network 270 or through the out-of-band management 260. The networking resource 610 may boot from an image 650 loaded from the template 230 via the SAN 280 using the global system rules 210 and the controller logic 205. Once booted, information received through the in-band management connection 270 regarding the networking resource 610 may be collected and added to the IT system state 220. The networking resource 610 is then added to the storage resource pool and the networking resource 610 becomes a resource managed by the controller 200 and tracked in the IT system state 220.

[0147] The controller 200 may instruct a physical or virtual networking resource to assign, reassign, or move ports to connect to different physical or virtual resources, i.e., connectivity, storage, or compute as defined herein. This may be done using techniques including, but not limited to, SDN, Infiniband partitioning, VLAN, vXLAN. The controller 200 may instruct a virtual switch to move or assign virtual interfaces for network or interconnect communication with the virtual switch or the resource hosting the virtual switch. Some physical or virtual switches may be controlled by an API coupled to the controller.

[0148] When such a change is possible, the controller 200 may also instruct the compute, storage, or networking resources to change fabric types. A port may be configured to switch to a different fabric, for example, to switch between fabrics of a hybrid Infiniband / Ethernet interface.

[0149] The controller 200 may provide instructions to networking resources, which may include switches or other networking resources that switch between multiple application networks. The switches or network devices may comprise different fabrics or may be plugged into Infiniband switches, ROCE switches, and / or other switches, for example, preferably with SDN capabilities and multiple fabrics.

[0150] FIG. 6B illustrates an image 650 that is loaded directly or indirectly (e.g., via another resource or database) from template 230 onto networking resource 610 to boot the networking resource and / or load an application. Image 650 may include boot files 640 for the resource type and hardware. Boot files 640 may include kernels 641 corresponding to the resource, application, or service to be deployed. Boot files 640 may also include an initrd or similar file system used to assist the boot process. Boot system 640 may include multiple kernels or initrds configured for different hardware and resource types. Additionally, image 650 may include file systems 651. File systems 651 may include service images 653 and corresponding file systems, and volatile images 654 and corresponding file systems, along with base images 652 and corresponding file systems. The file systems and data loaded may vary depending on the resource type and application or service to be run. Base image 652 may include a base operating system file system. The base operating system may be read-only. The base image 652 may also include the basic tools of an operating system that are independent of what is running. The base image 652 may include base directories and operating system tools. The service file system 653 may include configuration files and specifications for resources, applications, or services. The volatile file system 654 may include information or data specific to the deployment, such as binary applications, specific addresses, and other information, which may or may not be configured as variables, including but not limited to passwords, session keys, and private keys.File systems may be mounted as one single file system using technologies such as overlayFS to allow some read-only and some read-write file systems to reduce the amount of duplicate data used for applications.

[0151] Deploying an application or service on a resource 7A illustrates a system 100 that includes a controller 200, physical and virtual computing resources including a first computing node 311, a second computing node 312, and a third computing node 313, storage resources 410, and network resources 610. The resources are shown as being set up and added to an IT system state 220 in a manner as described herein with respect to FIGS.

[0152] Although multiple computing nodes are shown in this figure, a single computing node may be used in accordance with certain example embodiments. The computing nodes may host physical or virtual computing resources and may execute applications on the physical or virtual computing nodes. Similarly, while a single network provider node and storage node are shown, it is contemplated that multiple resource nodes of these types may or may not be used in the system of example embodiments.

[0153] A service or application may be deployed in any of the systems according to the exemplary embodiment. An example of deploying a service on a computing node may be described with respect to FIG. 7A, but may be used in different configurations of the system 100 as well. For example, the controller 200 of FIG. 7A may automatically configure the computing resources 310 in the form of computing nodes 311, 312, 313 according to the global system rules 210. They may then be added to the IT system state 220. Thus, the controller 200 may be aware of the computing resources 311, 312, 313 (which may or may not be powered off) and, in some cases, any physical or virtual applications running on the computing resources or nodes. The controller 200 may automatically configure the storage resource(s) 410 and the networking resource(s) 610 according to the global system rules 210 and the templates 230 and may add them to the IT system state 220. The controller 200 may be aware of storage resources 410 and networking resources 610 that may or may not start in a powered off state.

[0154] FIG. 7B illustrates an exemplary process for adding a resource to IT system 100. At step 700.1, a new physical resource is coupled to the system. At step 700.2, the controller recognizes the new resource. The resource may be connected to remote storage (step 700.4). At step 700.3, the controller configures how to boot the new resource. All connections made to the resource may be logged in system state 220 (step 700.5). FIG. 3C, discussed above, provides further details regarding an exemplary embodiment of a process flow such as that shown in FIG. 7B.

[0155] 7C and 7D show an example process flow for deployment of an application to multiple computing resources, multiple servers, multiple virtual machines, and / or multiple sites. The process for this example differs from standard template deployment in the fact that IT system 100 requires components that combine redundant and interrelated applications and / or services. Controller logic may process a meta-template at step 700.11, where the meta-template may include multiple templates 230, file system blobs 232, and other components (which may be in the form of other templates 230) that are required to configure the multi-homed service.

[0156] At step 700.12, controller logic 205 checks system state 220 for available resources. However, if there are not enough resources, the controller logic may reduce the number of redundant services that may be deployed (see 700.16 where the number of redundant services is identified). At step 700.13, controller logic 205 configures the networking resources and interconnections needed to connect the services together. If the service or application is deployed across multiple sites, the meta template may include (or controller logic 205 may configure) services that are optionally configured from the template to enable data synchronization and interoperability across sites (see 700.15).

[0157] At step 700.16, controller logic 205 may determine the number of redundant services from system rules, meta template data, and resource availability (if redundant services are on multiple hosts). At 700.17, there is binding with other redundant services and binding with the master. If there are multiple redundant hosts, controller logic 205 or logic in the template (binaries 234, daemons 232, or file system blobs that may contain configuration files that direct settings in the operating system) may prevent conflicts in network addresses and hostnames. Optionally, the controller logic provides a network address (see 700.18) and registers each redundant service in DNS (700.19) and system state 220 (700.18). System state 220 keeps track of redundant services, and if it notices that a redundant service with conflicting parameters such as hostname (e.g., software defined access (SDA) name), dns name, network address, etc. is already in system state 220, controller logic 205 does not allow the duplicate registration.

[0158] The configuration routine illustrated in FIG. 7D processes the template(s) of the meta-template. The configuration routine processes all redundant services, deploys multi-host or clustered services to multiple hosts, and deploys services that combine hosts. Any process that can deploy IT systems from system rules can execute the configuration routine. For multi-host services, an exemplary routine may process the service template as in 700.32, provision storage resources as in 700.33, power on the hosts as in 700.35, combine the hosts / compute resources with the storage resources (and register with system state 220) as in 700.36 (and then repeat for the number of redundant services (700.38)). Each time, it registers with system state 220 (see 700.20) and uses controller logic to record information to keep track of the individual services and prevent conflicts (see 700.31).

[0159] Some of the service templates may include services and tools that can combine multi-host services. Some of these services may be treated as dependencies (700.39), and then the combine routines of 700.40 may be used to combine the services and register the binding to the system state 220. Furthermore, one of the service templates may be a master template, in which case the dependent service templates of 700.39 are slave or secondary services, and the combine routines of 700.40 connect them. The routines may be defined in the meta template. For example, for redundant dns configuration, the combine routines of 700.40 may include connecting slave dns to master dns, and configuring zone transfers with dnssec. Some services may use physical storage (see 700.34) to improve performance, which may be loaded with a spare OS as disclosed in FIG. 5B. The tools for combining services may be included in the template itself, and the configuration between the services may be done by an API that can be accessed by the controller and / or other hosts in the multi-node application / service.

[0160] The controller 200 may enable a user or a controller to determine the appropriate computing backend to use for an application. The controller 200 may enable a user or a controller to optimally place an application on an appropriate physical or virtual computing resource by determining resource usage. When hypervisors or other computing backends are deployed on computing nodes, they may report resource usage statistics back to the controller through the in-band management connection 270. When the controller decides to create an application on a virtual computing resource, either from its own logic and global system rules or from user input, the controller may automatically select the hypervisor on the optimal host and power on the virtual computing resource on that host.

[0161] For example, the controller 200 deploys an application or service on one or more computing resources using the template(s) 230. Such an application or service may be, for example, a virtual machine that executes the application or service. In one example, FIG. 7A illustrates the deployment of multiple virtual machines (VMs) on multiple computing nodes, and the illustrated controller 200 can recognize that multiple computing resources 310 are in the computing resource pool in the form of computing nodes 311, 312, 313. The computing nodes may be deployed with a hypervisor, for example, or may alternatively be on bare metal, where the use of a virtual machine may not be preferred for speed. In this example, the computing resource 310 has a VM(1) 321 and a VM(2) 322 configured and deployed on the computing node 311 with a hypervisor application loaded. For example, if compute node 311 does not have resources for additional VMs or other resources are preferred for a particular service, controller 200 may recognize based on stack state 220 that there are no available resources on compute node 311 or that it is preferable to set up a new VM on different resources. It may also be recognized that a hypervisor is loaded on compute resource 312 and not on resource 313, which may be, for example, a bare metal compute node used for other purposes. Thus, according to the requirements of the installed service or application template and the state of system state 220, the controller in this example may select compute node 313 for the deployment of the next required resource VM(3) 323.

[0162] The computing resources of the system may be configured to share storage on the storage resources for the storage nodes.

[0163] A user may request through the user interface 110 or an application that services be set up for the system 100. The services may include, but are not limited to, email services, web services, user management services, network providers, LDAP, Dev tools, VOIP, authentication tools, and accounting.

[0164] The API application 120 translates the user or application request and sends a message to the controller 200. The service template or image 230 of the controller 200 is used to identify which resources are required for the service. The resources to be used are then identified based on availability according to the IT system state 220. The controller 200 makes a request to one or more of the computing nodes 311, 312, or 313 for the required computing services, a request to the storage resources 410 for the required storage resources, and a request to the network resources 610 for the required networking resources. The IT system state 220 is then updated to identify the resources to be allocated. The service is then installed on the allocated resources using the global system rules 210 according to the template 230 for the service or application.

[0165] According to an example embodiment, multiple computing nodes may be used, whether for the same service or different services, while, for example, storage services and / or network provider pools may be shared among the computing nodes.

[0166] Referring to FIG. 8A, the system 100 is shown in which the controller 200, the computational resources 300, the storage resources 400, and the networking resources 600 are on the same or shared physical hardware, such as a single node. The various features shown and described in FIGS. 1-10 may be incorporated into a single node. When the node is powered on, the controller image is loaded onto the node. The computational resources 300, the storage resources 400, and the networking resources 600 are configured by the template 230 using the global system rules 210. The controller 200 may be configured to load computational backends 318, 319 as computational resources, which may or may not be added on the node or on a different node(s). Such backends 318, 319 may include, but are not limited to, virtualization, containers, and multi-tenant processes to create virtual computational, networking, and storage resources.

[0167] Applications or services 725, such as web services, email services, core network services (DHCP, DNS, etc.), collaboration tools, may be installed on virtual resources on nodes / devices shared with the controller 200. These applications or services may be moved to physical or virtual resources independent of the controller 200. Applications may run on virtual machines on a single node.

[0168] FIG. 8B illustrates an exemplary process flow for expanding from a single node system to a multiple node system (e.g., with nodes 318 and / or 319 as shown in FIG. 8A). Now, with reference to FIGS. 8A and 8B, one may consider an IT system having controller 200 running on a single server, and it is desired to expand the IT system as a multi-node IT system. Thus, prior to expansion, the IT system is in a single node state. As shown in FIG. 8A, controller 200 runs on the multi-tenant single node system to run various IT system management applications and / or resources, which may include, but are not limited to, storage resources, compute resources, hypervisors, and / or container hosts.

[0169] At step 800.2, the new physical resource is combined into a single node system by connecting the new physical resource through out-of-band management connection 260, in-band management connection 270, SAN 280, and / or network 290. For this example, the new physical resource may also be referred to as hardware or a host. Controller 200 may discover the new resource on the management network and then query the device. Alternatively, the new device may broadcast a message announcing itself to controller 200. For example, the new device may be identified by MAC address, out-of-band management, and / or booting a standby OS and using in-band management to identify the hardware type. In any case, at step 800.3, the new device provides information about its node type and its currently available hardware and software resources to the controller. Controller 200 then becomes aware of the new device and its capabilities.

[0170] In step 800.4, tasks imposed on the system running controller 200 may be assigned to the new host. For example, if the host is preloaded with an operating system (such as a storage host operating system or a hypervisor), controller 200 may allocate new hardware resources and / or capabilities. The controller may then provide an image to provision the new hardware, or the new hardware may request an image from the controller and configure itself using the methods disclosed above and below. If the new host is capable of hosting storage or virtual computing resources, the new resources may be made available to controller 200. Controller 200 may then move and / or assign existing applications to the new resources, or may use the new resources for newly created or subsequently created applications.

[0171] In step 800.5, the IT system may keep its current applications running on the controller or may migrate them to the new hardware. When migrating virtual computing resources, VM migration techniques (e.g., qemu+kvm migration tools) may be used to update the system state with the new system rules. Change management techniques described below may be used to ensure that these changes are made reliably and safely. As more applications may be added to the system, the controller may use any of a variety of techniques to determine how to allocate the system's resources, including, but not limited to, round robin techniques, weighted round robin techniques, least utilization techniques, weighted least utilization techniques, forecasting techniques with utilization-based assisted training, planning techniques, desired capacity techniques, and maximum size techniques.

[0172] 8C illustrates an exemplary process flow for migration of storage resources to new physical storage resources. The storage resources may then be mirrored, migrated, or a combination thereof (e.g., storage may be mirrored and then the original storage resource is disconnected). At step 820, the storage resource is coupled to the system by having the new storage resource contact the controller or by having the controller discover the new storage resource. This can be done using out-of-band management connection 260, in-band management connection 270, SAN network 280, or a flat network that the application network may be using, or a combination of these. With in-band management, the operating system may be pre-booted and the new resource may connect to the controller.

[0173] At step 822, a new storage target is created on the new storage resource, which may be logged to the database at step 824. In one example, the storage target may be created by copying a file. In another example, the storage target may be created by creating a block device and copying its data (which may be in the form of file system blob(s). In another example, the storage target may be created by mirroring two or more storage resources between block devices (e.g., creating a RAID), and optionally connecting through a remote storage transport(s), including but not limited to, iscsi, iser, nvmeof, nfs, nfs over rdma, fc, fcoe, srp, etc. At step 824, if the storage resource is on the same device as other resources or hosts, the database entry may include information for the compute resource (or other types of resources and / or hosts) to connect to the new storage resource, either remotely or locally.

[0174] In step 826, the storage resources are synchronized. For example, the storage can be mirrored. As another example, the storage can be synchronized offline. Technologies such as raid1 (or other types of raid, typically raid1 or raid0, but could be raid110 (mirrored raid10) if desired) (mdadm, zfs, btrfs, hardware raid) may be employed in step 826.

[0175] The data from the old storage resource is then optionally connected after database login in step 828 (if such data must be recorded when it is done later, the database may contain information related to the state of copying the data). If the storage target is in transition away from the previous host (e.g., moving from a single node system to a multi-node and / or distributed IT system as previously shown, per FIGS. 8A and 8B), the new storage resource may be designated as the primary storage resource by the controller, system state, computational resources, or a combination thereof in step 830. This may be done as a step to remove the old storage resource. In some cases, the physical or virtual hosts connected to the resource may then need to be updated, and in some cases may be powered off (and then powered back on) during the transition in step 832 (techniques disclosed herein for powering on the physical or virtual hosts may be used).

[0176] FIG. 8D illustrates an exemplary process flow for migrating virtual machines, containers, and / or processes on a single node of a multi-tenant system to a multi-node system that may have separate hardware for compute and storage. In step 850, the controller 200 creates new storage resources that may be on the new node (see, for example, nodes 318 and 319 in FIG. 8A). Then, in step 852, the old application host may be powered off. Then, in step 854, the data is copied or synchronized. By powering down in step 852 before copying / synchronizing in step 854, the migration is made safer if the migration involves migrating VMs from a single node. Powering off may also be beneficial for VM to physical machine moves. Step 854 may be accomplished before powering down via data pre-synchronization step 862, thereby minimizing the associated downtime. Additionally, the host may not be powered down as in step 852, in which case the old host remains online until the new host is ready (or the new storage resource is ready). Techniques for avoiding the power off step 852 are described in further detail below. At step 854, data may optionally be synchronized unless storage resources are mirrored or synchronized using hot standby.

[0177] The new storage resource may now be up and running and logged into the database in step 856, allowing the controller 200 to connect the new host to the new storage resource in step 858. When multiple virtual hosts are migrated from a single node, this process may need to be repeated for multiple hosts (step 860). Boot order may be determined by the controller logic using application dependencies if they are tracked.

[0178] 8E illustrates another exemplary process flow for scaling from a single node to multiple nodes in a system. At step 870, new resources are coupled to a single node system. The controller may have a set of system rules and / or scaling rules for the system (or the controller may derive scaling rules based on service execution, service templates, and dependencies of services on each other). At step 872, the controller checks such rules to be used to facilitate the scaling.

[0179] If the new physical resources include storage resources, the storage resources may be moved from the single node or other form of the simpler IT system in step 874 (or the storage resources may be mirrored). If storage resources are moved, after the storage resources are moved, the computing resources or running resources may be reloaded or rebooted in step 876. In another example, the computing resources may be connected to the mirrored storage resources in step 876 and may remain running, while the old storage resources or hardware resources of the previous system on the single node system may be disconnected or disabled. For example, a running service may be bound to two mirrored block devices, one on the single node server (e.g., using mdadm raid1) and the other on the storage resources. Once the data is synchronized, the drives on the single node server may be disconnected. The previous hardware may remain part of the IT system and may run on the same node as the controller in mixed mode (step 878). The system may continue to repeat this migration process until the original node only runs the controller, at which point the system is distributed (step 880). Additionally, at each of the steps in the process flow of Figure 8E, the controller may update the system state 220 and log the changes to the system in a database (step 882).

[0180] Referring to FIG. 9A, the application 910 is installed on a resource 900. The resource 900 may be a computing resource 310, a storage resource 410, or a networking resource 610 with respect to FIGS. 1-10 as described herein. The resource 900 may be a physical resource. A physical resource may include a physical machine or a physical IT system component. The resource 900 may be, for example, a physical computing resource, a physical storage resource, or a physical networking resource. The resource 900 may be coupled to the controller 200 of the system 100 by other resources among the computing resources, networking resources, or storage resources as described with respect to FIGS. 2A-10 herein.

[0181] The resource 900 may be initially powered down. The resource 900 may be coupled to the controller via a network, i.e., out-of-band management connection 260, in-band management connection 270, SAN 280, and / or network 290. The resource 900 may also be coupled to one or more application networks 390 through which services, application users, and / or clients may communicate with each other. The out-of-band management connection 260 may be coupled to a separate out-of-band management device 915 or circuitry for the resource 900 that turns on when the resource 900 is plugged in. The device may enable features including, but not limited to, powering the device on / off, attaching to a console and typing commands, monitoring temperature and other computer health related factors, and setting BIOS settings 195 and other features outside the scope of the operating system.

[0182] The controller 200 may detect the resource 900 through the out-of-band management network 260. The controller 200 may also identify the type of resource and its configuration using in-band or out-of-band management. The controller logic 205 may be configured to look at the out-of-band management 260 or in-band management 270 for additional hardware. If the resource 900 is detected, the controller logic 205 may use the global system rules 220 to determine if the resource 900 should be configured automatically or by user interaction. If the resource 900 is added automatically, the setup follows the global system rules 210 in the controller 200. If the resource 900 is added by a user, the global system rules 210 in the controller 200 may ask the user to confirm the addition of the resource and what the user wants to do with the computing resource. The controller 200 may query the API application(s) or otherwise request a confirmation that the new resource has been approved from the user or any program controlling the stack. The authorization process may also be completed automatically and securely using cryptography to verify the legitimacy of the new resource. The resource 900 is then added to the IT system state 220, including the switch or network to which the resource 900 is connected.

[0183] The controller 200 may power on the resource through the out-of-band management network 260. The controller 200 may use the out-of-band management connection 260 to power on the physical resource and configure the BIOS 195. The controller 200 may automatically use the console 190 to select the desired BIOS options, which may be achieved by the controller 200 reading the console image with image recognition and controlling the console 190 through out-of-band management. The boot-up state may be determined by image recognition through the console of the resource 900, out-of-band management with a virtual keyboard, querying a service running on the resource, or querying a service of the application 910. Some applications may have processes that allow the controller 200 to monitor or, in some cases, change the settings of the application 910 using the in-band management 270.

[0184] An application 910 on a physical resource 900 (or of a resource 300, 310, 311, 312, 313, 400, 410, 411, 412, 600, 610 as described with respect to FIGS. 1-10 herein) may boot over a SAN 280 or another network using a BIOS boot option or other method of configuring a remote boot, such as enabling a PXE boot or a Flex boot. Additionally or alternatively, the controller 200 may use out-of-band management 260 and / or in-band management connection 270 to instruct the physical resource 900 to boot an application image of the image 950. The controller may configure a boot option on the resource or may use an existing available remote boot method, such as a PXE boot or a Flex boot. The controller 200 may optionally or alternatively use out-of-band management 260 to boot from an ISO image and configure a local disk, and then instruct the resource to boot from the local disk(s) 920. The local disk(s) may be loaded with a boot file. This may be accomplished by using out-of-band management 260, image recognition, and a virtual keyboard. The resource may also have a boot file and / or a boot loader installed. The resource 900 and the application may boot from the image 950 loaded from the template 230, for example, via the SAN 280, using the global system rules 210 and the controller logic 205. The global system rules 220 may specify the boot order. For example, the global system rules 220 may require booting the resource 900 first, followed by the application 910. Once the resource 900 is booted using the image 950, information received through the in-band management connection 270 regarding the resource 900 may be collected and added to the IT system state 220. The resource 900 is added to the storage resource pool, and the resource 900 becomes a resource managed by the controller 200 and tracked in the IT system state 220.Applications 910 may be booted using images 950 or application images 956 loaded on resources 900 in the order specified by global system rules 220 .

[0185] The controller 200 may configure networking resources 610 that connect the application 910 to the application network 390 by the out-of-band management connection 260 or another connection. The physical resource 900 may be connected to remote storage, such as block storage resources including, but not limited to, ISER (ISCSI over RDMA), NVMEOF FCOE, FC, or ISCSI, or another storage backend, such as SWIFT, GLUSTER, or CEPHFS. When a service or application is up and running, the IT system state 220 may be updated using the out-of-band management connection 260 and / or the in-band management connection 270. The controller 200 may determine the power state of the physical resource 900, i.e., whether it is on or off, using the out-of-band management connection 260 or the in-band management connection 270. The controller 200 may determine whether a service or application is running or in a boot-up state using the out-of-band management connection 260 or the in-band management connection 270. The controller may take other actions based on the information it receives and the global system rules 210 .

[0186] 9B shows an image 950 that is loaded directly or indirectly (e.g., via another resource or a database) from the template 230 onto a compute node to boot the application 910. The image 950 may include a custom kernel 941 for the application 910.

[0187] The image 950 may include boot files 940 for the resource type and hardware. The boot files 940 may include kernels 941 corresponding to the resources, applications, or services to be deployed. The boot files 940 may also include an initrd or similar file system used to assist the boot process. The boot system 940 may include multiple kernels or initrds configured for different hardware and resource types. Additionally, the image 450 may include a file system 951. The file system 951 may include a service image 953 and corresponding file systems, and a volatile image 954 and corresponding file systems, along with a base image 952 and corresponding file systems. The file systems and data loaded may vary depending on the resource type and the application or service to be run. The base image 952 may include a base operating system file system. The base operating system may be read-only. The base image 952 may also include basic tools of an operating system that are independent of what is being run. The base image 952 may include a base directory and operating system tools. The service file system 953 may contain configuration files and specifications for resources, applications, or services. The volatile file system 594 may contain information or data specific to the deployment, such as binary applications, specific addresses, and other information, which may or may not be configured as variables, including but not limited to passwords, session keys, and private keys. The file systems may be mounted as one single file system using techniques such as overlayFS to allow some read-only and some read-write file systems to reduce the amount of duplicate data used for applications.

[0188] FIG. 9C illustrates an example of installing an application from an NT package, which may be one type of template 230. In step 900.1, the controller determines that a package blob needs to be installed. In step 900.2, the controller creates a storage resource on the default data store for the blob type (block, file, file system). In step 900.3, the controller connects to the storage resource via an available storage transport for the storage resource type. In step 900.4, the controller copies the package blob to the connected storage resource. The controller then disconnects from the storage resource (step 900.5) and sets the storage resource to read-only (step 900.6). The package blob is then successfully installed (step 900.7).

[0189] In another example, Appendix B attached hereto provides exemplary details regarding how a system may connect a computing resource to an overlayfs. Such techniques may be used to facilitate installing an application on a resource in accordance with Figure 9A or booting a computing resource from a storage resource in accordance with step 205.11 of Figure 2F.

[0190] FIG. 9D illustrates an application 910 deployed on a resource 900. The resource 900 may comprise a compute node, which may comprise, for example, a hypervisor 920, one or more virtual machines 921, 922, and / or containers, which may comprise virtual computing resources. The resource 900 may be configured in a manner similar to that described herein with respect to FIGS. 1-10, using an image 950 loaded onto the resource 900. In this example, the resource 920 is shown as a hypervisor that manages the virtual machines 921, 922. The controller 200 may use in-band management 270 to communicate with the resource 900 hosting the hypervisor 920 to create the resource and may configure the resource to allocate appropriate hardware resources. Suitable hardware resources include, but are not limited to, CPU, RAM, GPU, remote GPU (which may use RDMA to remotely connect to another host), network connectivity, network fabric connectivity, and / or virtual and physical connectivity to partitioned and / or segmented networks. The controller 200 may use a virtual console 190 (e.g., including but not limited to SPICE or VNC) and image recognition to control the resources 900 and the hypervisor 920. Additionally or alternatively, the controller 200 may use an out-of-band management 260 or an in-band management connection 270 to instruct the hypervisor 920 to boot an application image 950 from a template 230 using global system rules 210. The images 950 may be stored on the controller 200, or the controller 200 may move or copy them to the storage resources 410. Boot images for the VMs 921, 922 may be stored locally, e.g., as the image 950, or as a block device or file on a remote host and shared by file sharing, e.g., NFS over RDMA / NFS using image types such as qcow2 or raw, or may use a remote block device using ISCSI, ISER, NVMEOF, FC, FCOE.A portion of the image 950 may be stored on the storage resource 410 or the compute node 310. The controller 200 may use global rules and / or templates to configure the networking resource 610 to appropriately support the application over the out-of-band management connection 260 or another connection. The application 910 on the resource 900 may boot using the image 950 loaded over the SAN 280 or another network using a BIOS boot option or by enabling the hypervisor 920 on the resource 900 to connect to a block storage resource, including but not limited to ISER (ISCSI over RDMA), NVMEOF FCOE, FC, or ISCSI, or another storage backend such as SWIFT, GLUSTER, or CEPHFS. The storage resource may be copied from the template target on the storage resource. The IT system state 220 may be updated by querying the hypervisor 920 for information. The in-band management connection 270 may communicate with the hypervisor 920 and may be used to determine the power state of the resource, i.e., on or off, or to determine the boot-up state. The hypervisor 920 may use a virtual in-band connection 923 to the virtualized application 910, or may use the hypervisor 920 for functions similar to out-of-band management. This information may indicate whether a service or application is up and running, depending on whether it is powered on or booted.

[0191] The boot-up state may be determined by image recognition through the console 190 of the resource 900, out-of-band management 260 with a virtual keyboard, querying a service running on the resource, or querying a service of the application 910 itself. Some applications may have processes that allow the controller 200 to monitor, or in some cases, change the configuration of the application 910 using in-band management 270. Some applications may be on virtual resources and the controller 200 may monitor by communicating with the hypervisor 920 using in-band management 270 (or out-of-band management 260). The application 910 may not have such a process (or such a process may be switched to save resources) for monitoring and / or adding input. In such cases, the controller 200 may use the out-of-band management connection 260 and may use image processing and / or a virtual keyboard to log on to the system to make changes and / or switch on the management process. As with virtual computing resources, a virtual machine console 190 may be used.

[0192] FIG. 9E illustrates an exemplary process flow for adding a virtual computing resource host to the IT system 100. At step 900.11, a host that is available as a virtual computing resource is added to the system. The controller may configure a bare metal server according to the process flow of FIG. 15B (step 900.12), or an operating system may be preloaded and / or the host may be preconfigured (step 900.13). The resource is then added to the system state 220 as a virtual computing resource pool (step 900.14), and the resource becomes accessible by the controller 200 through an API (step 900.15). The API is typically accessed through the in-band management connection 270. However, the in-band management connection 270 may be selectively enabled and / or disabled with a virtual keyboard. The controller may then use the out-of-band management connection 260 and the virtual keyboard and monitor to communicate through the out-of-band connection 260 (step 900.16). The new resource is now made available to the controller as a virtual computing resource, step 900.17.

[0193] Exemplary Multi-Controller System Referring to FIG. 10, there is shown a system 100 having computing resources 300, 310 as described herein with respect to FIGS. 1-10, comprising multiple physical computing nodes 311, 312, 313, storage resources 400, 410 as described herein in the form of multiple storage nodes 411, 412 and JBOD 413, multiple controllers 200a, 200b including components 205, 210, 220, 230 (FIGS. 1-9C) and configured as controller 200 as described herein, networking resources 600, 610 including multiple fabrics 611, 612, 613 and as described herein, and an application network 390.

[0194] FIG. 10 illustrates one possible arrangement of components of system 100 in an exemplary embodiment, but is not intended to limit the possible arrangement of components of system 100.

[0195] The user interface or application 110 communicates with the API application 120, which in turn communicates with either or both of the controllers 200a or 200b. The controllers 200a, 200b may be coupled to an out-of-band management connection 260, an in-band management connection 270, a SAN 280, or a network in-band management connection 290. As described with reference to Figures 1-9C herein, the controllers 200a, 200b are coupled to the compute nodes 311, 312, 313, the storage 411, 412 including the JBOD 413, and the networking resources 610 via connections 260, 270, 280, and optionally 290. The application network 390 is coupled to the compute nodes 311, 312, 313, the storage resources 411, 412, 413, and the networking resources 610.

[0196] The controllers 200a, 200b may operate in parallel. Either the controller 200a or 200b may initially operate as the master controller 200 as described with respect to Figures 1 to 9C herein. The controller(s) 200a, 200b may be adapted to configure the entire system 100 from a powered off state. One of the controllers 200a, 200b may further populate the system state 220 from an existing configuration by probing the other controllers through either the out-of-band connection 260 and the in-band connection 270. Either of the controllers 200a, 200b may access or receive resource states and related information from resources or other controllers through one or more connections 260, 270. The controllers or other resources may update the other controller. Thus, when an additional controller is added to the system, the controller may be configured to return the system 100 to the system state 220. In the event of failure of one of the controllers or the master controller, the other controller may be designated as the master controller. The IT system state 220 may further be reconstructable from state information available or stored on the resources. For example, an application may be deployed on a computing resource where the application is configured to create a virtual computing resource on which the system state is stored or replicated. The global system rules 210, the system state 220, and the templates 230 may also be saved or copied to a resource or combination of resources. Thus, if all controllers go offline and a new controller is added, the system may be configured such that the new controller can restore the system state 220.

[0197] Networking resources 610 may include multiple network fabrics. For example, as shown in FIG. 10, the multiple network fabrics may include one or more of SDN Ethernet switches 611, ROCE switches 612, Infiniband switches 613 or other switches or fabrics 614. A hypervisor with virtual machines on a compute node may utilize a desired one or more of the fabrics to connect to a physical or virtual switch. The networking arrangement may allow restriction of the physical network, for example, through segmented networking, for example, for security or other resource optimization.

[0198] The system 100 through the controller 200 described in Figures 1-10 herein may automatically set up a service or application. A user may request through the user interface 110 or an application to set up a service for the system 100. The services may include, but are not limited to, email services, web services, user management services, network providers, LDAP, developer tools, VOIP, authentication tools, accounting software. The API application 120 translates the user or application request and sends a message to the controller 200. The service template or image 230 of the controller 200 is used to identify which resources are required for the service. The required resources are identified based on their availability according to the system state 220. The controller 200 makes a request to the computational resources 310 or computational nodes 311, 312 or 313 for the required computational services, makes a request to the storage resources 410 for the required storage resources, and makes a request to the networking resources 610 for the required networking resources. The system state 220 is then updated and the resources to be allocated are identified. The service is then installed on the allocated resources using global system rules 210 according to the service template.

[0199] Improving system security Referring to FIG. 13A, an IT system 100 is shown that includes a resource 1310, which may be a bare metal or physical resource. Although FIG. 13A shows only a single resource 1310 connected to the system 100, it should be understood that the system 100 may include multiple resources 1310. The resource 1310(s) may be or comprise a bare metal cloud node. A bare metal cloud node may include, but is not limited to, a resource that is connected to an external network 1380 to enable remote access to a physical host or virtual machine, enable creation of virtual machines, and enable external users to execute code on the resource(s). The resource(s) 1310 may be directly or indirectly connected to the external network 1380 or the application network 390. The external network 1380 may be the Internet or other resource(s) not managed by the controller 200 or the controller of the IT system 100. The external network 1380 may include, but is not limited to, the Internet, an internet connection(s), resource(s) not managed by the controller, other wide area networks (e.g., Stratcom, peer-to-peer mesh networks or other external networks that may be publicly accessible or inaccessible) or other networks.

[0200] When a physical resource 1310 is added to the IT system 100a, it may be coupled to the controller 200 and powered off. The resource 1310 is coupled to the controller 200a via one or more of the following networks: out-of-band management (OOBM) connection 260, optionally in-band management (IBM) connection 270, and optionally SAN connection 280. As used herein, SAN 280 may or may not comprise a constituent SAN. A constituent SAN may include a SAN used to power on or configure a physical resource. A constituent SAN may be part of SAN 280 or may be separate from SAN 280. In-band management may also comprise a constituent SAN, which may or may not be SAN 280 as shown herein. When a resource is in use, the constituent SAN may also be disabled, disconnected, or unavailable. The OOBM connection 260 is invisible to the OS of the system 100, while the IBM connection 270 and / or the constituent SAN may be visible to the OS of the system 100. The controller 200 of FIG. 13A may be configured similarly to the controller 200 described with reference to FIGS. 1-12B herein. The resource 1310 may comprise internal storage. In some configurations, the controller 200 may populate the storage and may temporarily configure the resource to connect to a SAN to fetch data and / or information. The out-of-band management connection 260 may be coupled to a separate out-of-band management device 315 or to circuitry of the resource 1310 that is powered on when the resource 1310 is plugged in. The device 315 may enable features including, but not limited to, powering the device on / off, connecting to a console and typing commands, monitoring temperature and other computer health related factors, and setting BIOS settings and other features outside of the scope of the operating system. The controller 200 may reference the resource 1310 through the out-of-band management network 260. The controller may also identify the type of resource and its configuration using in-band or out-of-band management.13C-13E, described below, illustrate various process flows for adding physical resources 1310 to IT system 100a and / or for starting up or managing system 100 in a manner that enhances system security.

[0201] The term "disabled" as used herein with reference to a network, networking resource, network device, and / or networking interface refers to the action of such network, networking resource, network device, and / or networking interface being powered off (manually or automatically), physically disconnected, and / or virtually or in some other way (e.g., by filtering) disconnected from a network, virtual network (e.g., including but not limited to a VLAN, VXLAN, InfiniBand partition). The term "disabled" also includes a unidirectional or unidirectional restriction of operability, such as preventing a resource from sending or writing data to a destination (while still having the ability to receive or read data from a source), preventing a resource from receiving or reading data from a source (while still having the ability to send or write data to a destination). Such networks, networking resources, network devices, and / or networking interfaces may be disconnected from additional networks, virtual networks, or resource associations, and remain connected to previously connected networks, virtual networks, or resource associations. Additionally, such networking resources or devices may be switched from one network, virtual network, or combination of resources to another.

[0202] The term "enabled" as used herein with reference to a network, networking resource, network device, and / or networking interface refers to the action of such network, networking resource, network device, and / or networking interface being powered on (manually or automatically), physically connected, and / or virtually or in some other manner connected to a network, virtual network (e.g., including but not limited to a VLAN, VXLAN, InfiniBand partition). Such a network, networking resource, network device, and / or networking interface may be connected to an additional network, virtual network, or combination of resources if already connected to another system component. Furthermore, such a networking resource or device may be switched from one network, virtual network, or combination of resources to another. The term "enabled" also includes unidirectional or unidirectional restrictions on operability, such as allowing a resource to send, write, or receive data to a destination (while having the ability to restrict data from the source), or allowing a resource to send, receive, or read data from a source (while having the ability to restrict data from the destination).

[0203] The controller logic 205 is configured to check the out-of-band management connection 260 or the in-band management connection 270 and / or the configuration SAN 280 for added hardware. If a resource 1310 is detected, the controller logic 205 may use the global system rules 220 to determine whether to configure the resource automatically or by interacting with a user. If added automatically, the setup follows the global system rules 210 in the controller 200. If added by a user, the global system rules 210 in the controller 200 may ask the user to confirm the addition of the resource and what the user wants to do with the resource 1310. The controller 200 may query the API application(s) or otherwise request confirmation from the user or any program controlling the stack that the new resource has been approved. The approval process may also be completed automatically and securely using cryptography to verify the legitimacy of the new resource. The controller logic 205 then adds the resource 1310 to the IT system state 220, including the switch or network in which the resource 1310 is plugged.

[0204] If the resource is physical, the controller 200 may power on the resource through the out-of-band management network 260, and the resource 1310 may boot from an image 350 loaded from the template 230, for example, via the SAN 280, using the global system rules 210 and the controller logic 205. The image may be loaded indirectly through other network connections or through another resource. Once booted, information about the resource 1310 may also be collected and added to the IT system state 220. This may be done through an in-band management connection and / or a configuration SAN connection or an out-of-band management connection. The resource 1310 may boot from an image 350 loaded from the template 230, for example, via the SAN 280, using the global system rules 210 and the controller logic 205. The image may be loaded indirectly through other network connections or through another resource. Once booted, information received through the in-band management connection 270 about the computing resource 310 may also be collected and added to the IT system state 220. The resource 1310 may then be added to a storage resource pool, which becomes a resource managed by the controller 200 and tracked in the IT system state 220 .

[0205] The in-band management and / or configuration SAN may be used by the controller 200 to set up, manage, use or communicate with the resource 1310 and execute any command or task. Optionally, however, the in-band management connection 270 may be configured by the controller 200 to be off or disabled at any time or during the set up, management, use or operation of the system 100 or controller 200. The in-band management may be further configured to be on or enabled at any time or during the set up, management, use or operation of the system 100 or controller 200. Optionally, the controller 200 may controllably or switchably disconnect the resource 1310 from the in-band management connection 270 to the controller 200(s). Such disconnection or disconnectability may be physical, for example using an automatic physical switch or a switch that powers off the in-band management connection of the resource to the network and / or the configuration SAN. For example, the disconnection may be performed by a network switch cutting off power to ports connected to the in-band management 270 and / or constituent SAN 280 of the resource 1310. Such disconnection or partial disconnection may be performed using software-defined networking or may be physically filtered to the controller using software-defined networking. Such disconnection may be performed via the controller through either in-band or out-of-band management. According to an exemplary embodiment, the resource 1310 may be disconnected from the in-band management connection 270 in response to selective control instructions from the controller 200 at any time before, during, or after the resource 1310 is added to the IT system.

[0206] Using software-defined networking, the in-band management connection 270 and / or the configuration SAN 280 may or may not retain some functionality. The in-band management connection 270 and / or the configuration SAN 280 may be used as a restricted connection for communication between the controller 200 or other resources. The connection 270 may be restricted to prevent an attacker from pivoting to the controller 200, other networks, or other resources. The system may be configured to prevent devices such as the controller 200 and the resources 1310 from communicating openly and compromising the resources 1310. For example, the in-band management 270 and / or the configuration SAN 280 may only allow data transmissions of the in-band management and / or the configuration SAN and prohibit any reception, either physically or using software-defined networking to only allow writes from the controller to the resources, or as a one-way write connection from the controller 200 to the resources 1310. The one-way write nature of the connection may further be controlled or turned on or off according to the desired state of security and various stages or times of the system's operation. The system may further be configured to limit writes or communications, for example, from the resource to the controller to, for example, communication of logs or alerts. Interfaces may further be moved to other networks or added or removed from networks by techniques including, but not limited to, software defined networking, VLAN, VXLAN and / or InfiniBand partitioning. For example, an interface may be connected to a setup network, removed from that network and moved to a network used at runtime. Controller to resource communications may be cut off or limited, resulting in the controller being physically unable to respond to any data sent from the resource 1310.According to one example, when resources 1310 are added and booted, the in-band management 270 may be switched off or filtered, either physically or using software defined networking. The in-band management may be configured to be able to send data to another resource dedicated to log management.

[0207] In-band management can be turned on and off using out-of-band management or software-defined networking. When in-band management is disconnected, there is no need to run a daemon and in-band management can be re-enabled using keyboard functions.

[0208] Further, optionally, resources 1310 may not have an in-band management connection and the resources may be managed through out-of-band management.

[0209] Out-of-band management may alternatively or additionally be used to manipulate various aspects of the system in ways including, but not limited to, for example, a keyboard, a virtual keyboard, a disk mount console, connecting virtual disks, changing BIOS settings, changing boot parameters and other aspects of the system, running pre-existing scripts that may be present in a bootable image or installation CD, or other features of out-of-band management that allow the controller 200 and the resource 1310 to communicate with or without the exposure of the operating system running on the resource 1310. For example, the controller 200 may send commands using such tools via the out-of-band management 260. The controller 200 may further use image recognition to assist in the control of the resource 1310. Thus, using the out-of-band management connection, the system may prevent or avoid undesired manipulation of resources connected to the system via the out-of-band management connection. The out-of-band management connection may also be configured as a one-way communication system during operation of the system or at selected times during operation of the system.

[0210] Additionally, the out-of-band management connections 260 may be selectively controlled by the controller 200 in the same manner as the in-band management connections, if the implementer desires.

[0211] The controller 200 can automatically turn resources on and off according to global system rules and update the state of the IT system for reasons determined by the IT system user, such as turning resources off to conserve power, turning resources on to improve application performance, or any other reason the IT system user has. The controller may also be able to turn constituent SAN, in-band and out-of-band management connections on and off at any time during system operation, or designate such connections as one-way write connections (e.g., disabling in-band management connection 270 or constituent SAN 280 while resource 1310 is connected to external network 1380 or internal network 390) for various security purposes. One-way in-band management may also be used, for example, to monitor the health of the system, monitoring logs and information that may be visible to the operating system.

[0212] The resources 1310 may further be coupled to one or more internal networks 390, such as an application network through which services, application users and / or clients may communicate with one another. Such application networks 390 may further be connected or connectable to an external network 1380. According to example embodiments herein, including but not limited to FIGS. 2A-12B, in-band management may be disconnected or disconnectable from the resource or application network 390, or may provide one-way writes from the controller to provide additional security when the resource or application network is connected to an external network, or when the resource is connected to an application network that is not connected to an external network.

[0213] The IT system 100 of FIG. 13A may be configured similarly to the IT system 100 shown in FIG. 3B. The image 350 may be loaded directly or indirectly (through another resource or database) from the template 230 to the resource 1310 for booting the computing resource and / or loading an application. The image 350 may include a boot file 340 for the resource type and hardware. The boot file 340 may include a kernel 341 corresponding to the resource, application, or service to be deployed. The boot file 340 may further include an initrd or similar file system used to assist the boot process. The boot system 340 may include multiple kernels or initrds configured for different hardware and resource types. Additionally, the image 350 may include a file system 351. The file system 351 may include a service image 353 and corresponding file systems and a volatile image 354 and corresponding file systems, along with a base image 352 and corresponding file systems. The file systems and data loaded may vary depending on the resource type and the application or service being executed. The base image 352 may include a base operating system file system. The base operating system may be read-only. The base image 352 may further comprise the basic tools of an operating system independent of what is running. The base image 352 may comprise a base directory and operating system tools. The service file system 353 may contain configuration files and specifications for resources, applications or services. The volatile file system 354 may contain information or data specific to the deployment, such as binary applications, specific addresses, and other information, which may or may not be configured as variables, including but not limited to passwords, session keys, and private keys.File systems may be mounted as one single file system using technologies such as overlayFS to allow some read-only and some read-write file systems to reduce the amount of duplicate data used for applications.

[0214] FIG. 13B illustrates a number of resources 1310, each of which comprises one or more hypervisors 1311 that host or comprise one or more virtual machines. The controller 200a is coupled to the resources 1310, each of which comprises a bare metal resource. As illustrated in and described with reference to FIG. 13B, the resources 1310 are each coupled to the controller 200a. According to an exemplary embodiment herein, the in-band management connection 270, the configuration SAN 280, and / or the out-of-band management connection 260 may be configured as described with reference to FIG. 13A. One or more of the virtual machines or hypervisors may be compromised or become compromised. In conventional systems, this may result in other virtual machines on other hypervisors becoming compromised. For example, this may result from exploitation of a hypervisor running within a virtual machine. For example, a pivot may move from the compromised hypervisor to the controller 200a, and then from the compromised controller 200a to other hypervisors coupled to the controller 200a. For example, pivoting may occur between a compromised hypervisor and a target hypervisor using a network connected to both. In the configuration of in-band management 270, constituent SAN 280, or out-of-band management 260 of controller 200a and resource 1310 shown in FIG. 13B, some or all of the in-band (or constituent SAN) and / or out-of-band connections may be selectively controlled to disable on a given link between controller 200a and resource 1310, which may prevent a compromised virtual machine from being used to pivot out of one hypervisor and into another resource.

[0215] As described above with respect to FIGS. 1-12, the in-band management connection 270 and the out-of-band management connection 260 may be further configured in a manner similar to that described with respect to FIGS. 13A and 13B.

[0216] 13C illustrates an exemplary process flow for adding or managing physical resources, such as bare metal nodes, to system 100. Resources 1310 illustrated in FIGS. 13A and 13B herein or with respect to FIGS. 1-12 may be connected via out-of-band management connections 260 and in-band management connections 270 to controllers of system 100 and / or a SAN.

[0217] After an instance of resource connectivity, the external and / or application networks are disabled in step 1370. As discussed above, this disabling can use any of a variety of techniques, such as disabling, disconnecting, or filtering components of system 100 (or only those vulnerable to attack) from the external or application networks using an in-band management connection or configuration SAN, as described with respect to Figures 13A and 13B, prior to setting up the system, adding resources, testing the system, updating the system, or performing other tasks or commands.

[0218] After step 1370, then in step 1371, the in-band management connection and / or configuration SAN are enabled. Thus, the combination of steps 1370 and 1371 isolates the resource from the external network and / or application network while the in-band management and / or SAN connection remains up and running. Commands may then be executed on the resource under control of controller 200 via the in-band management connection (see step 1372). For example, set up and configuration steps may be performed in step 1372 using the in-band management and / or configuration SAN, including but not limited to those described herein with respect to Figures 1-13B. Alternatively or additionally, using the in-band management and / or configuration SAN, in step 1372 other tasks may be performed including, but not limited to, system operation, updating or management (which may include but is not limited to any change management or system updates), testing, updates, data transfers, gathering performance and health information (including but not limited to errors, CPU utilization, network utilization, file system information, and storage utilization) and log collection, as well as other commands that may be used to manage system 100 as described in Figures 1 through 13B herein.

[0219] After adding resources, setting up the system, and executing such tasks or commands as described herein with respect to FIGS. 13A and 13B, the in-band management connection 270 and / or the configuration SAN 280 between the resources and the controller or other components of the system may be disabled in one or more directions in step 1373. Such disabling may employ disconnection, filtering, etc., as described above. After step 1373, in step 1374, the connection to the external network and / or application network may be restored. For example, the controller may notify the networking resource so that the resource 1310 can connect to the application network or the Internet. The same steps may be followed when testing or updating the system, i.e., the in-band management connection to the external network and / or application network may be disconnected or filtered, and then the in-band management connection to the resource (in one or both directions) may be enabled or connected. Thus, while the resource is connected to the external network and / or application network, steps 1373 and 1374 operate simultaneously to isolate the resource from the in-band management connection and / or the connection to the controller through the configuration SAN.

[0220] Out-of-band management may be used to manage a system or resource, set up a system or resource, or configure, boot, or add a system or resource. When used in any of the embodiments herein, out-of-band management may use a virtual keyboard to send commands to a machine to change settings before booting, and may also send commands to the operating system by typing into the virtual keyboard. If the machine is not logged in, out-of-band management may use the virtual keyboard to enter a user name and password, and may use image recognition to verify the logon, verify the entered commands, and check if they have been executed. If the physical resource only has a graphical console, a virtual mouse may also be used, and image recognition allows out-of-band management to make changes.

[0221] FIG. 13D is another exemplary process flow for adding or managing a physical resource, such as a bare metal node, to the system 100. At step 1380, a resource as shown in FIGS. 13A and 13B or 1-12 herein may be connected to a system or resource via out-of-band management 260. A disk may be virtually connected by providing access to a disk image (e.g., an ISO image) through out-of-band management facilitated by a controller (see step 1381). The resource or system may then be booted from the disk image (step 1382), and then files are copied from the disk image to a bootable disk (see step 1383). This may also be used to boot a system in which resources have been set up in this manner using out-of-band management. This may also be used to configure and / or boot multiple resources that can be combined together (including but not limited to networking resources), whether the multiple resources further comprise a controller or configure a system. Thus, a virtual disk may be used to enable a controller to connect a disk image to a resource as if a virtual disk was connected to the resource. Out-of-band management may also be used to send files to the resource. Data may be copied from the virtual disk to a local disk in step 1383. The disk image may contain files that the resource can copy and use in operation. Files may be copied or used either through scheduled programs or through instructions from out-of-band management. Through out-of-band management, the controller may log on to the resource using a virtual keyboard and enter commands to copy files from the virtual disk to the controller's own disk or other storage accessible to the resource. In step 1384, the system or resource is configured to boot by setting BIOS, EFI or boot order settings so that it will boot from a bootable disk.Boot configuration may use the operating system's EFI manager, such as efibootmgr, which may be performed directly from out-of-band management or by including it in an installer script (e.g., a script using efibootmgr is automatically executed when the resource boots). Additionally, boot options or other BIOS changes may be set through an out-of-band management tool, such as Supermicro Boot Manager, using either boot order commands or uploading a BIOS configuration (e.g., an XML BIOS configuration supported by Supermicro Update Manager). The BIOS may be further configured to set the appropriate BIOS settings, including the boot order, using keyboard and image recognition from the console. The installer may be run against the pre-configured image loaded. The configuration may be tested by looking at the screen and using image recognition. After configuration, the resource may be enabled (e.g., powered on, booted, connected to the application network, or a combination thereof) (step 1385).

[0222] 13E is another exemplary process flow for adding or managing physical resources, such as bare metal nodes, to system 100, in this case using PXE, Flexboot, or similar network booting. At step 1390, resources 1310 as shown in FIGS. 13A and 13B herein or as shown with respect to FIGS. 1-12 may be connected to a controller of system 100 via (1) in-band management connection 270 and / or SAN, and (2) out-of-band management connection 260. External network and / or application network connections may then be disabled (e.g., filtered or disconnected, in whole or in part, physically or virtually using SDN) at step 1391 (similar to that described above with respect to step 1370). For example, before setting up the system, adding resources, testing the system, updating the system, or performing other tasks or commands, components of system 100 (or only those vulnerable to attack) are disabled, disconnected, or filtered from the external or application network using an in-band management connection or SAN, as described with respect to Figures 13A and 13B.

[0223] In step 1392, the type of resource is determined. For example, information about the resource can be collected from the mac address using an out-of-band management tool or by connecting a disk image (e.g., an ISO image) to the resource as if a disk were connected to the resource and temporarily booting an operating system with a tool that can be used to identify the resource information. Then, in step 1393, the resource is identified as being configured or pre-configured for PXE or flexboot, etc. Then, in step 1394, the resource is powered on and a PXE, Flexboot, or similar boot is performed (or if the resource is temporarily booted and powered on again). Then, in step 1395, the resource is booted from an in-band management connection or a SAN. In step 1396, the data is copied to a disk accessible by the resource in a manner similar to that described with reference to step 1383 of FIG. 13D. In step 1397, the resource is configured to boot from the disk(s) in a manner similar to that described above with reference to step 1384 of FIG. 13D. If the resource is identified as being pre-configured for PXE, flexboot, etc., the files may be copied at any of steps 1393 through 1396. If in-band management was enabled, it may be disabled at step 1398 and the application network or external network may be reconnected or enabled at step 1399.

[0224] Additionally, it should be understood that techniques other than OOBM can be used to remotely enable resources (e.g., power on) and verify that a resource has booted. For example, the system can prompt the user to press the power button, manually tell the controller that the system has booted (or use a keyboard / console connection to the controller). Additionally, the system can ping the controller through IBM (e.g., through ssh, telnet or another method on the network) once the system has booted and the controller logs on and tells it to reboot. For example, the controller can use ssh to send the reboot command. In either case, if PXE is used and there is no OOBM, the system should have a way to automatically tell the resource to power on or tell the user to power on manually.

[0225] Deploying controllers and / or environments In an exemplary embodiment, the controllers may be deployed in a system from an originating controller 200 (such originating controller 200 may be referred to as a "main controller"). The main controller may thus set up a system or environment that may be a separate or separable IT system or environment.

[0226] An environment as described herein refers to a collection of resources in a computer system that can interoperate with each other. A computer system may, but is not required to, include multiple environments within it. The resource(s) of an environment may comprise one or more instances, applications, or sub-applications executing in the environment. Additionally, an environment may include one or more environments or sub-environments. An environment may or may not include a controller, and an environment may operate one or more applications. Such resources of an environment may include, for example, networking resources, computational resources, storage resources, and / or application networks used to execute a particular environment, including applications within the environment. Thus, it should be understood that an environment may provide functionality for one or more applications. In some examples, an environment as described herein may be physically or virtually separated or separable from other environments. Additionally, in other examples, an environment may have network connections to other environments, and such connections may be disabled or enabled as needed.

[0227] Additionally, the main controller may set up, deploy and / or manage one or more additional controllers in various environments or as separate systems. Such additional controllers may be or become independent from the main controller. Even if independent or pseudo-independent from the main controller, such additional controllers may receive instructions from or send information to the main controller (or a separate monitor or environment via a monitoring application) at various times during operation. The environments may be configured for security (e.g., by making the environments separable from each other and / or from the main controller) and / or for various management purposes. One environment may be connected to an external network, while another associated environment may or may not be connected to an external network.

[0228] The main controller may manage environments or applications, whether they are separate systems and whether they include controllers or sub-controllers. The main controller may also manage shared storage of global configuration files or other data. The main controller may further parse global system rules (e.g., system rules 210), or a subset thereof, for different controllers according to their capabilities. Each new controller (which may be called a "sub-controller") may receive new configuration rules, which may be a subset of the main controller's configuration rules. The subset of global configuration rules deployed to the controller may depend on or correspond to the type of IT system being set up. The main controller may set up or deploy new controllers or separate IT systems, which are then permanently separated from the main controller, for example, for shipping or delivery or otherwise. The global configuration rules (or a subset thereof) may define a framework for setting up applications or sub-applications in various environments and how they may interact with each other. Such applications or environments may run on sub-controllers that include a subset of the global configuration rules deployed by the main controller. In some examples, such applications or environments may be managed by a main controller. However, in other examples, such applications or environments are not managed by the main controller. When a new controller is spawned from the main controller to manage an application or environment, application dependency checking may be performed across multiple applications to facilitate control by the new controller.

[0229] Thus, in an exemplary embodiment, a system may include an IT system with a main controller configured to deploy other controllers, or other such controllers. Such an implementation system may be configured to be completely disconnected from the main controller. Once independent, such a system may be configured to operate as a stand-alone system, or may be controlled or monitored by another controller, such as the main controller (or an environment with an application), at various discrete or continuous times during operation.

[0230] 14A illustrates an exemplary system in which a main controller 1401 has controllers 1401a and 1401b deployed on different systems 1400a and 1400b, where 1400a and 1400b may be referred to as subsystems, although it should be understood that the subsystems 1400a and 1400b may also function as environments. The main controller 1401 may be configured in a manner similar to the controller 200 described above. Accordingly, it may include controller logic 205, global system rules 210, system states 220, and templates 230.

[0231] Each of the systems 1400a and 1400b includes a controller 1401a, 1401b coupled to resources 1420a, 1420b, respectively. The main controller 1401 may be coupled to one or more other controllers, such as the controller 1401a of the subsystem 1400a and the controller 1401b of the subsystem 1400b. The global rules 210 of the main controller 1400 may include rules that may manage and control the other controllers. The main controller 1401 may use such global rules 210 together with the controller logic 205, the system state 220, and the templates 230 to set up, provision, and deploy the subsystems 1400a, 1400b through the controllers 1401a, 1401b in a manner similar to that described with reference to Figures 1-13E herein.

[0232] For example, the main controller 1401 may load the global rules 210 (or a subset thereof) into the subsystems 1400a, 1400b as rules 1410a, 1410b, respectively, such that the global rules 210 (or a subset thereof) direct the operation of the controllers 1401a, 1401b and their subsystems 1400a, 1400b. Each controller 1401a, 1401b may have rules 1410a, 1410b, which may be the same or different subsets of the global rules 210. For example, which subset of the global rules 210 is provisioned into a given subsystem may depend on the type of subsystem being deployed. Additionally, the controller 1401 may load or direct the loading of data to be loaded into the system resources 1420a, 1420b or the controllers 1401a, 1401b.

[0233] The main controller 1401 may be connected to the other controllers 1401a, 1401b through in-band management connection(s) 270 and / or out-of-band management connection(s) 260 or SAN connection 280, which may be enabled or disabled at various stages of deployment or management, in a manner as described herein, for example with reference to the deployment and management of resources described in Figures 13A-13E. By using selective enabling and disabling of the in-band management connections 270 or out-of-band management connections 260, the subsystems 1400a, 1400b may be deployed in a manner such that the subsystems 1400a, 1400b have no knowledge (or knowledge is limited, controlled, or prohibited) of the main system 100 or the controllers 1401 or each other at various times.

[0234] In an exemplary embodiment, the main controller 1401 may operate a centralized IT system with local controllers 1401a, 1401b deployed and configured by the main controller 1401 such that the main controller 1401 may deploy and / or run multiple IT systems. Such IT systems may or may not be independent from each other. The main controller 1401 may set up monitoring as a separate application that is separated or air-gapped from the IT systems it created. A separate console for monitoring may comprise a connection between the main controller and the local controller(s) and / or a connection between the environments that may be selectively enabled or disabled. The controller 1401 may deploy separated systems for various applications with different controllers in case each is stopped or compromised, including, but not limited to, for example, business, manufacturing systems with data storage, data centers as well as various other functional nodes. Such separation may be complete or permanent, or may be pseudo-separated, for example, temporarily, time or task dependent, communication direction dependent, or other parameters dependent. For example, the main controller 1401 may be configured to provide instructions to the system that may or may not be limited to some predefined situations, while the subsystems may have limited or no ability to communicate with the main controller. Thus, such subsystems may not be able to compromise the main controller 1401. The main controller 1401 and the sub-controllers 1401a, 1401b may be isolated from each other as described herein (with specific examples described below), for example, by disabling in-band management 270, by one-way writes and / or by limiting communication to out-of-band management 260. For example, in the event of a breach, one or more controllers may disable in-band management connection 270 to one or more other controllers to prevent the breach or access from spreading.System sections can be turned off or separated.

[0235] The subsystems 1400a, 1400b may further share resources with or be connected to another environment or system through in-band management 270 or out-of-band management 260.

[0236] 14B and 14C are an example flow illustrating possible steps for provisioning a controller with a main controller.

[0237] In FIG. 14B, in step 1460, the main controller provisions or sets up a resource, such as resource 1420a or 1420b. In step 1461, the main controller provisions or sets up a sub-controller. The main controller can use the techniques described above to set up resources in the system and perform steps 1460 and 1461. Furthermore, while FIG. 14B shows that step 1460 is performed before step 1461, it should be understood that this is not required. The main controller 1401 can use its system rules 210 to determine what resources are needed and place the resources on the system or network. The main controller can set up or deploy a sub-controller in step 1461 by loading the system rules 210 into the system to set up the sub-controller (or by providing instructions to the sub-controller on how to set up and obtain its own system rules). These instructions may include, but are not limited to, configuring resources, configuring applications, global system rules to create the IT systems run by the sub-controllers, instructions to reconnect to the main controller to pick up new or changed rules, and instructions to disconnect from the application network to make room for the new production environment. After deploying the resources, in step 1463, the main controller may allocate resources to the sub-controllers via updates to system rules 210 and / or system state 220.

[0238] Figure 14C illustrates an alternative process flow for deployment. In the example of Figure 14C, the main controller deploys the sub-controllers in step 1470 (which may proceed as described with respect to step 1461). The sub-controllers then deploy resources in step 1475, for example using techniques such as those shown in Figures 3C and 7B.

[0239] 15A illustrates an example system in which a main controller 1501 of system 100 generates environments 1502, 1503, and 1504. Environment 1502 includes resource 1522, environment 1503 includes resource 1523, and environment 1504 includes resource 1524. Additionally, environments 1502, 1503, 1504 may share access to a pool of shared resources 1525. Such shared resources may include, for example, but are not limited to, a shared data set, an API, or running applications that need to communicate with each other.

[0240] In the example of FIG. 15A, each environment 1502, 1503, 1504 shares a main controller 1501. The global system rules 210 of the main controller 1501 may include rules for deploying and managing the environments. Resources 1522, 1523 and / or 1524 may be required by each environment 1501, 1502, 1503 to manage one or more applications. Configuration rules for such applications may be implemented by the main controller (or local controllers in the environments, if present) to define how each such environment operates and how it interacts with other applications and environments. The main controller 1401 may use the global rules 210 along with the controller logic 205, system state 220 and templates 230 to set up, provision and deploy the environments in a manner similar to the deployment of resources and systems described with reference to FIGS. 1-14C herein. If the environment includes a local controller, the main controller 1501 may load the global rules 210 (or a subset thereof) into the local controller or associated storage, such that the global rules (or a subset thereof) define the behavior of the environment.

[0241] The controller 1501 may use configuration rules with system rules 210 to deploy and configure resources 1522, 1523, 1524 and / or shared resources 1525 for each of the environments 1502, 1503, 1504. The controller 1501 may further monitor the environments or configure the resources 1522, 1523, 1524 (or shared resources 1525) to allow monitoring of each environment 1502, 1503, 1504. Such monitoring may be via a connection to a separate monitoring console, which may be enabled or disabled, or may be through the main controller. The main controller 1501 may connect to one or more of the environments 1502, 1503, 1504 through in-band management connection(s) 270 and / or out-of-band management connection(s) 260 or SAN connection 280, which may be enabled or disabled at various stages of deployment or management, in a manner as described herein with reference to the deployment and management of resources in Figures 13A-13E and 14A. Using the enabling and disabling of the in-band management connection 270 or out-of-band management connection 260 or SAN connection 280, the environments 1502, 1503, 1504 may be deployed in such a way that they have, at various times, no, limited or controlled knowledge of the main system 100 or controller 1501, or no, limited or controlled knowledge of each other's connections.

[0242] An environment may include one or more resources that are coupled to an external network 1580 that connects to an external, external environment or that interact with other resources. An environment may be physical or non-physical. "Non-physical" in this context means that the environments share the same physical host(s) but are virtually isolated from each other. The environments and systems may be deployed on identical hardware, similar but different hardware, or non-identical hardware. In some examples, the environments 1502, 1503, 1504 may be valid copies of each other, while in other examples, the environments 1502, 1503, 1504 may provide different functionality from each other. As an example, a resource of an environment may be a server.

[0243] In accordance with the techniques described herein, placing systems and resources into separate environments or subsystems may allow for the isolation of applications for security and / or performance. Isolating environments may also reduce the impact of compromised resources. For example, one environment may contain sensitive data and be configured for reduced exposure to the Internet, while another environment may host Internet-facing applications.

[0244] FIG. 15B illustrates an exemplary process flow for the controller shown in FIG. 15A to set up an environment. In such an example, the system may be tasked with creating and setting up a new environment. This may be triggered by a user request or by a system rule that is executed when engaging in a particular task or set of tasks. As described below, FIGS. 17A-18B illustrate an example of a particular change management task or set of tasks where the system creates a new environment. However, there may be many circumstances in which the controller may create and set up a new environment.

[0245] Thus, referring to FIG. 15B, in setting up a new environment, the controller selects an environment rule (step 1500.1). According to the environment rule, using the global system rules 210 and the template 230, the controller finds resources for the environment (step 1500.2). The rules may have a hierarchy of suitable resource selections that the controller goes through until it finds the resources needed for the environment. In step 1500.3, the controller assigns the resources found in step 1500.2 to the environment, for example using the techniques described in FIG. 3C or FIG. 7B. The controller then configures the system's networking resources for the new environment to ensure compatible and efficient connectivity between the new environment and other system components (step 1500.4). The system state is updated in step 1500.5 as each resource is enabled and each template is processed. The controller then sets up and enables the integration and interoperability of the environment's resources and powers on any applications to deploy the new environment (step 1500.6). The system state is updated again in step 1500.7 once the environment becomes available.

[0246] FIG. 15C illustrates an exemplary process flow for the controller shown in FIG. 15A to set up multiple environments. When setting up multiple environments, the environments may be set up in parallel using the technique described in FIG. 15B for each environment. However, it should be understood that the environments may be set up in a sequential order or consecutively, as described in FIG. 15C. Referring to FIG. 15C, in step 1500.10, the controller sets up and deploys a first new environment (which may be performed as described with respect to step 1500.1 of FIG. 15B). There may be different environment rules for different types of environments and different ways of interoperating with each other. In step 1500.11, the controller selects an environment rule for the next environment. In step 1500.12, the controller finds resources according to a priority order that may be defined by the system rules 210. In step 1500.13, the controller allocates the resources found in step 1500.12 to the next environment. The environments may or may not share resources. In step 1500.14, the controller uses system rules 210 to configure the system's networking resources for the next environment and between environments with dependencies. The system state is updated in step 1500.15 as each resource is valid, templates are processed, and networking resources are configured including environment dependencies. The controller then sets up and enables the integration and interoperability of the resources for the next environment and between environments, and powers on any applications to deploy the new environment (step 1500.16). The system state is updated in step 1500.17 when the next environment becomes available.

[0247] One-way communication to support monitoring FIG. 16A illustrates an exemplary embodiment in which a first controller 1601 operates as a main controller for setting up one or more controllers, such as 1601a, 1601b, and / or 1601b. The main controller 1601 may be used to generate multiple cloud hosts, systems, and / or applications as environments 1602, 1603, 1604, which may or may not depend on each other in operation, using the techniques described above with respect to controllers, such as controllers 200 / 1401 / 1501. As illustrated in FIG. 16A, IT systems, environments, clouds, and / or any combination(s) thereof may be generated as environments 1602, 1603, 1604. Environment 1602 includes a second controller 1601a, environment 1603 includes a third controller 1601b, and environment 1604 includes a fourth controller 1601c. The environments 1602, 1603, 1604 may each include one or more resources 1642, 1643, 1644, respectively. The resources may include one or more applications 1642, 1643, 1644 that may be running on them. These applications may connect to assigned resources, whether shared or not. These or other applications may run on one or more shared resources, over the Internet or in a pool 1660, which may include a shared application or application network. The applications may provide services to one or more of the users or environments or clouds. The environments 1602, 1603, 1604 may share resources or databases and / or may include or use resources in the pool 1660 that are specifically assigned to the particular environment. Various components of the system, including the main controller 1601 and / or one or more environments, may further be connectable to an external network 1615, such as an application network or the Internet.

[0248] There may be a connection between any resource, environment, or controller and another resource, environment, controller, or external connection that may be configured to be selectively enabled and / or disabled in the manner described with respect to Figures 13A-13E herein. For example, any resource, controller, environment, or external connection may be disabled or disconnected from the controller 1601, environment 1602, environment 1603, and / or environment 1604, resource, or application via the in-band management connection 270, the out-of-band management connection 270, or the SAN connection 280, or by physically disconnecting. As an example, the in-band management connection 270 between the controller 1601 and any of the environments 1602, 1603, 1604 may be disabled to protect the controller 1601. As another example, such in-band management connection(s) 270 may be selectively disabled or enabled during operation of the environments 1602, 1603, 1604. 13A-13E herein, by disabling or disconnecting the main controller 1601 from the environments 1602, 1603, 1604, the main controller 1601 may enable the environments 1602, 1603, 1604 to be created as clouds, which may then be separated from the main controller 1601 or other clouds or environments. In this sense, the controller 1601 is configured to create multiple clouds, hosts, or systems.

[0249] Using the disable or disconnect elements described herein, users may be allowed limited access to environments through the main controller 1601 for specific uses. For example, a developer may be provided access to a development environment. As another example, an application administrator may be limited to a specific application or application network. As another example, logs may be made visible through the main controller 1601 to collect data without compromising the main controller by the environments or controllers it generates.

[0250] After the main controller 1601 sets up the environment 1602, the environment 1602 is disconnected from the main controller 1601 and thus the environment 1602 may operate independently of the main controller 1601 and / or may be selectively monitored and maintained by the main controller 1601 or other applications associated with or executed by the environment 1602.

[0251] An environment, such as environment 1602, may be coupled to a user interface or console 1640 that allows a purchaser or user to access environment 1602. Environment 1602 may host the user console as an application. Environment 1602 may be accessed remotely by a user. Each environment 1602, 1603, 1604 may be accessed by a common or separate user interface or console.

[0252] FIG. 16B illustrates an exemplary system in which environments 1602, 1603, 1604 may be configured to write to another environment 1641, where, for example, a console (which may be any console that may be connected, either directly or indirectly, to environment 1641) may be used to view the logs. In this manner, environment 1641 may function as a log server to which one or more of environments 1602, 1603, 1604 write events. Main controller 1601 may then access log server 1641 to monitor events on environments 1602, 1603, 1604 without maintaining a direct connection with such environments 1602, 1603, 1604, as described below. Environment 1641 may further be configured to be selectively disconnected from main controller 1601 and read-only from other environments 1602, 1603, 1604.

[0253] The main controller 1601 may be configured to monitor some or all of its environments 1602, 1603, 1604 even if the main controller 1601 is disconnected from any of its environments 1602, 1603, 1604, as shown in FIG. 16C. FIG. 16C shows that the in-band management connection 270 between the main controller 1601 and the environments 1602, 1603, 1604 is disconnected, which may help protect the main controller 1601 if the environments 1602, 1603, 1604 are compromised. As shown in FIG. 16C, the out-of-band connection 260 may be maintained between the main controller 1601 and an environment such as 1602, even if the in-band connection 270 between the main controller 1601 and the environment 1602 is disconnected. Additionally, the environment 1641 may have a connection to the main controller 1601 that may be selectively enabled or disabled. The main controller 1601 may set up monitoring as a separate application in the environment 1641, which is separate or air-gapped from the environments 1602, 1603, 1604. The main controller 1601 may use one-way communication for monitoring. For example, logs may be provided through one-way communication from the environments 1602, 1603, 1604 to the environment 1641. Through such one-way writes and through a connection between the environment 1641 and the main controller 1601, the main controller 1601 may collect data through the environment 1641 to monitor the environments 1602, 1603, 1604 even if there is no in-band connection 270 between the main controller 1601 and the environments 1602, 1603, 1604, thereby mitigating the risk that the environments 1602, 1603, 1604 may compromise the main controller 1601. Access may be filtered or controlled and / or access may be independent of the Internet. For example, as shown in Figure 16D, when the in-band connection 270 between the main controller 1601 and the environment 1602 is connected, the main controller 1601 may control the network switch 1650 to disconnect the environment 1602 from an external network 1615, such as the Internet.When the environment 1602 is connected to the main controller 1601 by an in-band connection 270, the security of the main controller 1601 can be improved by disconnecting the environment 1602 from the external network 1615.

[0254] It should therefore be appreciated that the exemplary embodiment of Figures 16B-16D illustrates how the main controller can securely monitor the environments 1602, 1603, 1604 while minimizing exposure to those environments. Thus, the main controller 1601 can disconnect itself from the environments 1602, 1603, 1604 (or at least disconnect itself from the in-band link) while still maintaining a mechanism for monitoring those environments via the log server of the environment 1641, to which the environments 1602, 1603, 1604 may have one-way write access. Thus, if in the course of reviewing the logs of the environment 1641, the main controller 1601 discovers that the environment 1602 may be compromised by malware, the main controller 1601 may use SDN tools to isolate the environment 1602 such that only the out-of-band connection 260 exists (see, e.g., Figure 16C). Additionally, the controller 1601 may send a notification of the potential problem to an administrator of the environment 1602. The controller may further isolate the compromised environment 1602 by selectively disabling any connections (e.g., in-band management connections 270) between the compromised environment and any of the other environments 1603, 1604. In another example, the main controller 1601 may discover through logs that a resource in the environment 1603 is too hot. This may cause the main controller to intervene and migrate applications or services from the environment 1603 to another environment (whether an existing environment or a newly created environment).

[0255] The controller 1601 may further set up one or more similar systems according to the requirements of the buyer or user. As shown in FIG. 16E, a purchasing application 1650 may be provided, for example, on a console or otherwise, to allow a buyer to make a request to purchase and set up a cloud, host, system environment or application for the buyer. The purchasing application 1650 may instruct the controller 1601 to set up an environment 1602. The environment 1602 may include a controller 1601a that deploys or configures an IT system, for example, by allocating or assigning resources to the environment 1602.

[0256] 16F illustrates user interfaces 1632, 1633, 1634 that may be used in environments where environments 1602, 1603, 1604, respectively, operate as clouds and may or may not include a controller. User interfaces 1632, 1633, 1634 (corresponding to environments 1602, 1603, 1604, respectively) may each connect through a main controller 1601 that manages the connection between the user interfaces and the environments. Alternatively or additionally, interface 1640a (which may take the form of a console) may be directly coupled to environment 1602, interface 1640b (which may take the form of a console) may be directly coupled to environment 1603, and interface 1640c (which may take the form of a console) may be directly coupled to environment 1604. A user may use one or more of the interfaces to use an environment or a cloud, regardless of whether the connection to main controller 1601 is isolated, disconnected, or disabled.

[0257] System cloning and backup for change management support Some of the environments 1602, 1603, 1604 may be clones of typical setup software used by developers, or they may be clones of current working environments as a way of scaling, for example, cloning an environment in another data center in a different location to reduce latency due to location.

[0258] It should therefore be understood that a main controller that sets up systems and resources into separate environments or subsystems may enable cloning or backup of portions of an IT system. This may be used in testing and change management as described herein. Such changes may include, but are not limited to, changes to code, configuration rules, security patches, templates, and / or other changes. Global rules may include a subset that includes backup rules that may be used in change management as described in various examples herein. It should therefore be understood that backup rules (examples of which are described elsewhere herein) may be used in change management. An example of a system that implements backup rules is described in further detail with respect to Figures 21A-21J.

[0259] According to an exemplary embodiment, an IT system or controller described herein may be configured to clone one or more environments. The new or cloned environment may or may not have the same resources as the original environment. For example, it may be desirable or necessary to use an entirely different combination of physical and / or virtual resources in the new or near-cloned environment. It may be desirable to clone an environment to a different location or time period that may manage optimization of usage. It may be desirable to clone an environment to a virtual environment. When cloning an environment, the global system rules 210 and global templates 230 of the controller or main controller may include information on how to configure and / or run various types of hardware. Configuration rules in the system rules 210 may direct the placement and usage of resources to be more optimal for the resources and applications given the particular available resources.

[0260] The main controller structure provides the ability to set up systems and resources into separate environments or subsystems, provides structure for clone environments, provides structure for creating development environments, and / or provides structure for deploying a standardized set of applications and / or resources. Such applications or resources may include, but are not limited to, those that can be used, for example, to develop and / or run applications, or back up or restore from backups portions of IT systems and other disaster recovery applications (e.g., a system including a LAMP (apache, mysql, php) stack, a web front end and a server running react / redux, as well as resources running node.js and a mongo database and other standardized "stacks"). In some cases, the main controller may deploy an environment that is a clone of another environment, deriving configuration rules from a subset of the configuration rules used to create the original environment.

[0261] According to an exemplary embodiment, change management of a system or a subset of a system may be accomplished by cloning one or more environments and the configuration rules or a subset of configuration rules of such environments. For example, changes may be required to make code, configuration rules, security patches, changes to templates, hardware changes, adding / removing components and dependent applications, and other changes.

[0262] According to an exemplary embodiment, such changes to the system may be automated to avoid errors of direct manual entry of changes. Changes may be tested by a user in a development environment before automatically implementing the changes in a live system. According to an exemplary embodiment, a live production environment may be cloned by using the controller to automatically power on, provision, and / or configure an environment that is configured using the same configuration rules as the production environment. The clone environment may be allowed to run and be operational (while a backup environment is preferably left intact for emergency use in case changes need to be rolled back). This may be done using the controller to create, configure, and / or provision a new system or environment as described with reference to Figures 1-16F above using system rules 210, templates 230, and / or system states 220. The new environment may be used as a development environment to test changes that will later be implemented in the production environment. The controller may generate the infrastructure of such an environment from a software-defined structure in the development environment.

[0263] A production environment, as defined herein, means an environment that is dedicated to development and testing, i.e. an environment that is used to run a system, as opposed to a development environment.

[0264] When the production environment is cloned, the infrastructure or cloned development environment is configured and generated by the controller according to the global system rules 210, just like the production environment. Changes to the development environment may be made to code, templates 230 (either changes related to modifying existing templates or creating new templates), security and / or application or infrastructure configuration. Once the new changes implemented in the development environment are prepared as required through development and / or testing, the system automatically applies the changes to the development environment, which is then run or deployed as the production environment. The new system rules 210 are then uploaded to either the controller of the environment and / or the main controller, which applies the system rule changes to the particular environment. The system state 220 may be updated in the controller and the added or modified templates 230 may be implemented. Thus, a complete system knowledge of the infrastructure may be maintained by the development environment and / or the main controller, along with the ability to recreate it. Complete system knowledge as used herein may include, but is not limited to, system knowledge of resource states, resource availability, and system configuration. Complete system knowledge may be gathered by the controller from system rules 210, system state 220, and / or by querying resources using in-band management connection(s) 270, out-of-band management connection(s) 260, and SAN connection(s) 280. Resources may be queried to determine, among other things, utilization, configuration state, or availability of resources, networks, or applications.

[0265] The cloned infrastructure or environment may be software defined via system rules 210, but this is not required. The cloned infrastructure or environment may or may not generally include a front end or user interface and one or more allocated resources. The allocated resources may or may not include compute resources, networking resources, storage resources, and / or application networking resources. The environment may or may not be configured as a front end, middleware, and database. The service or development environment may be booted with system rules 210 of the production environment. The infrastructure or environment allocated for the controller to use may be software defined specifically for the clone. Thus, the environment may be deployable via system rules 210 and may be cloneable by similar means. The clone or development environment may be automatically set up by a local or main controller using system rules 210 before or when a change is desired.

[0266] The production environment data may be written to read-only data storage until the development environment is separated from the production environment, after which it will be used by the development environment in the development and testing process.

[0267] A user or client may make and test changes in the development environment while the production environment is online. Data in the data storage may be changed during development and the changes are tested in the development environment. In volatile or writeable systems, a hot sync with the data in the production environment may also be used after the development environment is set up or deployed. The desired changes to the system, application and / or environment may be made to the development environment and tested in the development environment. The desired changes are then made to the system rules 210 scripts and a new version is created for the environment or the entire system and the main controller.

[0268] According to another exemplary embodiment, the newly developed environment may then be automatically implemented as the new production environment while the previous production environment remains or is fully functional, thus allowing a reversion to the production environment in its previous state without losing significant amounts of data. The development environment is then booted with the new configuration rules in system rules 210, and the database is synchronized with the production database and switched to a writeable database. The original production database may then be switched to a read-only database. If it is desired to revert to the previous production environment, the previous production environment is maintained as a copy of the previous production environment for as long as necessary.

[0269] An environment may be configured as a single server or instance, which may include physical and / or virtual hosts, networks, and other resources. In another exemplary embodiment, an environment may be multiple servers, including physical and / or virtual hosts, networks, and other resources. For example, there may be multiple servers forming a load-balanced Internet-facing application, which may be connected to multiple API / middleware applications, which may be hosted on one or more servers. The database of the environment may comprise one or more databases to which the API communicates queries within the environment. The environment may be constructed from system rules 210 in a static or volatile form. The environment or instance may be virtual, physical, or a combination of each.

[0270] The configuration rules for an application or a system in system rules 210 may specify different compute backends (e.g., bare metal, AMD epyc server, Intel Haswell on qemu / kvm) and may include rules on how to run an application or service on a new compute backend. Thus, for example, an application may be virtualized if there is a situation where the availability of resources for testing is reduced.

[0271] Using and following the examples described herein, a test environment may be deployed on virtual resources where the original environment uses physical resources. Using the controller described herein with reference to Figures 1-18B and as further described herein, a system or environment may be cloned from a physical environment to an environment that may or may not comprise virtual resources in whole or in part.

[0272] 17A illustrates an exemplary embodiment in which system 100 comprises a controller 1701 and one or more environments, e.g., 1702, 1703, 1704. System 100 may be a static system, i.e., a system in which active user data does not constantly change the state of the system or frequently manipulate data, e.g., a system that hosts only static web pages. The system may be coupled to a user (or application) interface 110.

[0273] The controller 1701 may be configured in a manner similar to the controllers 200 / 1401 / 1501 / 1601 described herein and may similarly include global system rules 210, controller logic 205, templates 230, and system state elements 220. The controller 1701 may be coupled to one or more other controllers or environments in a manner such as described with reference to Figures 14A-16F herein. The global rules 210 of the controller 1701 may include rules that may manage and control other controllers and / or environments. Such global rules 210, controller logic 205, system state 220, and templates 230 may be used to set up, provision, and deploy a system or environment through the controller 1701 in a manner similar to that described with reference to Figures 1-16F herein. Each environment may be configured with a subset of the global system rules 210 that define the behavior of the environment, including with respect to other environments.

[0274] The global system rules 210 may also include change management rules 1711. The change management rules 1711 include a set of rules and / or instructions that may be used when changes to the system 100, the global system rules 210, and / or the controller logic 205 may be desired. The change management rules 1711 may be configured to allow a user or developer to develop a change, test the change in a test environment, and then implement the change by automatically converting the change into a new set of configuration rules in the system rules 210. The change management rules 1711 may be a subset of the global system rules 210 (as shown in FIG. 17A ) or may be separate from the global system rules 210. The change management rules may use a subset of the global system rules 210. For example, the global system rules 210 may include a subset of environment creation rules configured to create a new environment. Change management rules 1711 may be configured to set up and use a system or environment configured and set up by controller 1701 to copy and clone some or all aspects of system 100. Change management rules 1711 may be configured to allow testing of new changes proposed to the system before implementation by using a clone of the system for testing and implementation. Change management 1711 may include or use backup rules as described below.

[0275] A clone 1705 as shown in FIG. 17A may include rules, logic, applications, and / or resources of a particular environment or part of the system 100. The clone 1705 may include similar or different hardware than the system 100 and may or may not use virtual resources. The clone 1705 may be set up as an application. The clone 1705 may be set up and configured using configuration rules in the system rules 210 of the system 100 or the controller 1701. The clone 1705 may or may not include a controller. The clone 1705 may include allocated networking resources, computational resources, application network and / or data storage resources as described in more detail above. Such resources may be allocated using change management rules 1711 controlled by the controller 1701. The clone 1705 may be coupled to a user interface that allows a user to make changes to the clone 1705. The user interface may be the same as or different from the user interface 110 of the system 100. The clone 1705 may be used for the entire system 100 or for a portion of the system 100, such as one or more environments and / or controllers. The clone 1705 may or may not be a complete copy of the system 100. The clone 1705 may be coupled to the system 100 via an in-band management connection 270, an out-of-band management connection 260, and / or a SAN connection 280, which may be selectively enabled and / or completely disabled and / or converted to a unidirectional read and / or write connection. Thus, when the clone environment 1705 is separated from the production environment during testing or until the clone environment 1705 is ready to be brought online as the new production environment, the connection to the data in the clone environment 1705 may be changed to make the clone data read-only. For example, if the clone 1705 has a data connection to the environment 1702, this data connection may be made read-only for the separation.

[0276] Optional backup 1706 may or may not be used for the entire system or for portions of the system, such as one or more environments and / or controllers. When performing change management functions, individual services may also be backed up. Backup of services may be performed using backup rules, for example, as described below with reference to Figures 21A-21J. Backup 1706 may include networking resources, computational resources, application network resources, and / or data storage resources, as described in more detail above. Backup 1706 may or may not include a controller. Backup 1706 may be a complete copy of system 100. Backup 1706 may be set up as an application or using similar or different hardware than system 100. Backup 1706 may be coupled to system 100 via in-band management connection 270, out-of-band management connection 260, and / or SAN connection 280, which may be selectively enabled and / or disabled completely, and / or converted to a unidirectional read and / or write connection.

[0277] FIG. 17B illustrates an exemplary process flow for using the clone and backup system of FIG. 17A in system change management. At step 1785, a user or management application initiates a change to the system. Such changes may include, but are not limited to, code, configuration rules, security patches, changes to templates, hardware changes, adding / removing components and / or dependent applications, and other changes. At step 1786, controller 1701 sets up the environment in the manner described with respect to FIGS. 14A-16F to become clone environment 1705 (where the clone environment may have its own new controller or may use the same controller as for the original environment).

[0278] In step 1787, the controller 1701 may use global rules 210, including change management rules 1711, to clone all or a portion of one or more environments of the system (e.g., a "production environment") to a clone environment 1705 (e.g., where the clone environment 1705 may function as a "development environment"). The controller 1701 may extract data using backup rules 2104, which may be later restored using the backup rules, as described herein with reference to Figures 21A-21J. Thus, the controller 1701 identifies and allocates resources, and uses the system rules 210 to set up and allocate clone resources, and copies any of the data, configurations, code, executables, and other information required to launch the application from the environment to the clone. In step 1788, the controller 1701 optionally backs up the system by setting up another environment (with or without a controller) to act as a backup 1706 using the configuration rules in the system rules 210 and copies the templates 230, controller logic 205 and global rules 210.

[0279] After the clone 1705 is created from the production environment, the clone 1705 may be used as a development environment where changes to the clone's code, configuration rules, security patches, templates, and other changes may be made. At step 1789, the changes to the development environment may be tested prior to implementation. During testing, the clone 1706 may be isolated from the production environment (system 100) or other components of the system. This may be accomplished by having the controller 1701 selectively disable one or more of the connections between the system 100 and the clone 1706 (e.g., by disabling the in-band management connection 270 and / or by disabling the application network connection). At step 1790, it is determined whether the modified development environment is ready. If at step 1709, it is determined that the development environment is not yet ready (which is a decision typically made by the developer), the process flow returns to step 1789 for further changes to the clone environment 1705. If, at step 1790, it is determined that the development environment is ready, then at step 1791 the development and production environments may be switched. That is, the controller may change the development environment 1705 to the new production environment and maintain the previous production environment until the transition to the development / new production environment is complete and in a good state.

[0280] Figure 18A illustrates another exemplary embodiment of a system 100 that may be set up and used in system change management. In the example of Figure 18A, the system 100 includes a controller 1801 and one or more environments 1802, 1803, 1804, 1805. The system is shown with a clone environment 1807 and a backup system 1808. Backup and data recovery may be performed using backup rules described elsewhere herein. Examples of management of backup systems are further described herein with reference to Figures 21A-21J.

[0281] The controller 1801 may be configured in a manner similar to the controllers 200 / 1401 / 1501 / 1601 / 1701 described herein and may include elements of global system rules 210, controller logic 205, templates 230, and system states 220. The controller 1801 may be coupled to one or more other controllers or environments in a manner such as described with reference to Figures 14A-16F herein. The global rules 210 of the controller 1801 may include rules that may manage and control other controllers and / or environments. Such global rules 210, controller logic 205, system states 220, and templates 230 may be used to set up, provision, and deploy a system or environment through the controller 1801 in a manner similar to that described with reference to Figures 1-17B herein. Each environment may be configured with a subset of the global rules 210 that define the behavior of the environment, including the behavior with respect to other environments.

[0282] The global rules 210 may also include change management rules 1811. The change management rules 1811 may include a set of rules and / or instructions that may be used when changes to the system, global rules, and / or logic are desired. The change management rules may be configured to allow a user or developer to develop changes, test the changes in a test environment, and then implement the changes by automatically converting the changes to a new set of configuration rules in the system rules 210. The change management rules 1811 may be a subset of the global system rules 210 (as shown in FIG. 18A ) or may be separate from the global system rules 210. The change management rules 1711 may use a subset of the global system rules 210. For example, the global system rules 210 may include a subset of environment creation rules configured to create a new environment. The change management rules 1811 may be configured to set up and use a system or environment set up and deployed by the controller 1801 to copy and clone some or all aspects of the system 100. Change management rules 1811 may be configured to allow testing of proposed new changes to the system before implementation by using a clone of the system for testing and implementation. Change management rules 1811 may include or use backup rules described elsewhere herein. Backup rules may extract data using backup rules 2104, which may later be restored using backup rules described with reference to Figures 21A-21J herein.

[0283] 18A, the clone environment 1807 may include a controller 1807a having rules, controller logic, templates, system state data, and assigned resources 1820 that may be assigned and set up to one or more environments according to the global system rules 210 and change management rules 1811 of the controller 1801. The backup system 1808 may further include a controller 1808a having rules, controller logic, templates, system state data, and assigned resources 1821 that may be assigned and set up to one or more environments according to the global system rules 210 and change management rules 1811 of the controller 1801. The system may be coupled to a user (or application) interface 110 or another user interface.

[0284] The clone environment 1807 may include rules, logic, templates, system state, applications, and / or resources of a portion of a particular environment or system. The clone 1807 may include similar or different hardware than the system 100, and the clone 1807 may or may not use virtual resources. The clone 1807 may be set up as an application. The clone 1807 may be set up and configured using configuration rules in the system rules 210 of the system 100 or the controller 1801 for the environment. The clone 1807 may or may not include a controller and may share a controller with the production environment. The clone 1807 may include allocated networking, computational, application network, and / or data storage resources, as described in more detail above. Such resources may be allocated using change management rules 1811 controlled by the controller 1801. The clone 1807 may be coupled to a user interface that allows a user to make changes to the clone 1807. The user interface may be the same as or different from the user interface 110 of the system 100 .

[0285] The clone 1807 may be used for an entire system or a portion of a system, such as one or more environments and / or controllers. In an exemplary embodiment, the clone 1807 may include a hot standby data resource 1820a coupled to the data resources 1820 of the environment 1802. The hot standby data resource 1820a may be used during setup of the clone 1807 and during testing of changes. The hot standby data resource 1820a may be selectively disconnectable or isolated from the storage resources 1820 during change management, for example, as described herein with respect to FIG. 18B. The clone 1807 may or may not be a complete copy of the system 100. The clone 1807 may be coupled to the system 100 via an in-band management connection 270, an out-of-band management connection 260, and / or a SAN connection 280, which may be selectively enabled and / or disabled completely, and / or converted to a unidirectional read and / or write connection. Therefore, when the cloned environment 1807 is separated from the production environment during testing, or until the cloned environment is ready to be brought online as the new production environment, connections to volatile data in the cloned environment 1807 may be changed to make the cloned data read-only.

[0286] When switching from an old production environment to a new production environment, the controller 1801 may instruct front ends, load balancers, or other applications or resources to point to the new production environment. Thus, users, application resources, and / or other connections may be redirected when the change is made. This may be accomplished by methods including, but not limited to, changing the list of ip / ipoib addresses, infiniband GUIDs, dns servers, infiniband partitions / opensm configurations, or software defined networking (SDN) configuration changes that may be accomplished by sending instructions to networking resources. The front ends, load balancers, or other applications and / or resources may point to systems, environments, and / or other applications, including, but not limited to, databases, middleware, and / or other backends. Such load balancers may be used for change management to switch from the old production environment to the new environment.

[0287] Clones 1807 and backups 1808 may be set up and used in managing aspects of changes to the system. Such changes may include, but are not limited to, code, configuration rules, security patches, changes to templates, hardware changes, adding / removing components and / or dependent applications, and other changes. Backups 1808 may be used for the entire system or for one or more environments and / or portions of the system, such as controller 1801. Backups 1808 may include networking resources, computational resources, application network and / or data storage resources, as described in more detail above. Backups 1808 may or may not include a controller. Backups 1808 may be a complete copy of system 100. Backups 1808 may include data necessary to reconstruct the system / environment / application from the configuration rules contained in the backup and may include all application data. Backups 1808 may be set up as applications or using similar or different hardware to system 100. Backup 1808 may be coupled to system 100 via in-band management connection 270, out-of-band management connection 260, and / or SAN connection 280, which may be selectively enabled and / or disabled and / or converted to a unidirectional read and / or write connection.

[0288] Figure 18B is an exemplary process flow illustrating the use of the system of Figure 18A in change management, particularly where the system of Figure 18A includes volatile data or where the database is writable. Such a database may be part of the storage resources used by the environments in the system. At step 1870, the system is deployed using global system rules (including the production environment).

[0289] Next, in step 1871, the production environment is cloned using the global system rules 210, including change control rules 1811, and resource allocation by the main controller 1801 or a controller in the cloned environment to create a read-only environment where the cloned environment is disabled from writing to the system. The cloned environment can then be used as a development environment.

[0290] In step 1872, hot standby 1820a is activated and allocated to clone environment 1807 to store any volatile data that is changed in system 100. The clone data is updated and the new version in the development environment can be tested with the updated data. Hot sync data may be turned off at any time. For example, hot sync data may be turned off when writes from the old or production environment to the development environment are being tested.

[0291] Next, in step 1873, the user may make changes using the cloned environment 1807 as a development environment. Next, in step 1874, the changes to the development environment are tested. In step 1875, it is determined whether the modified development environment is ready (such a determination would typically be made by the developer). If in step 1875 it is determined that the changes are not ready, then process flow may return to step 1873 so that the user may go back and make other changes to the development environment. If in step 1875 it is determined that the changes are ready to go live, then process flow proceeds to step 1876 where configuration rules are updated within the system or controller for the particular environment and used to deploy the new updated environment.

[0292] In step 1877, the development environment (or new environment) may then be modified and redeployed in the desired final configuration with the desired resource and hardware allocation before going live. In a next step 1878, the write capabilities of the original production environment are disabled and the original production environment becomes read-only. While the original production environment is read-only, as part of 1878, any new data from the original production environment (or possibly also the new production environment) may be cached and identified as migration data. As an example, the data may be cached in a database server or other suitable location (e.g., a shared environment). The development environment (or new environment) and the old production environment are then switched in step 1879, with the development environment (or new environment) becoming the production environment.

[0293] After this switch, the new production environment is made writable in step 1880. If, in step 1881, the new production environment is deemed to be functioning as determined by the developer, any data lost during the switch process (such data having been cached in step 1878) may be written to the new environment and verified in step 1884. After such verification, the change is complete (step 1885).

[0294] If step 1881 results in a determination that the new production environment is not functioning (e.g., an issue is identified that requires the system to be reverted to the old system), then in step 1882 the environment is reverted and the old production environment becomes the production environment again. As part of step 182, the configuration rules of the target environment in controller 1801 are reverted back to the previous version that was used for the production environment that is now being reverted.

[0295] In step 1883, database changes may be determined, for example using cached data, and the data is restored to the old production environment with the old configuration rules. To support step 1883, the database may maintain a log of changes made to the database so that step 1883 can determine changes that may need to be reverted. A backup database that tracks and times the cached data may be used to cache the data as described above, and the clock may be turned back to determine what changes have been made. Snapshots and logs may be used for this purpose.

[0296] After restoring the cache data in 1883, if it is desired to start again, the process may return to step 1871.

[0297] The example change management systems described herein may be used, for example, when updating, adding, or removing hardware or software, when patching software, when a system failure is detected, when migrating hosts during hardware failure or detection, for dynamic resource migration, for changing configuration rules or templates, and / or when making any other system related changes. The controller 1801 or the system 100 may be configured to detect failures and upon detection, may automatically implement change management rules or existing configuration rules on other hardware in the system available to the controller. Examples of failure detection methods that may be used include, but are not limited to, pinging hosts, querying applications, and running various tests or test suites. The change management configuration rules described herein may be implemented upon detection of a failure. Such rules may trigger automatic generation of a backup environment, automatic migration of data or resources implemented by the controller upon detection of a failure. The selection of backup resources may be based on resource parameters. Such resource parameters may include, but are not limited to, usage information, speed, configuration rules, and data capacity and usage.

[0298] Whenever a change occurs, as described herein, the controller creates a log of the changes and what was actually performed. For security or system updates, the controller described herein may be configured to automatically turn on and off and update the IT system state according to configuration rules. The controller may turn off resources to save power. The controller may turn on or migrate resources for different efficiencies at different times. During migration, a backup or copy of the environment or system may be made according to configuration rules. In case of a security breach, the controller may isolate and shut down the attacked area.

[0299] Configuring and controlling service dependencies 1-18, where the system 100 is augmented with interrelated services (or applications) represented by corresponding service modules 1901, 1902 on one or more resources 1910. The service modules 1901, 1902 may take the form of computer executable code that provides services such as authentication, email, webmail, web services, middleware, database, and / or other services. When referring to each, the service 1901 may be referred to as service A and the service 1902 may be referred to as service B.

[0300] The system of Figure 19A may be connected to an external network 1980 and / or an application network 390, which may be disabled and enabled as described in Figures 13A-13E. The services 1901, 1902 are configured by the controller 200 as resources or applications as described in various embodiments herein with reference to Figures 1-18.

[0301] Services 1901, 1902 can be controlled by the controller 200 and may interoperate through a common API 1903. Services 1901, 1902 can use the common API 1903 to resolve dependencies. For example, a web application needs an http server. A service with apache or nginx may have a "web server common API" that may make that server serve the content of the webapp and proxy the information back to the application. Services 1901, 1902 and API 1903 may be coupled directly through a management network or through a management connection (e.g., 260 and / or 270) to the controller 200 or any other network connection between the controller 200, services 1901, common API 1903, and services 1902.

[0302] Common API 1903 may execute on or be responsive to one or more of services 1901, 1902, controller 200, or other resources of system 100. Service A of service module 1901 may be a dependent service configured to be called through common API 1903 by dependent service B on service module 1902 to perform one or more functions. A dependent service is a service that can satisfy a dependency relationship of another service (in which case the other service is the "dependent service"). A dependent service may also be an optional dependent service.

[0303] The services 1901, 1902 may be configured or set up by the controller 200 to securely interoperate with each other.

[0304] An example of the interoperation of the services and controllers of FIG. 19A is described with reference to the flow of FIG. 19B. A service may be started, for example, by the controller 200 using the configuration rules described herein (see 19.1). The controller 200 resolves dependencies as described in the figures herein (see 19.2). A service may have a set of dependencies listed in its specification. As an example, this can be done using a json specification of the service. The system may further provide the user with a way to satisfy the dependencies using dependency resolution similar to how a package manager works. As another example, the system may suggest to the user to install the dependent service or to use / select an existing dependent service. Dependent service B calls dependent service A through the common API 1903 (see 19.3). This call may be a call to configure service A to support service B or a call to use some of the functionality of service A. The common API 1903 translates to dependent service A (1901) and instructs dependent service A to execute command(s) (see 19.4). The conversion can be done by one of the services or the controller 200 making an API call (and where the function of the API may be to call other API functions on a different API).

[0305] According to some exemplary embodiments described herein, a system having a controller 200 and a dependent service 1901 and a dependent service 1902 may be provided with additional security. This additional security is useful when multiple services may be simultaneously connected to an in-band management connection 270 and communicate directly with each other. Such additional security may be provided during configuration, reconfiguration, and / or operation based on and / or using the global system rules 210, logic 205, templates 230, and / or system state 220 of the controller. Additional security may be provided in some exemplary embodiments where the services 1901, 1902 are communicating over an in-band management connection 270 or other network or interconnect. According to some exemplary embodiments, the dependent service 1901 is configured to ask the controller for validation of the dependent service 1902. This may include verifying the identity of the dependent service 1902 or verifying the identity of the service executing the command on the API. According to some example embodiments, a dependent service is configured to ask the controller 200 for permission to perform its functions, tasks, and / or tasks, functions, or combinations thereof on behalf of a particular dependent service(s). The dependent service may additionally or alternatively be provisioned with a permission, or a set of permissions, by the controller 200 when the dependent service is configured or reconfigured. The permission set of the dependent service may also be updated. For example, the permission set may be updated when a dependent service is added.

[0306] An example of authentication and authorization provided between services is described in the flow shown in FIG. 19C. In step 19.11, the controller 200 provisions a key or key pair for the service during configuration, thereby enabling authentication between the service and the controller 200. This step can be performed for each service in the system. A dependent service that requests execution by a dependent service is validated by the dependent service requesting validation from the controller. The identity of the service and the data sent to and from the service may be validated, for example, by mutual tls authentication, public key authentication, other forms of cryptography, any network-based validation technique (including but not limited to vlans, vxlans, partitions, etc.), and / or a combination thereof. Virtual networks and partitions can be used to divide the network into mini-networks, such as Infiniband partitions. This allows for a scenario where a port, for example, on partitions 4 and 15, can only talk to things on partitions 4 and 15. According to some variations, the controller 200 can be used as a key distribution center while maintaining validation or authentication within the service modules 1901, 1902 independent of the controller 200. During configuration of a service, the controller may provision the service with a key or key pair that may include a public key and / or a private key that directly or indirectly enables authentication between the service and the controller 200. According to one example, the controller 200 can store the public key and delete or revoke the provisioned private key. As a further example, the service may generate its own key such that public keys from the service can be identified, recognized, and / or authenticated by the controller 200. In this further example, since the controller 200 provided the initial public key of the service, the service has the ability to send a trusted public key to the controller 200 that does not have knowledge of the current private key, and the service authenticates with the service's original key pair and shares the new public key with the controller 200.

[0307] In step 19.12, the dependent service (Service B) calls the dependent service (Service A) through the common API 1903 to perform a function. The dependent service (Service A) then authenticates the dependent service (Service B) through the controller 200. According to one example, the dependent service may contact the controller 200, which may authenticate the dependent service making the request using a public key provided by the dependent service. As described above, the dependent service may obtain the public key in step 19.11. The dependent service may also generate a new key pair (public key + private key) and may use the old key pair to prove that the new public key is genuine, since it is known that the controller 200 trusts the old public key (assuming the controller 200 created the public and private keys). The dependent service (Service B) may authenticate the dependent service in a similar manner (19.13).

[0308] In step 19.14, the depended upon service (Service A) may also establish permission for the dependent service (Service B) to perform the function before executing the function. For example, permission may be established by the depended upon service by asking the controller 200 whether permission is possible. As another example, permission may be established through a permission list loaded by the controller 200 onto the depended upon service (Service A).

[0309] FIG. 19D illustrates an example of an enhanced security methodology used with interoperability services. At step 19.21, dependent service B may be created, for example, using controller 200 and / or template 230 described herein. At step 19.22, when dependent service B is executed, controller 200 may verify and / or disable connections to external network 1910 and / or application network 390 as described with respect to various embodiments herein (see, for example, FIGS. 13A-13E). For example, an implementer may desire to disable management connections while the service is open to a network such as the Internet. This provides further isolation and security, as discussed above. In such a case, a cloud API (or, in other cases, out-of-band management connection 260) may be used to switch in-band management connection 270. At step 19.23, dependent service B executes an API command to request a service or function from dependent service A. This step may also be completed by the dependent service B making a request to the controller 200, which executes the command through the common API (see 1903). In step 19.24, the dependent service A validates the identity of the dependent service B and the permission to perform the service or function for service B. As an example, this step 19.24 may be performed by service A validating the permission of service B. As another example, this step 19.24 may be performed by service A verifying that it has permission to provide a service to service B. In either case, the service being modified by the other service may verify that the other service is authorized to make those modifications. If authenticated and authorized, the dependent service A may execute the service or function specified in the command (see 19.25).At step 19.26, management connections such as out-of-band management 260, in-band management 270, or SAN 280 may optionally be disconnected for additional security as described herein with reference to Figures 13A-13E. At step 19.27, connections to external network(s) 1980 and / or application network(s) 390 may then be re-enabled if the connections were disabled at 19.22.

[0310] FIG. 19E illustrates an exemplary system 100, such as that described with respect to FIGS. 19A-19D, in which a set of cleanup rules 1904 is included in the controller 200. The cleanup rules 1904 may be embodied in the controller 200 as its own set of rules, or may be embodied in the global system rules 210, the controller logic 205, the template 230, or a combination thereof. The cleanup rules 1904 include a set of instructions and rules to follow when a service is deleted. As an example, the cleanup rules 204 may be included in a template 230 used to set up a service, where rules associated with the service are loaded into the service during setup, or the rules associated with the service are used to generate cleanup rules specific to the service. For example, a DNS record may be added to a DNS service by a mail service. If the mail service is deleted, the DNS service may remove the DNS record from the mail service.

[0311] Cleanup rules 1904 may be used to identify modifications made to dependent services by dependent services and enable the deletion, removal, and / or undo of these modifications when the dependent service is deleted or disabled. Figure 19F illustrates an example process flow for creating cleanup rules. For example, Figure 19F illustrates how modifications may be identified, e.g., logged and / or tracked, for removal when a dependent service is deleted.

[0312] As shown in FIG. 19F, in step 19.31, a command is issued from the dependent service (Service B) to the API 1903 to invoke the dependent service (Service A) to perform the function. In step 19.32, the validity of the dependent service (Service B) is verified and permissions are verified as described in FIG. 19A-19D. If modifications are or should be made to the dependent service (Service A) when performing the function, in step 19.33, corresponding cleanup rule(s) and / or cleanup command(s) corresponding to the API command are searchably added (or associated with the cleanup rule) to one or more of the dependent service (Service B), the dependent service (Service A), or the controller 200. The cleanup rule or cleanup command can identify modifications for the next cleanup upon removal of the dependent service (Service A). According to various exemplary embodiments, the dependent service or the dependent service may have an associated cleanup rule. The cleanup rule may also be configured to modify the connection between the services. A dependent service may have cleanup rules that may correspond to each dependent service with which the dependent service has a relationship. The cleanup rules may also be generated from logged API commands. Individual cleanup steps may be executed one by one as they are derived from the log of API commands.

[0313] Cleanup rules may be used when a dependent service is deleted, changed, and / or modified. Cleanup rules may also be used when a dependent service makes changes on a dependent service. As shown in the example process flow of FIG. 19G, in step 19.41, a decision is made to delete a service. In step 19.42, the controller logic 205 checks the dependent services of the service being deleted (the "delete service"). These dependencies may be recursive and may be discovered through recursive dependency resolution. The dependent services may be identified in the dependent service's service template 230 or in the system state 220 or other relevant database, as described with respect to FIGS. 2A-2K herein. If step 19.43 concludes that there is a dependent service, the controller may find an alternative way to satisfy the dependency (e.g., as described in FIG. 2K) (see 19.44). If the controller 200 does not identify an alternative way to satisfy the dependency (see 19.45), the user / administrator may be notified to resolve, for example, by adding a new dependent service, by canceling the service deletion, or by deleting the dependent service in a similar manner (see 19.46). If the controller identifies an alternative way to satisfy the dependency, at step 19.44, the controller 200 may modify the dependency and may update and / or reconfigure the corresponding controller components (templates 230, rules 210, logic 205, system state 220, etc.) and components of the dependent service and / or the dependent service. Clean-up rules may then be followed, at step 19.47. If, at the conclusion of step 19.43, there is no dependent service, the process flow may also proceed to step 19.47, where clean-up rules may be followed. As described above, the clean-up rules identify modifications made to the dependent service by the dependent service. Thus, in step 19.47, these cleanup rules can be processed to effect the deletion, removal, and / or undo of these modifications.As part of step 19.47, files that were created in use by the delete service are removed from dependent services.

[0314] Provision storage resources to compute resources Figure 20A illustrates an exemplary system including a controller 200 having one or more computing resources 310 hosting one or more services that utilize storage on one or more storage resources 410. Figure 21A further illustrates that when physical service hosts are permitted to communicate with the SAN 280, it is desirable for such physical service hosts to only contact remote storage that they are authorized to use. It is therefore desirable for the system to prevent malicious parties 2002 from unauthorized access to system resources such as storage resources 410 (see Figure 20A).

[0315] According to an example described in the process flow of FIG. 20B, the controller 200 provisions storage credentials to the compute resource (see 20.10). By way of example, the storage credentials may take the form of, but are not limited to, a password, a passphrase, a Challenge Handshake Authentication Protocol (CHAP) key, an encryption key, a certificate, or a combination thereof. CHAP is an authentication technique for remote storage such as iSCSI / i...

Claims

1. An information technology (IT) computer system comprising: a controller configured to automatically manage the system based on a number of system rules, a system state of the system, and a number of templates; a resource for connecting to the controller, the resource including a first service and a second service, the first service and the second service having a mutual dependency, the first service including a dependent service for the second service, and the second service including a dependent service for the first service; an application program interface (API) that interfaces the first and second services with each other and with the controller; Including, the templates include a template for the second service having a list of dependencies required for the setup of the second service, the listed dependencies including the first service; The automatic management by the controller includes configuring the second service based on the dependency list from a template of the second service and managing interoperability of the first service with the second service through the API. Information Technology (IT) Computer Systems.

2. The system of claim 1 , wherein the second service is configured to issue a call to the first service through the API of the first service to perform an operation.

3. The system of claim 1 , wherein the first service is configured to ask the controller to verify the validity of the second service in order to perform an operation on behalf of the second service.

4. The system of claim 3 , wherein the controller is further configured to validate the second service based on at least one of mutual tls authentication, public key authentication, and / or network-based validation.

5. The system of any preceding claim, wherein the first service is configured to perform operations on behalf of the second service, subject to permission from the controller.

6. The system of any preceding claim, wherein the controller is further configured to provision cryptographic keys to the first and second services for use in validating the first and second services.

7. 7. The system of claim 6, wherein the encryption keys include a different key pair for each of the first and second services, each key pair including a public key and a private key.

8. 8. The system of claim 7, wherein the controller is further configured to delete copies of the private key after provisioning the private key to the first and second services, and wherein the controller is configured to manage validation of the first and second services based on the public key.

9. The system of any preceding claim, wherein the controller is further configured to disconnect the resource from any external network when the first and / or second service is being configured by the controller.

10. 10. The system of claim 9, wherein the controller is further configured to reconnect the resources to any disconnected external networks after the first and / or second services are configured by the controller.

11. The system of any one of claims 9 to 10, further comprising at least one of an in-band connection, an out-of-band connection, and / or a storage area network connection between the resource and the controller, the controller being further configured to disconnect the resource from the in-band connection, the out-of-band connection, and / or the storage area network connection when the first and / or second services are being configured by the controller.

12. 12. The system of claim 11, wherein after the first and / or second services are configured by the controller, the controller is further configured to reconnect the resources to the disconnected in-band connection, out-of-band connection, and / or storage area network connection.

13. The system of any preceding claim, wherein the controller is further configured to resolve dependencies between the first service and the second service.

14. The system of any of claims 1 to 13, wherein the controller is further configured to manage backup operations of one or more components of the system, including services that have dependencies on each other.

15. 1. An information technology (IT) method for use in a computer system including a controller and a resource coupled to the controller, the resource including a first service and a second service, the first and second services having a dependency relationship with each other, the first service including a dependent service on the second service, and the second service including a dependent service on the first service, the method comprising: automatically managing the system based on a number of system rules, a system state of the system, and a number of templates, the templates including a template of the second service having a list of dependencies required for setup of the second service, the listed dependencies including the first service; interfacing the first and second services with each other and with the controller via an application program interface (API); Including, and automatically managing the second service based on the dependency list from a template of the second service, and managing interoperability of the first service with the second service through the API. method.

Citation Information

Patent Citations

  • Information processing device, service system and program

    JP2018041251A

  • Monitoring of application program interface integrations

    US20190018760A1

  • Software update program, software update device, and software update method

    WO2006040810A1