Skip to content

Commit 256cf08

Browse files
committed
refactor(tmachine): share container runtime detection
Signed-off-by: Evan Lezar <elezar@nvidia.com>
1 parent a745b0b commit 256cf08

3 files changed

Lines changed: 100 additions & 59 deletions

File tree

‎tests/ansible/roles/keycloak/tasks/main.yaml‎

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,54 +5,69 @@
55
- name: Wait for SSH
66
ansible.builtin.wait_for_connection:
77

8-
- name: Check Docker socket
9-
become: true
10-
ansible.builtin.stat:
11-
path: /var/run/docker.sock
12-
register: keycloak_docker_socket
8+
- name: Detect tmachine container runtime
9+
ansible.builtin.include_role:
10+
name: tmachine_container_runtime
1311

14-
- name: Select Keycloak container runtime
12+
- name: Set Keycloak runtime values
1513
ansible.builtin.set_fact:
16-
keycloak_runtime: "{{ 'docker' if keycloak_docker_socket.stat.exists else 'podman' }}"
14+
keycloak_runtime_user: >-
15+
{{ 'tmachine' if tmachine_container_runtime_is_rootless else 'root' }}
16+
keycloak_runtime_home: >-
17+
{{ '/home/tmachine' if tmachine_container_runtime_is_rootless else '/root' }}
18+
keycloak_runtime_state_directory: >-
19+
{{ '/home/tmachine/.local/share/openshell-keycloak'
20+
if tmachine_container_runtime_is_rootless else keycloak_state_directory }}
1721
1822
- name: Require Keycloak container runtime
1923
become: true
24+
become_user: "{{ keycloak_runtime_user }}"
2025
ansible.builtin.command:
2126
argv:
22-
- "{{ keycloak_runtime }}"
27+
- "{{ tmachine_container_runtime_name }}"
2328
- --version
29+
environment:
30+
HOME: "{{ keycloak_runtime_home }}"
2431
changed_when: false
2532

2633
- name: Create Keycloak state directory
2734
become: true
2835
ansible.builtin.file:
29-
path: "{{ keycloak_state_directory }}"
36+
path: "{{ keycloak_runtime_state_directory }}"
3037
state: directory
38+
owner: "{{ keycloak_runtime_user }}"
39+
group: "{{ keycloak_runtime_user }}"
3140
mode: "0755"
3241

3342
- name: Install Keycloak realm fixture
3443
become: true
3544
ansible.builtin.copy:
3645
src: "{{ keycloak_realm_file }}"
37-
dest: "{{ keycloak_state_directory }}/realm.json"
46+
dest: "{{ keycloak_runtime_state_directory }}/realm.json"
47+
owner: "{{ keycloak_runtime_user }}"
48+
group: "{{ keycloak_runtime_user }}"
3849
mode: "0644"
3950

4051
- name: Remove an existing Keycloak fixture
4152
become: true
53+
become_user: "{{ keycloak_runtime_user }}"
4254
ansible.builtin.command:
4355
argv:
44-
- "{{ keycloak_runtime }}"
56+
- "{{ tmachine_container_runtime_name }}"
4557
- rm
4658
- --force
4759
- "{{ keycloak_container_name }}"
60+
environment:
61+
HOME: "{{ keycloak_runtime_home }}"
4862
changed_when: false
4963
failed_when: false
5064

5165
- name: Start Keycloak fixture
5266
become: true
67+
become_user: "{{ keycloak_runtime_user }}"
5368
ansible.builtin.command:
5469
argv:
55-
- "{{ keycloak_runtime }}"
70+
- "{{ tmachine_container_runtime_name }}"
5671
- run
5772
- --detach
5873
- --name
@@ -64,10 +79,12 @@
6479
- --env
6580
- "KEYCLOAK_ADMIN_PASSWORD={{ keycloak_admin_password }}"
6681
- --volume
67-
- "{{ keycloak_state_directory }}/realm.json:/opt/keycloak/data/import/realm.json:ro,z"
82+
- "{{ keycloak_runtime_state_directory }}/realm.json:/opt/keycloak/data/import/realm.json:ro,z"
6883
- "{{ keycloak_image }}"
6984
- start-dev
7085
- --import-realm
86+
environment:
87+
HOME: "{{ keycloak_runtime_home }}"
7188
changed_when: true
7289

7390
- name: Wait for Keycloak discovery endpoint
@@ -83,13 +100,16 @@
83100

84101
- name: Read Keycloak logs after failed health check
85102
become: true
103+
become_user: "{{ keycloak_runtime_user }}"
86104
ansible.builtin.command:
87105
argv:
88-
- "{{ keycloak_runtime }}"
106+
- "{{ tmachine_container_runtime_name }}"
89107
- logs
90108
- --tail
91109
- "30"
92110
- "{{ keycloak_container_name }}"
111+
environment:
112+
HOME: "{{ keycloak_runtime_home }}"
93113
register: keycloak_logs
94114
changed_when: false
95115
failed_when: false

‎tests/ansible/roles/openshell_gateway/tasks/detect.yaml‎

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,21 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
---
5-
- name: Resolve tmachine UID
6-
ansible.builtin.command:
7-
argv:
8-
- id
9-
- -u
10-
- tmachine
11-
changed_when: false
12-
register: openshell_tmachine_uid
5+
- name: Detect tmachine container runtime
6+
ansible.builtin.include_role:
7+
name: tmachine_container_runtime
138

