diff --git a/.github/workflows/ansible-test.yml b/.github/workflows/ci.yml similarity index 94% rename from .github/workflows/ansible-test.yml rename to .github/workflows/ci.yml index 0671b3de..49e9d991 100644 --- a/.github/workflows/ansible-test.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python_version: ["3.6"] + python_version: ['3.6'] steps: - name: Check out code uses: actions/checkout@v1 @@ -36,7 +36,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python_version: ["3.6"] + python_version: ['3.6'] steps: - name: Check out code uses: actions/checkout@v1 @@ -61,7 +61,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python_version: ['3.7'] + python_version: ['3.7'] steps: - name: Check out code uses: actions/checkout@v1 @@ -77,7 +77,7 @@ jobs: python-version: ${{ matrix.python_version }} - name: Install molecule and openshift dependencies - run: pip install molecule openshift + run: pip install molecule yamllint openshift - name: Install ansible-base run: pip install git+https://github.com/ansible-collection-migration/ansible-base.git --disable-pip-version-check diff --git a/.yamllint b/.yamllint new file mode 100644 index 00000000..c5ae64be --- /dev/null +++ b/.yamllint @@ -0,0 +1,12 @@ +--- +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + truthy: disable diff --git a/molecule/default/playbook.yml b/molecule/default/converge.yml similarity index 100% rename from molecule/default/playbook.yml rename to molecule/default/converge.yml diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index 41cf5521..4d01396c 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -6,12 +6,8 @@ driver: login_cmd_template: 'docker exec -ti {instance} bash' ansible_connection_options: ansible_connection: docker -lint: - name: yamllint - options: - config-data: - line-length: - max: 160 +lint: | + yamllint . platforms: - name: instance-kind provisioner: @@ -27,6 +23,7 @@ provisioner: scenario: name: default test_sequence: + - lint - syntax - converge - verify diff --git a/molecule/default/tasks/append_hash.yml b/molecule/default/tasks/append_hash.yml index 858a3338..9c726a3d 100644 --- a/molecule/default/tasks/append_hash.yml +++ b/molecule/default/tasks/append_hash.yml @@ -1,3 +1,4 @@ +--- - block: - name: Ensure that append_hash namespace exists k8s: diff --git a/molecule/default/tasks/delete.yml b/molecule/default/tasks/delete.yml index 2c00be0e..e49ff221 100644 --- a/molecule/default/tasks/delete.yml +++ b/molecule/default/tasks/delete.yml @@ -88,8 +88,8 @@ - not pods_delete.resources always: - - name: Remove namespace - k8s: - kind: Namespace - name: "{{ delete_namespace }}" - state: absent + - name: Remove namespace + k8s: + kind: Namespace + name: "{{ delete_namespace }}" + state: absent diff --git a/molecule/default/tasks/full.yml b/molecule/default/tasks/full.yml index b99f0d3a..e284bc09 100644 --- a/molecule/default/tasks/full.yml +++ b/molecule/default/tasks/full.yml @@ -54,10 +54,10 @@ app: galaxy service: web ports: - - protocol: TCP - targetPort: 8000 - name: port-8000-tcp - port: 8000 + - protocol: TCP + targetPort: 8000 + name: port-8000-tcp + port: 8000 register: output - name: Show output @@ -107,7 +107,7 @@ requests: storage: 5Gi accessModes: - - ReadWriteOnce + - ReadWriteOnce - name: Show output debug: @@ -149,14 +149,14 @@ containers: - name: elastic volumeMounts: - - mountPath: /usr/share/elasticsearch/data - name: elastic-volume + - mountPath: /usr/share/elasticsearch/data + name: elastic-volume command: ['elasticsearch'] image: 'ansible/galaxy-elasticsearch:2.4.6' volumes: - - name: elastic-volume - persistentVolumeClaim: - claimName: elastic-volume + - name: elastic-volume + persistentVolumeClaim: + claimName: elastic-volume strategy: type: RollingUpdate register: output diff --git a/molecule/default/tasks/lists.yml b/molecule/default/tasks/lists.yml index 4d464df7..9538d011 100644 --- a/molecule/default/tasks/lists.yml +++ b/molecule/default/tasks/lists.yml @@ -1,5 +1,4 @@ --- - - name: Ensure testing1 namespace exists k8s: api_version: v1 @@ -7,134 +6,134 @@ name: testing1 - block: - - name: Create configmaps - k8s: - namespace: testing1 - definition: - apiVersion: v1 - kind: ConfigMapList - items: '{{ configmaps }}' + - name: Create configmaps + k8s: + namespace: testing1 + definition: + apiVersion: v1 + kind: ConfigMapList + items: '{{ configmaps }}' - - name: Get ConfigMaps - k8s_info: - api_version: v1 - kind: ConfigMap - namespace: testing1 - label_selectors: - - app=test - register: cms + - name: Get ConfigMaps + k8s_info: + api_version: v1 + kind: ConfigMap + namespace: testing1 + label_selectors: + - app=test + register: cms - - name: All three configmaps should exist - assert: - that: item.data.a is defined - with_items: '{{ cms.resources }}' + - name: All three configmaps should exist + assert: + that: item.data.a is defined + with_items: '{{ cms.resources }}' - - name: Delete configmaps - k8s: - state: absent - namespace: testing1 - definition: - apiVersion: v1 - kind: ConfigMapList - items: '{{ configmaps }}' + - name: Delete configmaps + k8s: + state: absent + namespace: testing1 + definition: + apiVersion: v1 + kind: ConfigMapList + items: '{{ configmaps }}' - - name: Get ConfigMaps - k8s_info: - api_version: v1 - kind: ConfigMap - namespace: testing1 - label_selectors: - - app=test - register: cms + - name: Get ConfigMaps + k8s_info: + api_version: v1 + kind: ConfigMap + namespace: testing1 + label_selectors: + - app=test + register: cms - - name: All three configmaps should not exist - assert: - that: not cms.resources + - name: All three configmaps should not exist + assert: + that: not cms.resources vars: configmaps: - - metadata: - name: list-example-1 - labels: - app: test - data: - a: first - - metadata: - name: list-example-2 - labels: - app: test - data: - a: second - - metadata: - name: list-example-3 - labels: - app: test - data: - a: third + - metadata: + name: list-example-1 + labels: + app: test + data: + a: first + - metadata: + name: list-example-2 + labels: + app: test + data: + a: second + - metadata: + name: list-example-3 + labels: + app: test + data: + a: third - block: - - name: Create list of arbitrary resources - k8s: - namespace: testing1 - definition: - apiVersion: v1 - kind: List + - name: Create list of arbitrary resources + k8s: namespace: testing1 - items: '{{ resources }}' + definition: + apiVersion: v1 + kind: List + namespace: testing1 + items: '{{ resources }}' - - name: Get the created resources - k8s_info: - api_version: '{{ item.apiVersion }}' - kind: '{{ item.kind }}' - namespace: testing1 - name: '{{ item.metadata.name }}' - register: list_resources - with_items: '{{ resources }}' + - name: Get the created resources + k8s_info: + api_version: '{{ item.apiVersion }}' + kind: '{{ item.kind }}' + namespace: testing1 + name: '{{ item.metadata.name }}' + register: list_resources + with_items: '{{ resources }}' - - name: All resources should exist - assert: - that: ((list_resources.results | sum(attribute="resources", start=[])) | length) == (resources | length) + - name: All resources should exist + assert: + that: ((list_resources.results | sum(attribute="resources", start=[])) | length) == (resources | length) - - name: Delete list of arbitrary resources - k8s: - state: absent - namespace: testing1 - definition: - apiVersion: v1 - kind: List + - name: Delete list of arbitrary resources + k8s: + state: absent namespace: testing1 - items: '{{ resources }}' + definition: + apiVersion: v1 + kind: List + namespace: testing1 + items: '{{ resources }}' - - name: Get the resources - k8s_info: - api_version: '{{ item.apiVersion }}' - kind: '{{ item.kind }}' - namespace: testing1 - name: '{{ item.metadata.name }}' - register: list_resources - with_items: '{{ resources }}' + - name: Get the resources + k8s_info: + api_version: '{{ item.apiVersion }}' + kind: '{{ item.kind }}' + namespace: testing1 + name: '{{ item.metadata.name }}' + register: list_resources + with_items: '{{ resources }}' - - name: The resources should not exist - assert: - that: not ((list_resources.results | sum(attribute="resources", start=[])) | length) + - name: The resources should not exist + assert: + that: not ((list_resources.results | sum(attribute="resources", start=[])) | length) vars: resources: - - apiVersion: v1 - kind: ConfigMap - metadata: - name: list-example-4 - data: - key: value - - apiVersion: v1 - kind: Service - metadata: - name: list-example-svc - labels: - app: test - spec: - selector: - app: test - ports: - - protocol: TCP - targetPort: 8000 - name: port-8000-tcp - port: 8000 + - apiVersion: v1 + kind: ConfigMap + metadata: + name: list-example-4 + data: + key: value + - apiVersion: v1 + kind: Service + metadata: + name: list-example-svc + labels: + app: test + spec: + selector: + app: test + ports: + - protocol: TCP + targetPort: 8000 + name: port-8000-tcp + port: 8000 diff --git a/molecule/default/tasks/log.yml b/molecule/default/tasks/log.yml index 75322a37..33ee0bfb 100644 --- a/molecule/default/tasks/log.yml +++ b/molecule/default/tasks/log.yml @@ -24,10 +24,10 @@ app: hello-world spec: containers: - - image: busybox - name: hello-world - command: ['sh'] - args: ['-c', 'while true ; do echo "hello world" && sleep 10 ; done'] + - image: busybox + name: hello-world + command: ['sh'] + args: ['-c', 'while true ; do echo "hello world" && sleep 10 ; done'] restartPolicy: Always - name: retrieve the log by providing the deployment diff --git a/tests/integration/targets/kubernetes/files/crd-resource.yml b/tests/integration/targets/kubernetes/files/crd-resource.yml index 9804d4d1..23d0663c 100644 --- a/tests/integration/targets/kubernetes/files/crd-resource.yml +++ b/tests/integration/targets/kubernetes/files/crd-resource.yml @@ -1,3 +1,4 @@ +--- apiVersion: certmanager.k8s.io/v1alpha1 kind: Certificate metadata: @@ -5,14 +6,14 @@ metadata: spec: secretName: acme-crt-secret dnsNames: - - foo.example.com - - bar.example.com + - foo.example.com + - bar.example.com acme: config: - - ingressClass: nginx - domains: - - foo.example.com - - bar.example.com + - ingressClass: nginx + domains: + - foo.example.com + - bar.example.com issuerRef: name: letsencrypt-prod # We can reference ClusterIssuers by changing the kind here. diff --git a/tests/integration/targets/kubernetes/files/kuard-extra-property.yml b/tests/integration/targets/kubernetes/files/kuard-extra-property.yml index 2d5b7994..bed92bc7 100644 --- a/tests/integration/targets/kubernetes/files/kuard-extra-property.yml +++ b/tests/integration/targets/kubernetes/files/kuard-extra-property.yml @@ -1,3 +1,4 @@ +--- apiVersion: extensions/v1beta1 kind: Deployment metadata: @@ -17,5 +18,5 @@ spec: app: kuard spec: containers: - - image: gcr.io/kuar-demo/kuard-amd64:1 - name: kuard + - image: gcr.io/kuar-demo/kuard-amd64:1 + name: kuard diff --git a/tests/integration/targets/kubernetes/files/kuard-invalid-type.yml b/tests/integration/targets/kubernetes/files/kuard-invalid-type.yml index 7a5f73d9..72505f88 100644 --- a/tests/integration/targets/kubernetes/files/kuard-invalid-type.yml +++ b/tests/integration/targets/kubernetes/files/kuard-invalid-type.yml @@ -1,3 +1,4 @@ +--- apiVersion: extensions/v1beta1 kind: Deployment metadata: @@ -16,5 +17,5 @@ spec: app: kuard spec: containers: - - image: gcr.io/kuar-demo/kuard-amd64:1 - name: kuard + - image: gcr.io/kuar-demo/kuard-amd64:1 + name: kuard diff --git a/tests/integration/targets/kubernetes/files/setup-crd.yml b/tests/integration/targets/kubernetes/files/setup-crd.yml index a8e2d51e..9c01bc1a 100644 --- a/tests/integration/targets/kubernetes/files/setup-crd.yml +++ b/tests/integration/targets/kubernetes/files/setup-crd.yml @@ -1,3 +1,4 @@ +--- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: diff --git a/tests/integration/targets/kubernetes/handlers/main.yml b/tests/integration/targets/kubernetes/handlers/main.yml index 39872d74..efb5408e 100644 --- a/tests/integration/targets/kubernetes/handlers/main.yml +++ b/tests/integration/targets/kubernetes/handlers/main.yml @@ -1,3 +1,4 @@ +--- - name: delete temporary directory file: path: "{{ remote_tmp_dir }}" diff --git a/tests/integration/targets/kubernetes/meta/main.yml b/tests/integration/targets/kubernetes/meta/main.yml index 32cf5dda..23d65c7e 100644 --- a/tests/integration/targets/kubernetes/meta/main.yml +++ b/tests/integration/targets/kubernetes/meta/main.yml @@ -1 +1,2 @@ +--- dependencies: [] diff --git a/tests/integration/targets/kubernetes/tasks/main.yml b/tests/integration/targets/kubernetes/tasks/main.yml index d1416915..a7263f3d 100644 --- a/tests/integration/targets/kubernetes/tasks/main.yml +++ b/tests/integration/targets/kubernetes/tasks/main.yml @@ -1,3 +1,4 @@ +--- - include_tasks: setup_remote_tmp_dir.yml - set_fact: diff --git a/tests/integration/targets/kubernetes/tasks/older_openshift_fail.yml b/tests/integration/targets/kubernetes/tasks/older_openshift_fail.yml index 8ba8a12c..213d2357 100644 --- a/tests/integration/targets/kubernetes/tasks/older_openshift_fail.yml +++ b/tests/integration/targets/kubernetes/tasks/older_openshift_fail.yml @@ -1,70 +1,71 @@ - # TODO: Not available in ansible-base - # - python_requirements_info: - # dependencies: - # - openshift==0.6.0 - # - kubernetes==6.0.0 +--- +# TODO: Not available in ansible-base +# - python_requirements_info: +# dependencies: +# - openshift==0.6.0 +# - kubernetes==6.0.0 - # append_hash - - name: use append_hash with ConfigMap - k8s: - definition: - metadata: - name: config-map-test - namespace: "{{ playbook_namespace }}" - apiVersion: v1 - kind: ConfigMap - data: - hello: world - append_hash: yes - ignore_errors: yes - register: k8s_append_hash +# append_hash +- name: use append_hash with ConfigMap + k8s: + definition: + metadata: + name: config-map-test + namespace: "{{ playbook_namespace }}" + apiVersion: v1 + kind: ConfigMap + data: + hello: world + append_hash: yes + ignore_errors: yes + register: k8s_append_hash - - name: assert that append_hash fails gracefully - assert: - that: - - k8s_append_hash is failed - - "'Failed to import the required Python library (openshift >= 0.7.2)' in k8s_append_hash.msg" - - "'. This is required for append_hash.' in k8s_append_hash.msg" +- name: assert that append_hash fails gracefully + assert: + that: + - k8s_append_hash is failed + - "'Failed to import the required Python library (openshift >= 0.7.2)' in k8s_append_hash.msg" + - "'. This is required for append_hash.' in k8s_append_hash.msg" - # validate - - name: attempt to use validate with older openshift - k8s: - definition: - metadata: - name: config-map-test - namespace: "{{ playbook_namespace }}" - apiVersion: v1 - kind: ConfigMap - data: - hello: world - validate: - fail_on_error: yes - ignore_errors: yes - register: k8s_validate +# validate +- name: attempt to use validate with older openshift + k8s: + definition: + metadata: + name: config-map-test + namespace: "{{ playbook_namespace }}" + apiVersion: v1 + kind: ConfigMap + data: + hello: world + validate: + fail_on_error: yes + ignore_errors: yes + register: k8s_validate - - name: assert that validate fails gracefully - assert: - that: - - k8s_validate is failed - - "k8s_validate.msg == 'openshift >= 0.8.0 is required for validate'" +- name: assert that validate fails gracefully + assert: + that: + - k8s_validate is failed + - "k8s_validate.msg == 'openshift >= 0.8.0 is required for validate'" - # apply - - name: attempt to use apply with older openshift - k8s: - definition: - metadata: - name: config-map-test - namespace: "{{ playbook_namespace }}" - apiVersion: v1 - kind: ConfigMap - data: - hello: world - apply: yes - ignore_errors: yes - register: k8s_apply +# apply +- name: attempt to use apply with older openshift + k8s: + definition: + metadata: + name: config-map-test + namespace: "{{ playbook_namespace }}" + apiVersion: v1 + kind: ConfigMap + data: + hello: world + apply: yes + ignore_errors: yes + register: k8s_apply - - name: assert that apply fails gracefully - assert: - that: - - k8s_apply is failed - - "k8s_apply.msg.startswith('Failed to import the required Python library (openshift >= 0.9.2)')" +- name: assert that apply fails gracefully + assert: + that: + - k8s_apply is failed + - "k8s_apply.msg.startswith('Failed to import the required Python library (openshift >= 0.9.2)')" diff --git a/tests/integration/targets/kubernetes/tasks/openshift.yml b/tests/integration/targets/kubernetes/tasks/openshift.yml index f4a90061..af0f51a7 100644 --- a/tests/integration/targets/kubernetes/tasks/openshift.yml +++ b/tests/integration/targets/kubernetes/tasks/openshift.yml @@ -1,3 +1,4 @@ +--- # OpenShift Resources - name: Create a project k8s: @@ -33,14 +34,14 @@ containers: - name: elastic volumeMounts: - - mountPath: /usr/share/elasticsearch/data - name: elastic-volume + - mountPath: /usr/share/elasticsearch/data + name: elastic-volume command: ['elasticsearch'] image: 'ansible/galaxy-elasticsearch:2.4.6' volumes: - - name: elastic-volume - persistentVolumeClaim: - claimName: elastic-volume + - name: elastic-volume + persistentVolumeClaim: + claimName: elastic-volume replicas: 1 strategy: type: Rolling diff --git a/tests/integration/targets/kubernetes/tasks/setup_remote_tmp_dir.yml b/tests/integration/targets/kubernetes/tasks/setup_remote_tmp_dir.yml index e04f5053..8acdb49e 100644 --- a/tests/integration/targets/kubernetes/tasks/setup_remote_tmp_dir.yml +++ b/tests/integration/targets/kubernetes/tasks/setup_remote_tmp_dir.yml @@ -1,3 +1,4 @@ +--- - name: create temporary directory test_tempfile: state: directory diff --git a/tests/integration/targets/kubernetes/tasks/validate_installed.yml b/tests/integration/targets/kubernetes/tasks/validate_installed.yml index 224bd2eb..e00c7c23 100644 --- a/tests/integration/targets/kubernetes/tasks/validate_installed.yml +++ b/tests/integration/targets/kubernetes/tasks/validate_installed.yml @@ -1,3 +1,4 @@ +--- - block: - name: Create a namespace k8s: diff --git a/tests/integration/targets/kubernetes/tasks/validate_not_installed.yml b/tests/integration/targets/kubernetes/tasks/validate_not_installed.yml index 58401d4a..aeda2522 100644 --- a/tests/integration/targets/kubernetes/tasks/validate_not_installed.yml +++ b/tests/integration/targets/kubernetes/tasks/validate_not_installed.yml @@ -1,24 +1,25 @@ - # TODO: Not available in ansible-base - # - python_requirements_info: - # dependencies: - # - openshift - # - kubernetes - # - kubernetes-validate +--- +# TODO: Not available in ansible-base +# - python_requirements_info: +# dependencies: +# - openshift +# - kubernetes +# - kubernetes-validate - - k8s: - definition: - apiVersion: v1 - kind: ConfigMap - metadata: - name: hello - namespace: default - validate: - fail_on_error: yes - ignore_errors: yes - register: k8s_no_validate +- k8s: + definition: + apiVersion: v1 + kind: ConfigMap + metadata: + name: hello + namespace: default + validate: + fail_on_error: yes + ignore_errors: yes + register: k8s_no_validate - - name: assert that k8s_no_validate fails gracefully - assert: - that: - - k8s_no_validate is failed - - "k8s_no_validate.msg == 'kubernetes-validate python library is required to validate resources'" +- name: assert that k8s_no_validate fails gracefully + assert: + that: + - k8s_no_validate is failed + - "k8s_no_validate.msg == 'kubernetes-validate python library is required to validate resources'"