Add guest playbooks: ssh hardening, reboot check, auto updates, service check, guest agent, admin user

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JEczyvRjfakkiDNkbZA7PR
This commit is contained in:
Harwinder Sekhon
2026-09-06 20:27:50 -04:00
parent 3f4b067014
commit 7ff69de8c4
6 changed files with 724 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
---
# Verifies the critical services listed per host in the inventory
# (critical_services) and optionally starts any that are stopped.
#
# Extra vars (optional):
# restart_stopped - default false; when true, start services found stopped
- name: Check Host Availability
hosts: ubuntu:rocky
gather_facts: false
ignore_unreachable: true
tasks:
- name: Ping hosts to check availability
ansible.builtin.ping:
register: ping_result
ignore_errors: true
ignore_unreachable: true
- name: Add reachable hosts to group
ansible.builtin.group_by:
key: reachable_hosts
when: ping_result is succeeded
- name: Report offline hosts
ansible.builtin.debug:
msg: "{{ inventory_hostname }} - OFFLINE"
when: ping_result is not succeeded
delegate_to: localhost
- name: Service Check
hosts: reachable_hosts
become: true
gather_facts: false
vars:
restart_stopped: false
tasks:
- name: Gather service facts
ansible.builtin.service_facts:
- name: Evaluate critical services
ansible.builtin.set_fact:
service_states: >-
{{ service_states | default([])
+ [{'name': item, 'state': (ansible_facts.services[item ~ '.service'].state | default('not-found'))}] }}
loop: "{{ critical_services | default([]) }}"
- name: Print report
ansible.builtin.debug:
msg: |
======================================================
HOST: {{ inventory_hostname }} ({{ ansible_host }})
======================================================
{% if service_states | default([]) | length == 0 %}
no critical services defined in inventory
{% else %}
{% for svc in service_states %}
{{ '%-24s' | format(svc.name) }} {{ 'RUNNING' if svc.state == 'running' else ('NOT FOUND' if svc.state == 'not-found' else svc.state | upper) }}
{% endfor %}
{% endif %}
======================================================
- name: Warn on services that are not running
ansible.builtin.debug:
msg: "WARNING: {{ item.name }} is {{ 'not installed' if item.state == 'not-found' else item.state }} on {{ inventory_hostname }}"
loop: "{{ service_states | default([]) }}"
loop_control:
label: "{{ item.name }}"
when: item.state != 'running'
- name: Start stopped services
ansible.builtin.service:
name: "{{ item.name }}"
state: started
loop: "{{ service_states | default([]) }}"
loop_control:
label: "{{ item.name }}"
when:
- restart_stopped | bool
- item.state not in ['running', 'not-found']