Skip to content

Commit 08a1208

Browse files
committed
Add guestregisterservice diagnostic
1 parent 1d814bb commit 08a1208

2 files changed

Lines changed: 140 additions & 31 deletions

File tree

ansible/playbooks/registration.yaml

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454
when: ifc_bin.rc != 0
5555

5656
# Is registercloudguest available?
57-
# only run it if:
58-
# - there's at least one 'Not Registered' module
57+
# Only check about it if there any chance that it needs to be used
58+
# so only if it is at least one 'Not Registered' module
5959
- name: Check for registercloudguest
6060
ansible.builtin.command: which registercloudguest
6161
register: is_registercloudguest_bin
@@ -118,39 +118,11 @@
118118
when: not to_be_registered
119119

120120
- name: Collect logs if guestregister.service is not in the expected state
121+
ansible.builtin.include_tasks: tasks/check-guestregister-service.yaml
121122
when:
122123
- not to_be_registered
123124
- guestregister_service_state is defined
124125
- guestregister_service_state.failed | default(false)
125-
block:
126-
- name: Show message
127-
ansible.builtin.debug:
128-
msg: "guestregister.service is not in the expected state (inactive/success). Collecting logs."
129-
130-
- name: Get guestregister.service status
131-
ansible.builtin.command: systemctl status guestregister.service
132-
register: guestregister_systemctl_status
133-
changed_when: false
134-
failed_when: false
135-
136-
- name: Show guestregister.service status
137-
ansible.builtin.debug:
138-
var: guestregister_systemctl_status.stdout_lines
139-
140-
- name: Get journalctl for guestregister.service
141-
ansible.builtin.command: journalctl -u guestregister.service --no-pager
142-
register: guestregister_logs
143-
changed_when: false
144-
failed_when: false
145-
146-
- name: Show guestregister.service logs
147-
ansible.builtin.debug:
148-
var: guestregister_logs.stdout_lines
149-
150-
- name: Fail if guestregister.service is not in the expected state
151-
ansible.builtin.assert:
152-
that: false
153-
fail_msg: "FATAL: guestregister.service is not in the expected state (inactive/success) after retries. Check logs above for details."
154126

