What you'll learn
- How to create Kubernetes K8s or OpenShift OCP namespace project with Ansible?
- Ansible creates Kubernetes or OpenShift namespace project
- Parameters
- Links
- code
- execution
- idempotency
- before execution
- after execution
- Conclusion
How to create Kubernetes K8s or OpenShift OCP namespace project with Ansible?
Ansible creates Kubernetes or OpenShift namespace project
- `kubernetes.core.k8s`
- Manage Kubernetes (K8s) objects
Let's talk about the Ansible module `k8s`.
The full name is `kubernetes.core.k8s`, which means that is part of the collection of modules of Ansible to interact with Kubernetes and Red Hat OpenShift clusters.
It manages Kubernetes (K8s) objects.
Parameters
- name _string_ /namespace _string_ - object name / namespace
- api_version _string_ - "v1"
- kind _string_ - object model
- state _string_ - present/absent/patched
- definition _string_ - YAML definition
- src _path_ - path for YAML definition
- template _raw_ - YAML template definition
- validate _dictionary_ - validate resource definition
There is a long list of parameters of the `k8s` module. Let me summarize the most used.
Most of the parameters are very generic and allow you to combine them for many use-cases.
The `name` and `namespace` specify object name and/or the object namespace. They are useful to create, delete, or discover an object without providing a full resource definition.
The `api_version` parameter specifies the Kubernetes API version, the default is "v1" for version 1.
The `kind` parameter specifies an object model.
The `state` like for other modules determines if an object should be created - `present` option, patched - `patched` option, or deleted - `absent` option.
The `definition` parameter allows you to provide a valid YAML definition (string, list, or dictionary) for an object when creating or updating.
If you prefer to specify a file for the YAML definition, the `src` parameter provides a path to a file containing a valid YAML definition of an object or objects to be created or updated.
You could also specify a YAML definition template with the `template` parameter.
You might find useful also the `validate` parameter in order to define how to validate the resource definition against the Kubernetes schema. Please note that requires the `kubernetes-validate` python module.
Links
- [kubernetes.core.k8s - Manage Kubernetes (K8s) objects - Ansible Documentation](https://docs.ansible.com/ansible/latest/collections/kubernetes/core/k8s_module.html)
## Playbook
How to create Kubernetes namespace project with Ansible Playbook.
This Playbook uses Red Hat CodeReady Containers OpenShift 4 Cluster.
See also: [Install Red Hat CodeReady Containers to run OpenShift 4 in macOS](/articles/install-red-hat-codeready-containers-to-run-openshift-4-in-macos)
code
```yaml
---
- name: k8s Playbook
hosts: localhost
gather_facts: false
connection: local
vars:
project_name: "myapp"
tasks:
- name: create {{ project_name }} namespace
kubernetes.core.k8s:
api_version: v1
kind: Namespace
name: "{{ project_name }}"
state: present
```
execution
```bash
ansible-pilot $ crc status
CRC VM: Running
OpenShift: Running (v4.9.15