14-
- name: Check Docker socket
15-
become: true
16-
ansible.builtin.stat:
17-
path: /var/run/docker.sock
18-
register: openshell_docker_socket
19-
20-
- name: Check rootful Podman socket
21-
become: true
22-
ansible.builtin.stat:
23-
path: /run/podman/podman.sock
24-
register: openshell_rootful_podman_socket
25-
26-
- name: Check rootless Podman socket
27-
become: true
28-
ansible.builtin.stat:
29-
path: "/run/user/{{ openshell_tmachine_uid.stdout }}/podman/podman.sock"
30-
register: openshell_rootless_podman_socket
31-
32-
- name: Require exactly one container runtime socket
33-
ansible.builtin.assert:
34-
that:
35-
- >-
36-
(openshell_docker_socket.stat.exists | int)
37-
+ (openshell_rootful_podman_socket.stat.exists | int)
38-
+ (openshell_rootless_podman_socket.stat.exists | int) == 1
39-
fail_msg: Expected exactly one Docker or Podman socket
40-
41-
- name: Select container runtime
9+
- name: Set OpenShell gateway runtime values
4210
ansible.builtin.set_fact:
43-
openshell_gateway_driver: "{{ 'docker' if openshell_docker_socket.stat.exists else 'podman' }}"
44-
openshell_gateway_user: "{{ 'root' if openshell_rootful_podman_socket.stat.exists else 'tmachine' }}"
45-
openshell_gateway_home: "{{ '/root' if openshell_rootful_podman_socket.stat.exists else '/home/tmachine' }}"
46-
openshell_gateway_uid: "{{ '0' if openshell_rootful_podman_socket.stat.exists else openshell_tmachine_uid.stdout }}"
47-
openshell_gateway_bind_address: "{{ '127.0.0.1:17670' if openshell_docker_socket.stat.exists else '0.0.0.0:17670' }}"
48-
openshell_runtime_socket: >-
49-
{{ '/var/run/docker.sock' if openshell_docker_socket.stat.exists
50-
else '/run/podman/podman.sock' if openshell_rootful_podman_socket.stat.exists
51-
else '/run/user/' ~ openshell_tmachine_uid.stdout ~ '/podman/podman.sock' }}
11+
openshell_gateway_driver: "{{ tmachine_container_runtime_name }}"
12+
openshell_gateway_user: >-
13+
{{ 'root' if tmachine_container_runtime_name == 'podman'
14+
and not tmachine_container_runtime_is_rootless else 'tmachine' }}
15+
openshell_gateway_home: >-
16+
{{ '/root' if tmachine_container_runtime_name == 'podman'
17+
and not tmachine_container_runtime_is_rootless else '/home/tmachine' }}
18+
openshell_gateway_uid: >-
19+
{{ '0' if tmachine_container_runtime_name == 'podman'
20+
and not tmachine_container_runtime_is_rootless else tmachine_container_runtime_tmachine_uid.stdout }}
21+
openshell_gateway_bind_address: "{{ '127.0.0.1:17670' if tmachine_container_runtime_name == 'docker' else '0.0.0.0:17670' }}"
22+
openshell_runtime_socket: "{{ tmachine_container_runtime_socket }}"
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
---
5+
- name: Resolve tmachine UID
6+
ansible.builtin.command:
7+
argv:
8+
- id
9+
- -u
10+
- tmachine
11+
changed_when: false
12+
register: tmachine_container_runtime_tmachine_uid
13+
14+
- name: Check Docker socket
15+
become: true
16+
ansible.builtin.stat:
17+
path: /var/run/docker.sock
18+
register: tmachine_container_runtime_docker_socket
19+
20+
- name: Check rootful Podman socket
21+
become: true
22+
ansible.builtin.stat:
23+
path: /run/podman/podman.sock
24+
register: tmachine_container_runtime_rootful_podman_socket
25+
26+
- name: Check rootless Podman socket
27+
become: true
28+
ansible.builtin.stat:
29+
path: "/run/user/{{ tmachine_container_runtime_tmachine_uid.stdout }}/podman/podman.sock"
30+
register: tmachine_container_runtime_rootless_podman_socket
31+
32+
- name: Require exactly one container runtime socket
33+
ansible.builtin.assert:
34+
that:
35+
- >-
36+
(tmachine_container_runtime_docker_socket.stat.exists | int)
37+
+ (tmachine_container_runtime_rootful_podman_socket.stat.exists | int)
38+
+ (tmachine_container_runtime_rootless_podman_socket.stat.exists | int) == 1
39+
fail_msg: Expected exactly one Docker or Podman socket
40+
41+
- name: Select tmachine container runtime
42+
ansible.builtin.set_fact:
43+
tmachine_container_runtime_name: >-
44+
{{ 'docker' if tmachine_container_runtime_docker_socket.stat.exists else 'podman' }}
45+
tmachine_container_runtime_is_rootless: >-
46+
{{ tmachine_container_runtime_rootless_podman_socket.stat.exists }}
47+
tmachine_container_runtime_socket: >-
48+
{{ '/var/run/docker.sock' if tmachine_container_runtime_docker_socket.stat.exists
49+
else '/run/podman/podman.sock' if tmachine_container_runtime_rootful_podman_socket.stat.exists
50+
else '/run/user/' ~ tmachine_container_runtime_tmachine_uid.stdout ~ '/podman/podman.sock' }}

0 commit comments

Comments
 (0)