| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- ---
- # Deploys the local storage operator specific resources.
- #
- # Required variables:
- #
- # local_storage:
- # namespace: which namespace the LSO is in
- # storage_class_name: what to call the storage class
- #
- # odf_storage:
- # namespace: which namespace ODF operator is in
- # name: the name of the storage cluster
- # default_sc: TODO: the name of the storage class to set as default
- # for the cluster (optional)
- # storageclass.kubernetes.io/is-default-class=true
- #
- # Optional variables:
- #
- # kubeadmin_config the administrator kubeconfig file (tmp/kubeconfig-ocp4)
- #
- - name: Check if there is a namespace.
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: v1
- kind: namespace
- name: "{{ odf_storage.namespace }}"
- register: prereq_ns
- - name: Fail if not so.
- ansible.builtin.assert:
- that:
- - prereq_ns.resources is defined
- - prereq_ns.resources | length == 1
- success_msg: "OK, namespace found."
- fail_msg: "FATAL: namespace to deploy ({{ odf_storage.namespace }}) not found. Ensure there is an operator already present."
- - name: Check if there is a CSV in the namespace.
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: operators.coreos.com/v1alpha1
- kind: clusterserviceversion
- namespace: "{{ odf_storage.namespace }}"
- label_selectors:
- - operators.coreos.com/odf-operator.openshift-storage=
- register: prereq_csv
- - name: Fail if not so.
- ansible.builtin.assert:
- that:
- - prereq_csv.resources is defined
- - prereq_csv.resources | length > 0
- success_msg: "OK, operator CSV found."
- fail_msg: "FATAL: Operator is not deployed in the namespace: {{ odf_storage.namespace }}. Ensure there is an operator already present."
- - name: Check if the LSO storage class exists.
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: storage.k8s.io/v1
- kind: storageclass
- name: "{{ local_storage.storage_class_name }}"
- register: lso_sclass
- - name: Fail if not so.
- ansible.builtin.assert:
- that:
- - lso_sclass.resources is defined
- - lso_sclass.resources | length > 0
- success_msg: "OK, LSO storage class found."
- fail_msg: "FATAL: Local Storage Operator is not configured correctly: storage class {{ local_storage.storage_class_name }} not found."
- - name: Verify the web console settings
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: operator.openshift.io/v1
- kind: console
- name: cluster
- register: cluster_console
- - name: Patch the web console with odf-console plugin if not yet there
- kubernetes.core.k8s_json_patch:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: operator.openshift.io/v1
- kind: console
- name: cluster
- patch:
- - op: add
- path: /spec/plugins/-
- value: odf-console
- when: not ("odf-console" in cluster_console.resources[0].spec.plugins)
- - name: Find how many nodes match the node_selector_key
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: v1
- kind: node
- label_selectors:
- "{{ local_storage.node_selector_key }}"
- register: matching_nodes
- - name: Just remember how many
- ansible.builtin.set_fact:
- num_storage_nodes: "{{ matching_nodes.resources | length }}"
- - name: Ensure there is a storage cluster resource
- kubernetes.core.k8s:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: ocs.openshift.io/v1
- kind: storagecluster
- namespace: "{{ odf_storage.namespace }}"
- name: "{{ odf_storage.name }}"
- resource_definition:
- spec:
- monDataDirHostPath: /var/lib/rook
- storageDeviceSets:
- - count: 1
- dataPVCTemplate:
- spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: "1"
- storageClassName: "{{ local_storage.storage_class_name }}"
- volumeMode: Block
- name: odf-lso-device-set
- replica: "{{ num_storage_nodes }}"
- flexibleScaling: false
- placement:
- all:
- nodeAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 5
- preference:
- matchExpressions:
- - key: "{{ local_storage.node_selector_key }}"
- operator: Exists
- - name: Wait for the Ceph cluster to finish progressing.
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: ceph.rook.io/v1
- kind: cephcluster
- namespace: "{{ odf_storage.namespace }}"
- name: "{{ odf_storage.name }}-cephcluster"
- register: cephcluster
- until:
- - cephcluster.resources | length > 0
- - cephcluster.resources[0].status is defined
- - cephcluster.resources[0].status.phase == "Ready"
- retries: 60
- delay: 5
- - name: Wait for the storage cluster to finish progressing.
- kubernetes.core.k8s_info:
- kubeconfig: "{{ kubeadmin_config }}"
- validate_certs: no
- api_version: ocs.openshift.io/v1
- kind: storagecluster
- namespace: "{{ odf_storage.namespace }}"
- name: "{{ odf_storage.name }}"
- register: storagecluster
- until: storagecluster.resources[0].status.phase == "Ready"
- retries: 120
- delay: 5
- # TODO: Perhaps verify the storage classes are there?
- # The naming scheme is:
- # {{ odf_storage.name }}-ceph-rgw
- # {{ odf_storage.name }}-ceph-rbd
- # {{ odf_storage.name }}-cephfs
- # openshift-storage.noobaa.io
- ...
|