Support resource definition using manifest URL (#478)

Support resource definition using manifest URL

SUMMARY

Closes #451

ISSUE TYPE


Feature Pull Request

COMPONENT NAME

k8s
k8s_scale
k8s_service

Reviewed-by: Mike Graves <mgraves@redhat.com>
Reviewed-by: Abhijeet Kasurde <None>
Reviewed-by: Bikouo Aubin <None>
This commit is contained in:
Bikouo Aubin
2022-07-04 14:49:53 +02:00
committed by GitHub
parent 9f51fc0ef0
commit 7d0f0449ae
12 changed files with 256 additions and 39 deletions

View File

@@ -0,0 +1,4 @@
k8s_service
k8s
k8s_scale
time=40

View File

@@ -0,0 +1,64 @@
---
test_namespace: "k8s-manifest-url"
file_server_container_name: "nginx-server"
file_server_published_port: 30001
file_server_container_image: "docker.io/nginx"
pod_manifest:
file_name: pod.yaml
definition: |
---
apiVersion: v1
kind: Pod
metadata:
name: yaml-pod
spec:
containers:
- name: busy
image: busybox
command:
- /bin/sh
- -c
- while true;do date;sleep 5; done
deployment_manifest:
file_name: deployment.yaml
definition: |
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
service_manifest:
file_name: service.yaml
definition: |
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
spec:
ports:
- name: http
port: 80
selector:
app: nginx
status:
loadBalancer: {}

View File

@@ -0,0 +1,3 @@
---
dependencies:
- setup_namespace

View File

@@ -0,0 +1,132 @@
- name: check if docker is installed
shell: "command -v docker"
register: result
ignore_errors: true
- block:
- name: Check running server
shell:
cmd: >
docker container ps -a
-f name={{ file_server_container_name }}
--format '{{ '{{' }} .Names {{ '}}' }}'
register: server
- name: Create static file server using on docker
block:
- name: Create temporary directory for file to server
tempfile:
state: directory
suffix: .manifests
register: manifests_dir
- name: Update directory permissions
file:
path: "{{ manifests_dir.path }}"
mode: 0755
- name: Create manifests files
copy:
content: "{{ item.definition }}"
dest: "{{ manifests_dir.path }}/{{ item.file_name }}"
with_items:
- "{{ pod_manifest }}"
- "{{ deployment_manifest }}"
- "{{ service_manifest }}"
- name: Create static file server
shell:
cmd: >
docker run
--name {{ file_server_container_name }}
-p {{ file_server_published_port }}:80
-v {{ manifests_dir.path }}:/usr/share/nginx/html:ro
-d {{ file_server_container_image }}
when: server.stdout == ""
- set_fact:
file_server_host: "http://127.0.0.1:{{ file_server_published_port }}"
# k8s
- name: Create Pod using manifest URL
k8s:
namespace: "{{ test_namespace }}"
src: "{{ file_server_host }}/{{ pod_manifest.file_name }}"
wait: true
- name: Read Pod created
k8s_info:
kind: Pod
namespace: "{{ test_namespace }}"
name: "yaml-pod"
register: yaml_pod
- name: Ensure Pod exists
assert:
that:
- yaml_pod.resources | length == 1
# k8s_scale
- name: Create Deployment using manifest URL
k8s:
namespace: "{{ test_namespace }}"
src: "{{ file_server_host }}/{{ deployment_manifest.file_name }}"
wait: true
- name: Scale deployment using manifest URL
k8s_scale:
namespace: "{{ test_namespace }}"
src: "{{ file_server_host }}/{{ deployment_manifest.file_name }}"
replicas: 1
current_replicas: 3
wait: true
register: scale
- name: Read deployment
k8s_info:
kind: Deployment
version: apps/v1
namespace: "{{ test_namespace }}"
name: "nginx-deployment"
register: deployment
- name: Ensure number of replicas has been set as requested
assert:
that:
- scale is changed
- deployment.resources | length == 1
- deployment.resources.0.status.replicas == 1
# k8s_service
- name: Create service from manifest URL
k8s_service:
name: "myservice"
namespace: "{{ test_namespace }}"
src: "{{ file_server_host }}/{{ service_manifest.file_name }}"
register: svc
- assert:
that:
- svc is changed
always:
- name: Delete namespace
k8s:
kind: Namespace
name: "{{ test_namespace }}"
state: absent
ignore_errors: true
- name: Delete static file server
shell: "docker container rm -f {{ file_server_container_name }}"
ignore_errors: true
- name: Delete temporary directory
file:
state: absent
path: "{{ manifests_dir.path }}"
ignore_errors: true
when: manifests_dir is defined
when: result.rc == 0