121 lines
4.4 KiB
YAML
121 lines
4.4 KiB
YAML
---
|
|
# Assertions, not hope. Each of these has failed in practice for a different
|
|
# reason, so each gets its own check and its own error message.
|
|
|
|
- name: Verify | Daemon reports running
|
|
ansible.builtin.command:
|
|
argv: "{{ _multica_cmd + ['daemon', 'status', '--output', 'json'] }}"
|
|
become: true
|
|
become_user: "{{ multica_user }}"
|
|
environment: "{{ _multica_user_env }}"
|
|
register: _multica_verify_daemon
|
|
until:
|
|
- _multica_verify_daemon.rc == 0
|
|
- (_multica_verify_daemon.stdout | from_json).status | default('') == 'running'
|
|
retries: "{{ multica_verify_retries }}"
|
|
delay: "{{ multica_verify_delay }}"
|
|
changed_when: false
|
|
check_mode: false
|
|
|
|
- name: Verify | Daemon is the pinned version and sees the configured workspaces root
|
|
ansible.builtin.assert:
|
|
that:
|
|
- (_multica_verify_daemon.stdout | from_json).cli_version == multica_version
|
|
- (_multica_verify_daemon.stdout | from_json).server_url | regex_replace('/$', '')
|
|
== multica_server_url | regex_replace('/$', '')
|
|
fail_msg: >-
|
|
Daemon is running but does not match declared state:
|
|
{{ _multica_verify_daemon.stdout }}
|
|
quiet: true
|
|
|
|
- name: Verify | Every selected agent CLI is registered as an online runtime
|
|
ansible.builtin.command:
|
|
argv: "{{ _multica_cmd + ['runtime', 'list', '--output', 'json'] }}"
|
|
become: true
|
|
become_user: "{{ multica_user }}"
|
|
environment: "{{ _multica_user_env }}"
|
|
register: _multica_verify_runtimes
|
|
until:
|
|
- _multica_verify_runtimes.rc == 0
|
|
- _multica_expected_providers
|
|
| difference(_multica_verify_runtimes.stdout | from_json
|
|
| selectattr('daemon_id', 'equalto', (_multica_verify_daemon.stdout | from_json).daemon_id)
|
|
| selectattr('status', 'equalto', 'online')
|
|
| map(attribute='provider') | list)
|
|
| length == 0
|
|
retries: "{{ multica_verify_retries }}"
|
|
delay: "{{ multica_verify_delay }}"
|
|
changed_when: false
|
|
check_mode: false
|
|
vars:
|
|
_multica_expected_providers: >-
|
|
{{ multica_agent_clis | map('extract', multica_agent_cli_catalog, 'provider') | list }}
|
|
|
|
- name: Verify | Runtimes name this host
|
|
ansible.builtin.assert:
|
|
that:
|
|
- _multica_verify_runtimes.stdout | from_json
|
|
| selectattr('daemon_id', 'equalto', (_multica_verify_daemon.stdout | from_json).daemon_id)
|
|
| rejectattr('device_info', 'search', '^' ~ (multica_device_name | regex_escape))
|
|
| list | length == 0
|
|
fail_msg: >-
|
|
Runtimes registered under this daemon do not report device_name
|
|
"{{ multica_device_name }}".
|
|
quiet: true
|
|
|
|
- name: Verify | Stat the workspaces root
|
|
ansible.builtin.stat:
|
|
path: "{{ multica_workspaces_root }}"
|
|
register: _multica_verify_ws
|
|
become: true
|
|
|
|
- name: Verify | Re-prove the daemon user can write to the workspaces root
|
|
ansible.builtin.command:
|
|
argv:
|
|
- /bin/sh
|
|
- -c
|
|
- 'd="$1"; f="$d/.multica-write-test.$$"; : > "$f" && rm -f "$f"'
|
|
- sh
|
|
- "{{ multica_workspaces_root }}"
|
|
become: true
|
|
become_user: "{{ multica_user }}"
|
|
register: _multica_verify_ws_write
|
|
changed_when: false
|
|
failed_when: false
|
|
check_mode: false
|
|
|
|
- name: Verify | Workspaces root assertions
|
|
ansible.builtin.assert:
|
|
that:
|
|
- _multica_verify_ws.stat.exists
|
|
- _multica_verify_ws.stat.isdir
|
|
- _multica_verify_ws.stat.pw_name == multica_user
|
|
- _multica_verify_ws_write.rc == 0
|
|
fail_msg: >-
|
|
{{ multica_workspaces_root }} is missing, not a directory, or not
|
|
owned/writable by {{ multica_user }}.
|
|
quiet: true
|
|
|
|
- name: Verify | Workspaces root is on the expected mount
|
|
ansible.builtin.assert:
|
|
that:
|
|
- multica_workspaces_root_mount in (ansible_facts['mounts'] | map(attribute='mount') | list)
|
|
fail_msg: "{{ multica_workspaces_root_mount }} is not mounted."
|
|
quiet: true
|
|
when: multica_workspaces_root_mount | length > 0
|
|
|
|
- name: Verify | Report what still needs a human
|
|
ansible.builtin.debug:
|
|
msg: >-
|
|
{{ multica_device_name }} is provisioned: multica {{ multica_version }},
|
|
daemon running, runtimes online for
|
|
{{ multica_agent_clis | join(', ') }}.
|
|
Remaining manual step(s):
|
|
{{ multica_agent_clis
|
|
| select('in', multica_agent_cli_catalog)
|
|
| map('extract', multica_agent_cli_catalog)
|
|
| selectattr('manual_login', 'defined')
|
|
| selectattr('manual_login')
|
|
| map(attribute='manual_login_hint')
|
|
| list | join('; ') | default('none', true) }}
|