Skip to content

Commit db35e66

Browse files
authored
Add playbook to install sample devices for NROP testing (#21)
* Add playbook to install sample devices for NROP testing Signed-off-by: Niranjan M.R <mniranja@redhat.com> * ansible lint fixes Signed-off-by: Niranjan M.R <mniranja@redhat.com> --------- Signed-off-by: Niranjan M.R <mniranja@redhat.com>
1 parent b14f6b2 commit db35e66

9 files changed

Lines changed: 453 additions & 0 deletions

File tree

playbooks/sample-devices.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
##
3+
# This playbook creates sample devices for Numa Resources operator functional tests
4+
# kubeconfig path of the clusters example: /root/.kcli/clusters/europa/auth/kubeconfig
5+
#
6+
# ansible-playbook -vv playbooks/sample-devices.yaml -e hosted_kubeconfig=/home/kni/hcp-jobs/cnfqe1/out/cnfqe1-kubeadmin-kubeconfig
7+
##
8+
9+
- name: Install Sample Devices
10+
hosts: localhost
11+
tasks:
12+
- name: Install Sample Devices for NROP
13+
ansible.builtin.include_role:
14+
name: sample_devices
15+
vars:
16+
sample_devices_hosted_kubeconfig: "{{ hosted_kubeconfig }}"
17+
- name: Validate kubeconfig
18+
ansible.builtin.stat:
19+
path: "{{ sample_devices_hosted_kubeconfig }}"
20+
register: kubeconfig_stat
21+
failed_when: not kubeconfig_stat.stat.exists
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sample_devices_device_plugin_image: "quay.io/k8stopologyawareschedwg/sample-device-plugin:v0.2.2"
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
---
2+
- name: Create namespace
3+
kubernetes.core.k8s:
4+
api_version: v1
5+
kubeconfig: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
6+
kind: Namespace
7+
name: sample-dev-ns
8+
state: present
9+
definition:
10+
metadata:
11+
name: sample-dev-ns
12+
labels:
13+
pod-security.kubernetes.io/audit: privileged
14+
pod-security.kubernetes.io/enforce: privileged
15+
pod-security.kubernetes.io/warn: privileged
16+
security.openshift.io/scc.podSecurityLabelSync: "false"
17+
18+
- name: Add scc permission to the new ns
19+
environment:
20+
KUBECONFIG: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
21+
ansible.builtin.command: >
22+
oc adm policy add-scc-to-user privileged -z default -n sample-dev-ns
23+
register: add_scc
24+
changed_when: add_scc.rc != 0
25+
26+
- name: Create service Account
27+
kubernetes.core.k8s:
28+
api_version: v1
29+
kubeconfig: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
30+
kind: ServiceAccount
31+
name: sampledevices-sa
32+
state: present
33+
namespace: sample-dev-ns
34+
definition:
35+
metadata:
36+
name: sampledevices-sa
37+
38+
- name: Create role for sample devices
39+
kubernetes.core.k8s:
40+
api_version: rbac.authorization.k8s.io/v1
41+
kubeconfig: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
42+
kind: Role
43+
name: sampledevices-ro
44+
state: present
45+
namespace: sample-dev-ns
46+
definition:
47+
metadata:
48+
name: sampledevices-ro
49+
namespace: sample-dev-ns
50+
rules:
51+
- apiGroups:
52+
- security.openshift.io
53+
resourceNames:
54+
- privileged
55+
resources:
56+
- securitycontextconstraints
57+
verbs:
58+
- use
59+
60+
- name: Create role binding for sample devices
61+
kubernetes.core.k8s:
62+
api_version: rbac.authorization.k8s.io/v1
63+
kubeconfig: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
64+
kind: Role
65+
name: sampledevices-rb
66+
state: present
67+
namespace: sample-dev-ns
68+
definition:
69+
metadata:
70+
name: sampledevices-rb
71+
roleRef:
72+
apiGroup: rbac.authorization.k8s.io
73+
kind: Role
74+
name: sampledevices-ro
75+
subjects:
76+
- kind: ServiceAccount
77+
name: sampledevices-sa
78+
namespace: sample-dev-ns
79+
80+
- name: Create temporary directory
81+
ansible.builtin.tempfile:
82+
state: directory
83+
suffix: sample_devices
84+
register: tmp_dir_result
85+
86+
- name: Create configmaps
87+
block:
88+
- name: Generate configmaps manifests
89+
ansible.builtin.template:
90+
src: "{{ item }}"
91+
dest: "{{ tmp_dir_result.path }}/{{ item.rsplit('.', 1)[0] }}"
92+
mode: "0644"
93+
loop:
94+
- device-A-configmap.yaml.j2
95+
- device-B-configmap.yaml.j2
96+
- device-C-configmap.yaml.j2
97+
98+
- name: Apply all config maps
99+
environment:
100+
KUBECONFIG: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
101+
ansible.builtin.command:
102+
oc apply -f {{ tmp_dir_result.path }}/{{ item }}
103+
loop:
104+
- device-A-configmap.yaml
105+
- device-B-configmap.yaml
106+
- device-C-configmap.yaml
107+
register: configmaps
108+
changed_when: configmaps.rc != 0
109+
110+
- name: Create daemonsets
111+
block:
112+
- name: Generate daemonset manifests
113+
ansible.builtin.template:
114+
src: "{{ item }}"
115+
dest: "{{ tmp_dir_result.path }}/{{ item.rsplit('.', 1)[0] }}"
116+
mode: "0644"
117+
loop:
118+
- device-A-daemonset.yaml.j2
119+
- device-B-daemonset.yaml.j2
120+
- device-C-daemonset.yaml.j2
121+
122+
- name: Apply all daemonsets
123+
environment:
124+
KUBECONFIG: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
125+
ansible.builtin.command:
126+
oc apply -f {{ tmp_dir_result.path }}/{{ item }}
127+
loop:
128+
- device-A-daemonset.yaml
129+
- device-B-daemonset.yaml
130+
- device-C-daemonset.yaml
131+
register: daemonsets
132+
changed_when: daemonsets.rc != 0
133+
134+
- name: Add scc permission to the new ns
135+
environment:
136+
KUBECONFIG: "{{ sample_devices_hosted_kubeconfig | default(omit) }}"
137+
ansible.builtin.command: >
138+
oc adm policy add-scc-to-user privileged -z sampledevices-sa -n sample-dev-ns
139+
register: add_scc
140+
changed_when: add_scc.rc != 0
141+
142+
- name: Remove temporary directory
143+
ansible.builtin.file:
144+
path: "{{ tmp_dir_result.path }}"
145+
state: absent
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: device-a-configmap
5+
namespace: sample-dev-ns
6+
data:
7+
example_com_deviceA.yaml: |
8+
devicename: tty1
9+
devices:
10+
'*':
11+
- id: DevA1
12+
healthy: true
13+
numanode: 0
14+
- id: DevA2
15+
healthy: true
16+
numanode: 0
17+
- id: DevA3
18+
healthy: true
19+
numanode: 0
20+
- id: DevA4
21+
healthy: true
22+
numanode: 0
23+
- id: DevA5
24+
healthy: true
25+
numanode: 0
26+
- id: DevA6
27+
healthy: true
28+
numanode: 0
29+
- id: DevA7
30+
healthy: true
31+
numanode: 0
32+
- id: DevA8
33+
healthy: true
34+
numanode: 0
35+
- id: DevA9
36+
healthy: true
37+
numanode: 0
38+
- id: DevA10
39+
healthy: true
40+
numanode: 0
41+
- id: DevA11
42+
healthy: true
43+
numanode: 1
44+
- id: DevA12
45+
healthy: true
46+
numanode: 1
47+
- id: DevA13
48+
healthy: true
49+
numanode: 1
50+
- id: DevA14
51+
healthy: true
52+
numanode: 1
53+
- id: DevA15
54+
healthy: true
55+
numanode: 1
56+
- id: DevA16
57+
healthy: true
58+
numanode: 1
59+
- id: DevA17
60+
healthy: true
61+
numanode: 1
62+
- id: DevA18
63+
healthy: true
64+
numanode: 1
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
apiVersion: apps/v1
2+
kind: DaemonSet
3+
metadata:
4+
name: device-plugin-a-ds
5+
namespace: sample-dev-ns
6+
spec:
7+
selector:
8+
matchLabels:
9+
name: device-plugin-a
10+
template:
11+
metadata:
12+
labels:
13+
name: device-plugin-a
14+
spec:
15+
serviceAccountName: sampledevices-sa
16+
containers:
17+
- name: device-plugin-a-container
18+
securityContext:
19+
privileged: true
20+
image: {{ sample_devices_device_plugin_image }}
21+
imagePullPolicy: IfNotPresent
22+
env:
23+
- name: DEVICE_RESOURCE_NAME
24+
value: "example.com/deviceA"
25+
command:
26+
- /bin/deviceplugin
27+
args:
28+
- --alsologtostderr
29+
- --config-dir=/etc/devices
30+
volumeMounts:
31+
- name: kubeletsockets
32+
mountPath: /var/lib/kubelet/device-plugins
33+
- name: device-a-config-vol
34+
mountPath: /etc/devices
35+
volumes:
36+
- name: kubeletsockets
37+
hostPath:
38+
path: /var/lib/kubelet/device-plugins
39+
type: Directory
40+
- configMap:
41+
name: device-a-configmap
42+
name: device-a-config-vol
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: device-b-configmap
5+
namespace: sample-dev-ns
6+
data:
7+
example_com_deviceB.yaml: |
8+
devicename: tty2
9+
devices:
10+
'*':
11+
- id: DevB1
12+
healthy: true
13+
numanode: 0
14+
- id: DevB2
15+
healthy: true
16+
numanode: 0
17+
- id: DevB3
18+
healthy: true
19+
numanode: 0
20+
- id: DevB4
21+
healthy: true
22+
numanode: 0
23+
- id: DevB5
24+
healthy: true
25+
numanode: 0
26+
- id: DevB6
27+
healthy: true
28+
numanode: 0
29+
- id: DevB7
30+
healthy: true
31+
numanode: 0
32+
- id: DevB8
33+
healthy: true
34+
numanode: 0
35+
- id: DevB9
36+
healthy: true
37+
numanode: 0
38+
- id: DevB10
39+
healthy: true
40+
numanode: 0
41+
- id: DevB11
42+
healthy: true
43+
numanode: 1
44+
- id: DevB12
45+
healthy: true
46+
numanode: 1
47+
- id: DevB13
48+
healthy: true
49+
numanode: 1
50+
- id: DevB14
51+
healthy: true
52+
numanode: 1
53+
- id: DevB15
54+
healthy: true
55+
numanode: 1
56+
- id: DevB16
57+
healthy: true
58+
numanode: 1
59+
- id: DevB17
60+
healthy: true
61+
numanode: 1
62+
- id: DevB18
63+
healthy: true
64+
numanode: 1
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
apiVersion: apps/v1
2+
kind: DaemonSet
3+
metadata:
4+
name: device-plugin-b-ds
5+
namespace: sample-dev-ns
6+
spec:
7+
selector:
8+
matchLabels:
9+
name: device-plugin-b
10+
template:
11+
metadata:
12+
labels:
13+
name: device-plugin-b
14+
spec:
15+
serviceAccountName: sampledevices-sa
16+
containers:
17+
- name: device-plugin-b-container
18+
securityContext:
19+
privileged: true
20+
image: {{ sample_devices_device_plugin_image }}
21+
imagePullPolicy: IfNotPresent
22+
env:
23+
- name: DEVICE_RESOURCE_NAME
24+
value: "example.com/deviceB"
25+
command:
26+
- /bin/deviceplugin
27+
args:
28+
- --alsologtostderr
29+
- --config-dir=/etc/devices
30+
volumeMounts:
31+
- name: kubeletsockets
32+
mountPath: /var/lib/kubelet/device-plugins
33+
- name: device-b-config-vol
34+
mountPath: /etc/devices
35+
volumes:
36+
- name: kubeletsockets
37+
hostPath:
38+
path: /var/lib/kubelet/device-plugins
39+
type: Directory
40+
- configMap:
41+
name: device-b-configmap
42+
name: device-b-config-vol

0 commit comments

Comments
 (0)