155127
# Start by pre-cleaning all. Only run it if:
156128
# - the registercloudguest binary is available
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
---
2+
- name: Show message
3+
ansible.builtin.debug:
4+
msg: "guestregister.service is not in the expected state (inactive/success). Collecting logs."
5+
6+
- name: Get guestregister.service status
7+
ansible.builtin.command: systemctl status guestregister.service # noqa command-instead-of-module
8+
register: guestregister_systemctl_status
9+
changed_when: false
10+
failed_when: false
11+
12+
- name: Show guestregister.service status
13+
ansible.builtin.debug:
14+
var: guestregister_systemctl_status.stdout_lines
15+
16+
- name: Get journalctl for guestregister.service
17+
ansible.builtin.command: journalctl -u guestregister.service --no-pager
18+
register: guestregister_logs
19+
changed_when: false
20+
failed_when: false
21+
22+
- name: Show guestregister.service logs
23+
ansible.builtin.debug:
24+
var: guestregister_logs.stdout_lines
25+
26+
- name: Get guestregister.service definition
27+
ansible.builtin.command: systemctl cat guestregister.service # noqa command-instead-of-module
28+
register: guestregister_service_definition
29+
changed_when: false
30+
failed_when: false
31+
when: guestregister_systemctl_status.failed | default(false)
32+
33+
- name: Handle guestregister.service failure with status 67
34+
when: '"code=exited, status=67" in guestregister_systemctl_status.stdout'
35+
block:
36+
- name: Set guestregister service user
37+
ansible.builtin.set_fact:
38+
guestregister_user: "{{ guestregister_service_definition.stdout | regex_search('^User=(.*)$', '\\1') | first | trim }}"
39+
when: guestregister_service_definition.stdout is defined
40+
41+
- name: Check if guestregister user exists
42+
ansible.builtin.command: "id {{ guestregister_user }}"
43+
register: guestregister_user_exists
44+
changed_when: false
45+
failed_when: false
46+
when: guestregister_user is defined and guestregister_user | length > 0
47+
48+
- name: Fail if guestregister user does not exist
49+
ansible.builtin.fail:
50+
msg: "FATAL: guestregister.service failed with status 67 because user '{{ guestregister_user }}' does not exist."
51+
when:
52+
- guestregister_user is defined
53+
- guestregister_user | length > 0
54+
- guestregister_user_exists is defined
55+
- guestregister_user_exists.rc != 0
56+
57+
- name: Check for corrupted registration file
58+
ansible.builtin.stat:
59+
path: /etc/zypp/credentials.d/SCCcredentials
60+
register: scc_credentials_stat
61+
62+
- name: Check SCCcredentials file
63+
when:
64+
- scc_credentials_stat.stat is defined
65+
- scc_credentials_stat.stat.exists
66+
block:
67+
- name: Fail if SCCcredentials is empty
68+
ansible.builtin.fail:
69+
msg: "FATAL: /etc/zypp/credentials.d/SCCcredentials is empty. Please delete the file and re-run registration."
70+
when: scc_credentials_stat.stat.size == 0
71+
72+
- name: Fail if SCCcredentials has wrong permissions or owner
73+
ansible.builtin.fail:
74+
msg: "FATAL: /etc/zypp/credentials.d/SCCcredentials has wrong permissions or owner. Expected root:root and 0640, got {{ scc_credentials_stat.stat.pw_name }}:{{ scc_credentials_stat.stat.gr_name }} and {{ scc_credentials_stat.stat.mode }}. Please correct permissions."
75+
when: >
76+
scc_credentials_stat.stat.pw_name != 'root' or
77+
scc_credentials_stat.stat.gr_name != 'root' or
78+
scc_credentials_stat.stat.mode != '0640'
79+
80+
- name: HAndle guestregister.service failure with status 1
81+
when: '"code=exited, status=1" in guestregister_systemctl_status.stdout'
82+
block:
83+
- name: Set guestregister ExecStart command fact
84+
ansible.builtin.set_fact:
85+
guestregister_exec_start: "{{ guestregister_service_definition.stdout | regex_search('^ExecStart=(.*)$', '\\1') | first | trim }}"
86+
when: guestregister_service_definition.stdout is defined
87+
88+
- name: Analyze guestregister service dependencies
89+
ansible.builtin.command: systemd-analyze critical-chain guestregister.service
90+
register: guestregister_deps
91+
changed_when: false
92+
failed_when: false
93+
94+
- name: Show dependency analysis
95+
ansible.builtin.debug:
96+
var: guestregister_deps.stdout_lines
97+
98+
- name: Get guestregister version
99+
ansible.builtin.command: /usr/sbin/guestregister --version
100+
register: guestregister_version
101+
changed_when: false
102+
failed_when: false
103+
104+
- name: Show guestregister version
105+
ansible.builtin.debug:
106+
var: guestregister_version.stdout_lines
107+
108+
- name: Get guestregister package
109+
ansible.builtin.command: rpm -qf /usr/sbin/guestregister # noqa command-instead-of-module
110+
register: guestregister_package
111+
changed_when: false
112+
failed_when: false
113+
114+
- name: Show guestregister package
115+
ansible.builtin.debug:
116+
var: guestregister_package.stdout_lines
117+
118+
- name: Simulate guestregister execution
119+
ansible.builtin.command: "{{ guestregister_exec_start }}"
120+
register: guestregister_manual_run
121+
changed_when: false
122+
failed_when: false
123+
when: guestregister_exec_start is defined and guestregister_exec_start | length > 0
124+
125+
- name: Show simulated execution output
126+
ansible.builtin.debug:
127+
msg:
128+
- "Simulated execution of '{{ guestregister_exec_start }}' as root:"
129+
- "rc: {{ guestregister_manual_run.rc }}"
130+
- "stdout: {{ guestregister_manual_run.stdout }}"
131+
- "stderr: {{ guestregister_manual_run.stderr }}"
132+
when: guestregister_manual_run is defined and not guestregister_manual_run.skipped
133+
134+
- name: Fail if guestregister.service is not in the expected state
135+
ansible.builtin.assert:
136+
that: false
137+
fail_msg: "FATAL: guestregister.service is not in the expected state (inactive/success) after retries. Check logs above for details."

0 commit comments

Comments
 (0)