Automation use-cases in the Cloud
Johan Wennerberg, a Solution Architect for Red Hat Nordics in Stockholm gave presentation in Red Hat Open Tour 2022 Tallinn. In his presentation titled "Gain robust repeatability as selfservice, by automating your automation" he listed several automation use-cases in the Cloud. Each of these automation use-cases is made possible by automation stacks. The automation stacks are technology stacks that produce business value through automation. In practice you need to build your automation stacks on top of infrastructure as code.
Below I will review Johan's automation use-cases in the Cloud one by one. The descriptions are my own as Johan did not go deep into details in his presentation.
Fully-automated provisioning typically means building a system from scratch into a fully usable state. The system could be a bare-metal server or desktop, a virtual machine, container image or a dynamically created test environment in a Cloud. Provisioning does not include managing the system over its lifecycle.
With config management or configuration management your goal is to keep the desired state of a system and to control changes to it. The system could be a container, virtual machine, bare metal system or network device. Common configuration management tools include Puppet, Terraform and Ansible.
Containers are typically short-lived and immutable: this means that configuration management happens before provisioning. Longer-living systems, such as virtual machines or network devices, are typically different: you handle configuration management after provisioning.
Orchestration refers to automation of workflows and processes which may include multiple systems. For example, you can orchestrate a complex software release process. Other example would be a complex security patching procedure that you need to do in a certain order. Well-known tools for orchestration include Ansible and Puppet Bolt.
Security compliance requires configuration management in practice. If you do not manage the configuration of a system you cannot easily understand its state. This makes it very difficult to enforce its desired state, which includes its security compliance.
Continuous delivery automates release of software by removing manual software release steps. You can build continuous delivery with tools such as Buildbot, Jenkins or GitHub Actions. Generally these tools are useful for software companies that release software packages for other to use.
I am not sure what Johan intended "app deployment to mean in this context. Probably he meant Continous deployment which involves deploying software automatically. You can encounter continuous deployment in the SaaS context where there is only one installation of the software.
You can use continuous delivery tools for continuous deployment as well. That said, there are dedicated continuous delivery tools for special use-cases. For example ArgoCD is used for continuous delivery in Kubernetes.