From e9180fcf2c1bfbf604aa80cbced59fd27f25f8c3 Mon Sep 17 00:00:00 2001
From: Anthony Dillon Do one thing and do it well
- Keep each operator as simple as possible, then compose them to create rich application graph topologies for complex solutions with a simple, consistent experience and much less YAML.
+ Juju operator integration allows us to keep each operator as simple as possible, then compose them to create rich application graph topologies that support complex scenarios with a simple, consistent experience and much less YAML. The UNIX philosophy of ‘doing one thing well’ applies to large-scale operations code too, and the benefits of clarity and reuse are exactly the same. Small is beautiful.
Operators for traditional apps on bare metal, VMWare and IAAS Universal operators for K8s as well as traditional Linux and Windows apps on bare metal, VMWare and IAAS
- Embrace the operator pattern for your entire business, including legacy estate. Dramatically reduce maintenance and operations costs for traditional workloads without re-platforming to K8s. The Juju Operator Lifecycle Manager (OLM) uniquely supports both container and machine-based apps, with seamless integration between them.
+ Juju allows you to adopt the operator pattern for your entire estate, including legacy apps. Model-driven operations dramatically reduce maintenance and operations costs for traditional workloads without re-platforming to K8s. Once charmed, legacy apps become multi-cloud ready, too. The Juju Operator Lifecycle Manager (OLM) uniquely supports both container and machine-based apps, with seamless integration between them.
Portable operations code, tested on cloud and on premise An application graph drives pre-packaged integration code in the operator
- Deploy any scenario on any cloud, and integrate easily across cloud boundaries. Achieve full multi-cloud independence with the operator pattern — not only for containers but also for legacy physical, virtual and cloud machine estate.
+ Custom integration code is the biggest waste of time in enterprise operations. Our mission is to share integration code along with ops code, so we don’t just drive the app lifecycle with operators, we use the Juju OLM’s declarative operator integration to share and reuse open source integration code for better security and cost.
Application graph drives integration code packaged in the operator Portable operations code tested on every major public cloud, and on premise too
- The biggest waste of enterprise time is custom integration. Don’t just drive the app lifecycle with operators, use the Juju OLM’s declarative operator integration to share and reuse open source integration code.
+ The encapsulation of ops code in charms allows us to deploy any scenario on any cloud, and integrate easily across cloud boundaries. Because the Juju OLM handles provisioning we achieve full multi-cloud independence with cloud-agnostic operators - not only for Kubernetes container workloads but also for legacy physical, virtual and cloud applications. Build models on any cloud, and unify your application management on public cloud, private cloud and container estate with JAAS, the multi-cloud enterprise dashboard for Juju.
Community-driven service catalogue for better operations Community-driven operator catalogue
- The largest portfolio of operators for Kubernetes and traditional machine-based applications that work consistently and integrate seamlessly. Any cloud, any machines, or any Kubernetes, on any architecture, with long term support and maintenance.
+ Charmhub is the largest portfolio of operators for Kubernetes as well as traditional Linux applications or Windows applications that work consistently and integrate seamlessly. Open source principles and the Open Operator Manifesto guide the community. Find operators to drive apps on any cloud, or any bare metal, or any Kubernetes, on any architecture, with long term support and maintenance.
Production-grade operator lifecycle management
- Production-grade operator lifecycle management
- Built in Go for mission-critical workloads to embrace the operator pattern for both infrastructure and applications, across cloud-native and traditional estate. Juju provides resilient leader-election as a service to every operator.
- Multi-cloud hosted Operator Lifecycle Manager Multi-cloud hosted Operator Lifecycle Manager
- Run your own OLM anywhere, with or without Kubernetes. Or use JAAS.ai as a fully managed multi-cloud multi-tenant infinitely scalable lifecycle manager for models on any cloud.
- Many operators, one CLI for lifecycle, config, integration and ops
- Unify the operator experience for diverse workloads from multiple vendors and communities. One consistent CLI for operator installation, updates, configuration, integration, scaling, and everyday ops like backup and restore. That makes documentation and training much simpler.
+ Unify the operator experience for diverse workloads from multiple vendors and communities. One consistent CLI for operator installation, updates, configuration, integration, scaling, and everyday ops like backup and restore. This consistent experience for all application management makes documentation and training much simpler and streamlines the process of onboarding new software into the enterprise.
Third-party SAAS is just another app in the model Third-party SAAS is just another operator in the model
- Drive SAAS with operators too, for cloud deployments that combine software and SAAS seamlessly. For example, substitute Amazon RDS MySQL anywhere you use the MySQL operator.
+ Drive SAAS with operators too, for cloud deployments that combine software and SAAS seamlessly. For example, substitute the Amazon RDS PostgreSQL operator anywhere you normally use the PostgreSQL operator. It is even straightforward to connect SAAS from one cloud to SAAS from another cloud.
Offer and consume managed apps between teams Integrate managed apps between teams
- Delegate service operations to independent teams for home-grown SAAS, integrated across models in the enterprise. Your DBA team can run databases on cloud or on prem which other teams consume as SAAS.
+ Juju model-driven operations make it easy to delegate application operations to independent teams for home-grown SAAS. Each team that runs applications with Juju can offer them to other teams, to integrate across models in the enterprise. Each model has its own administrators, and cross-model integration just requires permission from both sets of admins. Your DBA team can run databases on cloud or on prem which other teams consume as SAAS. This even works across different clouds!
Encapsulate security best practices with every service or application
- Operators provide repeatable best practice for installation, update, configuration, and integration. We track security issues in operators with CVEs and distribute patches automatically, so you can manage compliance professionally. And of course, open source operators evolve to meet multiple industry security and compliance standards.
+ Operators provide repeatable security best practice for hardened application installation, update, configuration, and integration. We track security issues in operators with CVEs and distribute patches automatically, so you can manage compliance professionally. And of course, open source operators evolve to meet multiple industry security and compliance standards.
Cleaner infra-as-code with the Python Operator Framework. Cleaner infra-as-code with the Python Operator Framework
- You can write operators in any language with the Juju OLM, but most prefer Python. Every instance of every app in every deployment becomes an object, with methods for integration and operations. Clean, accessible code with a fully asynchronous API. Just perfect, just Python.
+ You can write operators in any language with the Juju OLM, but most people prefer Python. Every instance of every app in every deployment becomes an object, with methods for integration and operations. Clean, accessible code with a fully asynchronous API. Just perfect, just Python. Charmcraft lets you share libraries between charms easily for smoother operator integration.
Create operators for Windows workloads for cross-platform integration Create operators for Windows apps for cross-platform integration
- Full support for Windows applications enables consistent use of the operator pattern across the entire business IT estate. Windows operators integrate perfectly with remote applications on Kubernetes and clouds thanks to Juju cross-model relations.
- Manage apps and services, not configuration files
- It’s not about configuration management, it’s about application management. Operators encapsulate applications to handle the details, especially in containers where config management doesn’t work.
- In production at
Clean, composable operators
- Clean, composable operators
Both cloud-native and legacy ‘machine’ workloads
- K8s and legacy estate operators
+ Multi-cloud freedom
- Reusable integration code
+ Reusable integration code
- Multi-cloud operators
+ Reusable integration code
The Open Operator Collection
- The Open Operator Collection
Highly available Enterprise OLM
- Highly available Enterprise OLM
OLM-as-a-service
- OLM-as-a-service
Consistent operator experience
Consistent operator experience
SAAS integration
- SAAS integration
Run your own SAAS
- Offer home-grown SAAS internally
+ Run your own SAAS
Devsecops by design
Devsecops by design
Pure Python operators
- Pure Python operators
Windows workload operators
- Windows operators
+ Windows workload operators
App-centric operations
Operators respond to real time desired state model
- Integrated applications share a single model, so that changes can be made in one place and propagate to all affected applications. Each model is a separate RBAC domain for segregated management and administration controls. -
+ Integrated applications on the same substrate share a single model, so that changes can be made in one place and propagate to all affected applications. Each model is a separate RBAC domain for segregated management and administration controls. Multiple models can be composed and integrated into a single multi-cloud scenario. + @@ -403,19 +403,19 @@Where should the application run? For example, it might run on a public cloud, or a private cloud, a Kubernetes cluster on one of those, or it might be split across several different substrates. In each case, it is a business decision, driven by cost, privacy, compliance and latency, where we run the applications. We might test on a public cloud, and run production on private infrastructure, or the other way around. The applications are the same, the integration is the same, the operations are the same, the business decision is about locality.
Which software components should be included in the scenario? Any significant service will require multiple software components, or applications, that are integrated and working together to create the service. The business decision here is choice of component and version. We might want to use a specific version of MySQL. Or we might want to use Amazon RDS for a managed MySQL. We could of course use our own short-lived MySQL instance for testing, and RDS for production, or the other way around.
What resources should be allocated to the scenario? Resources are expensive. The same software can be run with fewer resources, or more, depending on the business need. For a test or staging environment, we might allocate small machines on a cloud, for a production environment we might allocate large bare metal servers on premise. The technical details of operating the applications should accommodate those business needs.
What capacity should be allocated to the scenario? Compute and storage are expensive. The same software can be run with fewer resources, or more, depending on the business need. For a test or staging environment, we might allocate small machines on a cloud, for a production environment we might allocate large bare metal servers on premise. The technical details of operating the applications should accommodate those business needs.
How should that scenario be integrated into the wider estate? While the applications in the service will be tightly integrated, there may also be integration work with systems that are not strictly part of this service. For example, if I have an institution-wide intrusion detection system, I may want to wire production and staging scenarios up to that, but not CI/CD test run scenarios. Similarly, I may not want to send all the logs from all my test runs to Splunk, even if I use that SAAS for my staging and production environments.
@@ -69,23 +69,23 @@
A single scenario might in fact involve several models on different substrates, because it involves applications that must run in multiple different clouds. I might have some components on my mainframe, some on a public cloud, some on a different cloud Kubernetes cluster, and some on servers. Each of those compute substrates would get a model, and applications placed in each model will run on that substrate.
-Models also allow different groups of administrators to be responsible for particular subsets of the applications in the scenario. Since permissions are allocated by model, it is convenient to represent organisational boundaries in models as well. One team that has responsibility for the data lake could have permissions to administer a model with those components, another team that is responsible for machine learning could have permission to administer a second model.
When we have separate teams responsible for subsets of the applications, we create a scenario with two models on the same substrate to segregate responsibilities. Since applications can be integrated across model boundaries, multiple models do not complicate the overall scenario design. So the second business decision is who has permission to administer each model.
-The third business decision is which applications will be needed in that scenario. Operators are placed into models using the Juju operator lifecycle manager. The operators are integrated through matching integration points. Each line of integration represents a particular way in which those two operators are composed. Operators can be composed in many ways, if two operators have multiple pairs of matching integration points then there can be multiple lines of integration between them. The net effect is a rich application graph on the canvas.
This graph is an abstraction. The same graph could describe a small deployment, on Raspberry Pi hosts, or a large deployment, on dual-socket x86 servers. The graph describes the logical relationships between the applications. We can reuse this graph on different substrates to build multiple copies of the same idea, for example development, staging and production.
--To make this abstract model real, we need to provide some compute capacity, some storage, and possibly some networks on which those applications will be run. This is the fourth business decision that we must take — how much we want to spend on this particular application. +To make this abstract model real, we need to provide some compute capacity, some storage, and possibly some networks on which those applications will run. This is the fourth business decision that we must take — how much we want to spend on capacity for this particular scenario.
On a machine substrate, like IAAS or VMware or bare metal with MAAS, compute capacity takes the form of machines. By allocating machines to the model we make a business decision — how much hardware we want to spend on this application. In the cloud, compute capacity is explicitly financial because it is clear that you are spending money for each instance hour. Bare metal has the same financial considerations. Every host has a cost, placing more hosts into the model, or more expensive hosts is a business decision. @@ -144,7 +144,7 @@
So ‘application’ is the name in the application graph in the model, an application in the model is defined by its operator and configuration, an operator can be used multiple times in a model under different names. The workload is the actual processes driven by the operator when it is running.
-There are certain software components which play a supporting role. They are essential, but they are not the reason for the model to exist. In business terms, they are not the drivers of resource allocation.
From 2dc41ecffc1ad0150b29183cd43687ac16b0e883 Mon Sep 17 00:00:00 2001 From: Anthony Dillon-The public site JAAS.ai is a hosted Juju service that spans all the public clouds. Any user can login there and start to create models on their public cloud accounts or Kubernetes clusters. JAAS.ai supports both machine and Kubernetes models across the major public clouds. The service is run by Canonical on highly-available instances on each of the public clouds. +The public site JAAS.ai is a hosted Juju service that spans all the public clouds. Any user can login there and start to create models on their public cloud accounts or Kubernetes clusters. JAAS.ai supports both machine and Kubernetes models across all major public clouds. The service is run by Canonical on highly-available instances on each of the public clouds.
From 68e3f5f370bb0f346fbca33d0d13be598ec14591 Mon Sep 17 00:00:00 2001
From: Anthony Dillon
Policy, settings and the command-line options will govern the consequences for storage associated with the removed application — it may be archived or it may be destroyed as well.
Another benefit of an OLM is consistent configuration of operators from a wide range of vendors and communities.
The Juju OLM explicitly models application scale, and provides mechanisms for integrated applications to be aware of changes in their own and related application scale.
Any long-lived workload requires maintenance or administrative activities. Backup, restore, reset, checkpoint, benchmarking, and application-specific operations occur both on a schedule and as interrupts for the administrator.
Combining the operator pattern and devsecops The Open Operator Collection community brings ‘many eyes’ to devsecops. Shared, open source operators represent best practice both for operations and for security, greatly increasing quality and reducing the cost of high-security, compliant operations for all end users of the operator collection. DevSecOps means integrating the expertise of security specialists into the DevOps process. The shift to agile development, continuous integration and continuous deployment drove the rise of devops, combining development and production operations expertise into agile teams. Devops meant that development teams now also had to understand the production consequences of their work, taking responsibility for performance, upgrades, and reliability. DevSecOps extends this to recognise the importance of security. Since devops means faster deployments, there are fewer opportunities to review security before code is deployed to production. Instead of trying to address security after the fact, DevSecOps brings the security expertise into the devops team and makes security the responsibility of the combined group. The shift to agile development, continuous integration and continuous deployment drove the rise of devops, combining development and production operations expertise into agile teams. Devops meant that development teams also had to understand the production consequences of their work, taking responsibility for performance, upgrades, and reliability. Devsecops extends this principle to recognise the importance of security. Since devops means faster deployments, there are fewer opportunities to review security before code is deployed to production. Instead of trying to address security after the fact, Devsecops brings the security expertise into the devops team and makes security the responsibility of the combined group. Security becomes a shared responsibility, tightly integrated into the devops process. Security design, security reviews, and security responses all take place in the arena of continuous integration, testing and deployment. Automation of security monitoring and analysis is crucial, since there will be fewer opportunities for lengthy analysis of static systems in production given the fast pace of change inherent to continuous deployment. The cloud-native preference for immutable containers means that security can never be addressed in production, but must be addressed in the source tree of the containers which are being deployed. Since all deployments are automated, the security design and review process must take place at the same time as development. Even the underlying infrastructure on which applications are deployed is likely to be software-defined infrastructure-as-code, with continuous deployment processes driving high speed change. So devsecops is necessary, all the way from the baseline infrastructure to the applications themselves. A central shared repository of operators creates the opportunity for security reviews at a community level, bringing specialist perspectives which would not be available to every project in every organisation. The benefits of an open source approach are well understood; expertise is pooled, costs are reduced, security fixes are provided faster. These same benefits apply to operators which are of course software packages, even though their purpose is to drive operations. A key benefit of the operator pattern is the ability to reuse operations logic. Reuse of code drives quality. The more scenarios in which operations logic is used, the more it reflects experience and insights. In the ideal case, an operator is used across many organisations so that it also provides the mechanism for sharing the cost of implementation across multiple parties, reducing the cost to each individual user. A key benefit of the operator pattern is the ability to reuse operations logic. Reuse of code drives quality. When ops code is reused in more scenarios, it reflects more experience and insights. In the ideal case, an operator is used across many organisations and many clouds so that the cost of implementation is shared across multiple parties, reducing the cost to each individual user. The Open Operator Collection is a community-driven approach to operator design and development. The collection is a portfolio of consistent operators, developed by vendors, open source leaders, and expert contributors. The goal is to bring diverse experience to reusable operations code for software components that are very widely shared. This also creates the opportunity to conduct security reviews at a community level, bringing specialist perspectives to bear which would not normally be available to every project in every organisation. A central shared repository of operators creates the opportunity for security reviews at a community level, bringing specialist perspectives which would not be available to every project in every organisation. The benefits of an open source approach are well understood; expertise is pooled, costs are reduced, security fixes are provided faster. These same benefits apply to operators which are of course software packages, even though their purpose is to drive operations. When an operator is developed as proprietary code inside an organisation, the only code reviews of that operator will be done in the team responsible. Open source operators have many more opportunities for inspection and analysis, which increase the likelihood of identifying problems and generating solutions. The Open Operator Manifesto, which shapes the work of the Open Operator Collection Community, requires source code for all operators to be available for such review. Security in particular is a subtle and challenging discipline. For every system in production there are many attack vectors that require different experience to analyse and address. This experience is both rare and expensive. A good software architecture applies defense-in-depth strategies to mitigate the consequences of a security lapse in one part of the system, but it remains the case that a single mistake can undo all of the good work of many in providing an adversary with an entrypoint to integrated systems. Unlike performance or reliability in software, simply addressing the top priority issue does not fundamentally secure a system when there are many lower-priority problems; it is necessary to close all the gaps, and quickly, to be confident in the integrity of a production system. A good software architecture applies defense-in-depth to mitigate the consequences of a security lapse in one part of the system, but it remains the case that a single mistake can undo all of the good work of many in providing an adversary with an entrypoint to integrated systems. Unlike performance or reliability in software, simply addressing the top priority issue does not fundamentally secure a system when there are many lower-priority problems; it is necessary to close all the gaps, and quickly, to be confident in the integrity of a production system. A community can draw upon specialist perspectives to harden the entire stack for the benefit of all its members and users. From kernel configuration to MAC-based security policies, from cryptography and key management to network security, an open source operator is more likely to reflect the state of the art than any single-vendor effort. Importantly, open source provides a level playing field for large and small organisations alike, both of which bring benefits to the community. Security issues are not fixed when a patch is available, they are fixed when the patch is in production. A critical characteristic of software delivery frameworks is the speed with which fixes move from being available to being in production. Many popular distribution mechanisms for software have a very poor track record of delivering fixes to production. Security research firm Snyk found systematic security problems in Helm charts for example. A critical characteristic of software delivery frameworks is the speed with which fixes move from being available to being in production. Many popular distribution mechanisms for software have a poor track record of delivering fixes to production. Security research firm Snyk found systematic security problems in Helm charts for example. The Juju operator lifecycle manager provides an efficient update distribution system. Progressive releases minimise the risk of a widespread update-related problem and increase user confidence in automated updates. As a result, many users choose to apply updates automatically, enhancing the security posture of the entire ecosystem. It is important for institutions to audit and report on their systems security standing. The global community of practitioners have come to rely on CVEs as a framework for tracking systematic issues in shared applications. The Open Operator Collection extends this idea to operator code. Security vulnerabilities in operators are treated with the same process of disclosure and fix distribution that applies to vendor applications and solutions. It is important for institutions to audit and report on their systems security standing. The global security community relies on CVEs as a framework for tracking systematic issues in shared applications. The Open Operator Collection extends this to operator code. Security vulnerabilities in operators are treated with the same process of disclosure and fix distribution as vendor applications and solutions. In addition, because operators drive workload updates and upgrades, it becomes possible in principle to have operators provide the audit function, enabling a consistent view of CVE coverage in a complex containerised estate. Ensuring compliance is essential for large organisations, but difficult in a fast-moving devops world. Regulated entities face a growing list of hard requirements - FIPS, HIPAA, CIS. These specify precise requirements for machine and container behaviour, and carry significant penalties if not met. Every organisation also has to meet internal standards for infrastructure and apps. When an application is being deployed widely off custom ops code, it is extremely difficult to ensure that every deployment meets expectations. Checklists and manuals depend on human judgment. Every organisation also has to meet internal standards for infrastructure and apps. When an application is being deployed widely off custom ops code, it is extremely difficult to ensure that every deployment meets expectations. Checklists and manuals depend on fallible human judgment. Operators greatly improve compliance consistency, audit and remediation. Since an operator contains all the logic of service instantiation, upgrade, integration and configuration, it can enforce compliance consistency. The Juju OLM allows placement of operators on specific machines, or all machines in the model, for the specific purpose of enforcing compliance with infrastructure standards such as CIS or FIPS. Since an operator contains all the logic of service instantiation, upgrade, integration and configuration, it can enforce compliance consistency. The Juju OLM allows placement of operators on specific machines, or all machines in the model, to enforce compliance with infrastructure standards such as CIS or FIPS. Juju’s unique ability to compose operators efficiently means that investments in compliance for a particular operator are returned in every single application graph where that operator is used. Rather than develop overly complex operators for entire scenarios, composition gets the benefits of focus, simplicity and reuse at the level of individual software components. Audit is improved because the Juju OLM supports actions on operators; reporting on specific compliance is thus codified in operator actions and can be invoked wherever a particular workload is deployed. Remediation takes place through the standard process of operator updates; since operators are distributed through a reliable global distribution infrastructure, improvements flow quickly to production systems with appropriate enterprise control.
An open source operator will not be perfect initially. It will likely handle just the situations that its original developer needed. But it serves to attract a community and contributors, each of whom bring new insights and perspectives and experience. Just as open source gains momentum and depth, an open source operator delivers better and better operations, until it is the world’s best expert in a package.
In order for operations to become simple despite the richness and diversity of software, we are required to integrate and run, the administration experience of diverse applications must become consistent.
A community process is extremely effective at surfacing the range of possibilities and requirements for operator composition, so the Open Operator Collection serves as a single venue for discussions between operator designers and their users. Since composition is the key ingredient of efficiency, it is more valuable to have those conversations in a central location than to fragment the discussion across many forums.
Typically, the entire scenario is captured in a single application graph in a single model. It is possible, however, for a large scenario to be split across several different models.
- Juju operator integration allows us to keep each operator as simple as possible, then compose them to create rich application graph topologies that support complex scenarios with a simple, consistent experience and much less YAML. The UNIX philosophy of ‘doing one thing well’ applies to large-scale operations code too, and the benefits of clarity and reuse are exactly the same. Small is beautiful.
+ Juju operator integration allows us to keep each operator as simple as possible, then compose them to create rich application graph topologies that support complex scenarios with a simple, consistent experience and much less YAML. The UNIX philosophy of ‘doing one thing well’ applies to large-scale operations code too, and the benefits of clarity and reuse are exactly the same. Small is beautiful.
Universal operators for K8s as well as traditional Linux and Windows apps on bare metal, VMWare and IAAS Universal operators for K8s as well as traditional Linux and Windows apps on bare metal, VMWare and IAAS
Juju allows you to adopt the operator pattern for your entire estate, including legacy apps. Model-driven operations dramatically reduce maintenance and operations costs for traditional workloads without re-platforming to K8s. Once charmed, legacy apps become multi-cloud ready, too. The Juju Operator Lifecycle Manager (OLM) uniquely supports both container and machine-based apps, with seamless integration between them.
Create operators for Windows apps for cross-platform integration
- Full support for Windows applications enables consistent use of the operator pattern across the entire business IT estate. Windows operators integrate perfectly with remote applications on Kubernetes and public clouds thanks to Juju cross-model relations.
+ Full support for Windows applications enables consistent use of the operator pattern across the entire business IT estate. Windows operators integrate perfectly with remote applications on Kubernetes and public clouds thanks to Juju cross-model relations.
Manage apps and services, not configuration files
- It’s not about configuration management, it’s about application management. Operators encapsulate applications to handle the details, especially in containers where config management doesn’t work. This allows organisations to onboard new applications faster, because they don’t need to train admins on the details of configuration for every new application.
+ It’s not about configuration management, it’s about application management. Operators encapsulate applications to handle the details, especially in containers where config management doesn’t work. This allows organisations to onboard new applications faster, because they don’t need to train admins on the details of configuration for every new application.
Removing operators
Configuration
+Operator configuration
Scaling
Everyday operations actions
+Everyday operations actions
Community-driven DevSecOps
with open source community processesHardened open source operators
+Hardened open source operators
What is DevSecOps?
Containerized operations need DevSecOps
-Containerized operations require devsecops
+Reuse drives quality
-Shared apps, shared operators, shared security
-Open source operators get more reviews
Specialist expertise is shared
Rapid distribution of security fixes
+Rapid distribution of security fixes
CVEs for operators
-Compliance
Open source principles and practices
Consistent experience
+Consistent experience
“Do one thing and do it well”
Integration with remote applications
+Integration with remote applications
In production at
Clean, composable operators
Clean, composable operators
K8s and legacy estate operators
- K8s and legacy estate operators
Reusable integration code
@@ -88,7 +88,7 @@ Reusable integration code
Multi-cloud operators
@@ -203,7 +203,7 @@ Pure Python operators
Windows operators
Windows operators
App-centric operations