mgmt/pve/pve-web-diagnosis.yml

172 lines
4.7 KiB
YAML

---
- name: PVE Web Interface Diagnosis
hosts: pve_cluster
gather_facts: yes
tasks:
- name: Check PVE web services status
systemd:
name: "{{ item }}"
state: started
register: pve_web_services
loop:
- pveproxy
- pvedaemon
- pve-cluster
- pve-firewall
- name: Display PVE web services status
debug:
msg: |
{{ item.item }}: {{ item.status.ActiveState }}
loop: "{{ pve_web_services.results }}"
- name: Check PVE web port status
wait_for:
port: 8006
host: "{{ ansible_default_ipv4.address }}"
timeout: 5
register: pve_web_port
ignore_errors: yes
- name: Display PVE web port status
debug:
msg: "PVE Web Port 8006: {{ 'OPEN' if pve_web_port.rc == 0 else 'CLOSED' }}"
- name: Check listening ports
command: netstat -tlnp | grep :8006
register: listening_ports
ignore_errors: yes
- name: Display listening ports
debug:
msg: "{{ listening_ports.stdout_lines }}"
when: listening_ports.rc == 0
- name: Check PVE firewall status
command: pve-firewall status
register: firewall_status
ignore_errors: yes
- name: Display firewall status
debug:
msg: "{{ firewall_status.stdout_lines }}"
when: firewall_status.rc == 0
- name: Check PVE firewall rules
command: pve-firewall show
register: firewall_rules
ignore_errors: yes
- name: Display firewall rules
debug:
msg: "{{ firewall_rules.stdout_lines }}"
when: firewall_rules.rc == 0
- name: Check network interfaces
command: ip addr show
register: network_interfaces
- name: Display network interfaces
debug:
msg: "{{ network_interfaces.stdout_lines }}"
- name: Check routing table
command: ip route show
register: routing_table
- name: Display routing table
debug:
msg: "{{ routing_table.stdout_lines }}"
- name: Test connectivity to PVE web port from other nodes
command: nc -zv {{ inventory_hostname }} 8006
delegate_to: "{{ item }}"
loop: "{{ groups['pve_cluster'] }}"
when: item != inventory_hostname
register: connectivity_test
ignore_errors: yes
- name: Display connectivity test results
debug:
msg: "{{ item.item }} -> {{ inventory_hostname }}:8006 {{ 'SUCCESS' if item.rc == 0 else 'FAILED' }}"
loop: "{{ connectivity_test.results }}"
when: connectivity_test is defined
- name: Check PVE cluster status
command: pvecm status
register: cluster_status
ignore_errors: yes
- name: Display cluster status
debug:
msg: "{{ cluster_status.stdout_lines }}"
when: cluster_status.rc == 0
- name: Check PVE logs for errors
command: journalctl -u pveproxy -n 20 --no-pager
register: pveproxy_logs
ignore_errors: yes
- name: Display PVE proxy logs
debug:
msg: "{{ pveproxy_logs.stdout_lines }}"
when: pveproxy_logs.rc == 0
- name: Check system logs for network errors
command: journalctl -n 50 --no-pager | grep -i "route\|network\|connection"
register: network_logs
ignore_errors: yes
- name: Display network error logs
debug:
msg: "{{ network_logs.stdout_lines }}"
when: network_logs.rc == 0
- name: Check if PVE web interface is accessible locally
uri:
url: "https://localhost:8006"
method: GET
validate_certs: no
timeout: 10
register: local_web_test
ignore_errors: yes
- name: Display local web test result
debug:
msg: "Local PVE web access: {{ 'SUCCESS' if local_web_test.status == 200 else 'FAILED' }}"
when: local_web_test is defined
- name: Check PVE configuration files
stat:
path: /etc/pve/local/pve-ssl.key
register: ssl_key_stat
- name: Check SSL certificate
stat:
path: /etc/pve/local/pve-ssl.pem
register: ssl_cert_stat
- name: Display SSL status
debug:
msg: |
SSL Key exists: {{ ssl_key_stat.stat.exists }}
SSL Cert exists: {{ ssl_cert_stat.stat.exists }}
- name: Check PVE datacenter configuration
stat:
path: /etc/pve/datacenter.cfg
register: datacenter_cfg
- name: Display datacenter config status
debug:
msg: "Datacenter config exists: {{ datacenter_cfg.stat.exists }}"
- name: Check PVE cluster configuration
stat:
path: /etc/pve/corosync.conf
register: corosync_conf
- name: Display corosync config status
debug:
msg: "Corosync config exists: {{ corosync_conf.stat.exists }}"