|
| 1 | +--- |
| 2 | +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. |
| 3 | +# SPDX-License-Identifier: Apache-2.0 |
| 4 | + |
| 5 | +- name: Publish gateway user-manager environment |
| 6 | + ansible.builtin.set_fact: |
| 7 | + openshell_gateway_user_environment: |
| 8 | + HOME: "{{ openshell_gateway_service_home }}" |
| 9 | + XDG_RUNTIME_DIR: "/run/user/{{ openshell_gateway_service_uid }}" |
| 10 | + DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ openshell_gateway_service_uid }}/bus" |
| 11 | + |
| 12 | +- name: Reload gateway user services |
| 13 | + ansible.builtin.systemd_service: |
| 14 | + daemon_reload: true |
| 15 | + scope: user |
| 16 | + environment: "{{ openshell_gateway_user_environment }}" |
| 17 | + become: true |
| 18 | + become_user: "{{ openshell_gateway_service_user }}" |
| 19 | + |
| 20 | +- name: Start the gateway user service |
| 21 | + ansible.builtin.systemd_service: |
| 22 | + name: "{{ openshell_gateway_service }}" |
| 23 | + enabled: true |
| 24 | + state: started |
| 25 | + scope: user |
| 26 | + environment: "{{ openshell_gateway_user_environment }}" |
| 27 | + become: true |
| 28 | + become_user: "{{ openshell_gateway_service_user }}" |
| 29 | + |
| 30 | +- name: Register the provisioned gateway with its service account |
| 31 | + ansible.builtin.command: |
| 32 | + cmd: "{{ openshell_cli_bin }} gateway add {{ openshell_gateway_endpoint }} --local --name test-guest" |
| 33 | + environment: "{{ openshell_gateway_user_environment }}" |
| 34 | + become: true |
| 35 | + become_user: "{{ openshell_gateway_service_user }}" |
| 36 | + |
| 37 | +- name: Wait for gateway CLI health |
| 38 | + ansible.builtin.command: |
| 39 | + cmd: "{{ openshell_cli_bin }} status" |
| 40 | + environment: "{{ openshell_gateway_user_environment }}" |
| 41 | + become: true |
| 42 | + become_user: "{{ openshell_gateway_service_user }}" |
| 43 | + register: gateway_health |
| 44 | + changed_when: false |
| 45 | + retries: 60 |
| 46 | + delay: 1 |
| 47 | + until: gateway_health.rc == 0 |
| 48 | + ignore_errors: true |
| 49 | + |
| 50 | +- name: Collect failed gateway service status |
| 51 | + ansible.builtin.command: |
| 52 | + cmd: "systemctl --user status {{ openshell_gateway_service }} --no-pager" |
| 53 | + environment: "{{ openshell_gateway_user_environment }}" |
| 54 | + become: true |
| 55 | + become_user: "{{ openshell_gateway_service_user }}" |
| 56 | + register: gateway_service_status |
| 57 | + changed_when: false |
| 58 | + failed_when: false |
| 59 | + when: gateway_health is failed |
| 60 | + |
| 61 | +- name: Collect failed gateway service journal |
| 62 | + ansible.builtin.command: |
| 63 | + cmd: "journalctl --user -u {{ openshell_gateway_service }} --no-pager -n 200" |
| 64 | + environment: "{{ openshell_gateway_user_environment }}" |
| 65 | + become: true |
| 66 | + become_user: "{{ openshell_gateway_service_user }}" |
| 67 | + register: gateway_service_journal |
| 68 | + changed_when: false |
| 69 | + failed_when: false |
| 70 | + when: gateway_health is failed |
| 71 | + |
| 72 | +- name: Report failed gateway service diagnostics |
| 73 | + ansible.builtin.debug: |
| 74 | + msg: | |
| 75 | + {{ gateway_service_status.stdout }} |
| 76 | + {{ gateway_service_journal.stdout }} |
| 77 | + when: gateway_health is failed |
| 78 | + |
| 79 | +- name: Require gateway CLI health |
| 80 | + ansible.builtin.assert: |
| 81 | + that: gateway_health is not failed |
| 82 | + fail_msg: The provisioned gateway did not become healthy. |
| 83 | + |
| 84 | +- name: Create the target gateway-control command directory |
| 85 | + ansible.builtin.file: |
| 86 | + path: "{{ openshell_gateway_restart_command | dirname }}" |
| 87 | + state: directory |
| 88 | + mode: "0700" |
| 89 | + |
| 90 | +- name: Install the gateway service-account command wrapper |
| 91 | + ansible.builtin.copy: |
| 92 | + dest: "{{ openshell_gateway_service_command }}" |
| 93 | + mode: "0700" |
| 94 | + content: | |
| 95 | + #!/usr/bin/env bash |
| 96 | + set -Eeuo pipefail |
| 97 | + exec sudo -H -u {{ openshell_gateway_service_user }} env \ |
| 98 | + HOME={{ openshell_gateway_service_home }} \ |
| 99 | + XDG_RUNTIME_DIR=/run/user/{{ openshell_gateway_service_uid }} \ |
| 100 | + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{{ openshell_gateway_service_uid }}/bus \ |
| 101 | + "$@" |
| 102 | +
|
| 103 | +- name: Install the target gateway restart command |
| 104 | + ansible.builtin.copy: |
| 105 | + dest: "{{ openshell_gateway_restart_command }}" |
| 106 | + mode: "0700" |
| 107 | + content: | |
| 108 | + #!/usr/bin/env bash |
| 109 | + set -Eeuo pipefail |
| 110 | + sudo -H -u {{ openshell_gateway_service_user }} env \ |
| 111 | + XDG_RUNTIME_DIR=/run/user/{{ openshell_gateway_service_uid }} \ |
| 112 | + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{{ openshell_gateway_service_uid }}/bus \ |
| 113 | + systemctl --user restart {{ openshell_gateway_service }} |
| 114 | + for _ in $(seq 1 60); do |
| 115 | + if sudo -H -u {{ openshell_gateway_service_user }} {{ openshell_cli_bin }} status >/dev/null 2>&1; then |
| 116 | + exit 0 |
| 117 | + fi |
| 118 | + sleep 1 |
| 119 | + done |
| 120 | + sudo -H -u {{ openshell_gateway_service_user }} env \ |
| 121 | + XDG_RUNTIME_DIR=/run/user/{{ openshell_gateway_service_uid }} \ |
| 122 | + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{{ openshell_gateway_service_uid }}/bus \ |
| 123 | + systemctl --user status {{ openshell_gateway_service }} --no-pager >&2 || true |
| 124 | + exit 1 |
| 125 | +
|
| 126 | +- name: Install the target gateway diagnostics command |
| 127 | + ansible.builtin.copy: |
| 128 | + dest: "{{ openshell_gateway_diagnostics_command }}" |
| 129 | + mode: "0700" |
| 130 | + content: | |
| 131 | + #!/usr/bin/env bash |
| 132 | + set -u |
| 133 | + sudo -H -u {{ openshell_gateway_service_user }} env \ |
| 134 | + XDG_RUNTIME_DIR=/run/user/{{ openshell_gateway_service_uid }} \ |
| 135 | + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{{ openshell_gateway_service_uid }}/bus \ |
| 136 | + systemctl --user status {{ openshell_gateway_service }} --no-pager || true |
| 137 | + sudo -H -u {{ openshell_gateway_service_user }} env \ |
| 138 | + XDG_RUNTIME_DIR=/run/user/{{ openshell_gateway_service_uid }} \ |
| 139 | + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{{ openshell_gateway_service_uid }}/bus \ |
| 140 | + journalctl --user -u {{ openshell_gateway_service }} --no-pager -n 200 || true |
| 141 | + sudo -H -u {{ openshell_gateway_service_user }} podman info || true |
| 142 | + sudo -H -u {{ openshell_gateway_service_user }} podman ps --all || true |
| 143 | + if command -v getenforce >/dev/null 2>&1; then |
| 144 | + getenforce || true |
| 145 | + fi |
0 commit comments