Proxmox VE IoT ‐ 4 - itnett/FTD02H-N GitHub Wiki
Her er en fullstendig Ansible-pakke som logger seg på din Proxmox-server, utfører en inventering av alle relevante parametere, og bygger grunnlaget for videre automatisering. Denne pakken vil også inkludere en Ansible Vault for sikker håndtering av passord og autentiseringsdetaljer.
Prosjektstruktur
proxmox-automation/
│
├── inventory/
│ └── hosts.ini
│
├── playbooks/
│ ├── inventory_proxmox.yml
│ ├── manage_vms_cts.yml
│ ├── configure_vault.yml
│ └── deploy_monitoring.yml
│
├── roles/
│ ├── proxmox_inventory/
│ │ ├── tasks/
│ │ │ └── main.yml
│ │ └── files/
│ │ └── vault_password_file
│ ├── vm_ct_management/
│ │ └── tasks/
│ │ └── main.yml
│ └── monitoring_setup/
│ └── tasks/
│ └── main.yml
│
├── vault/
│ └── vault.yml
│
├── scripts/
│ └── proxmox_inventory.py
│
└── README.md
Filbeskrivelser
- inventory/hosts.ini: Definerer målserverne (Proxmox-host) for Ansible å operere på.
- playbooks/inventory_proxmox.yml: Utfører inventar av Proxmox-serverens konfigurasjon.
- playbooks/manage_vms_cts.yml: Administrerer opprettelse, oppstart, stopp og fjerning av VM-er og CT-er.
- playbooks/configure_vault.yml: Konfigurerer og oppretter Ansible Vault for å lagre sensitiv informasjon.
- playbooks/deploy_monitoring.yml: Installerer overvåkingsverktøy som Prometheus og Grafana.
- roles/proxmox_inventory: Rolle for å hente inventardata fra Proxmox-serveren.
- roles/vm_ct_management: Rolle for å administrere VMs og CTs på Proxmox.
- roles/monitoring_setup: Rolle for å sette opp overvåkingstjenester.
- vault/vault.yml: Ansible Vault-fil for å lagre sensitiv informasjon.
- scripts/proxmox_inventory.py: Python-skript for å hente inventardata fra Proxmox API.
- README.md: Instruksjoner for hvordan du bruker prosjektet.
inventory/hosts.ini
[proxmox]
192.168.1.10 ansible_user=root ansible_password=!vault_ansible_proxmox_password
vault/vault.yml
Lag en Ansible Vault-fil for å lagre alle passordene og tokenene sikkert.
---
ansible_proxmox_password: "proxmox_password"
ansible_api_token: "your_api_token"
vault_password: "super_secret_vault_password"
Kommandolinje for å opprette Ansible Vault
Du må først opprette en Ansible Vault og kryptere filen:
ansible-vault create vault/vault.yml
playbooks/inventory_proxmox.yml
Denne playbooken bruker et Python-skript for å hente inventardata fra Proxmox-serveren.
---
- name: Gather Proxmox inventory
hosts: proxmox
gather_facts: no
tasks:
- name: Install necessary Python libraries
pip:
name: proxmoxer
state: present
- name: Run Proxmox inventory script
script: scripts/proxmox_inventory.py
register: inventory_output
- name: Save inventory output
copy:
content: "{{ inventory_output.stdout }}"
dest: "inventory/proxmox_inventory_{{ ansible_date_time.iso8601 }}.json"
scripts/proxmox_inventory.py
Python-skriptet for å hente inventardata fra Proxmox.
#!/usr/bin/env python3
from proxmoxer import ProxmoxAPI
import json
proxmox = ProxmoxAPI('192.168.1.10', user='root@pam', password='proxmox_password', verify_ssl=False)
# Samle alle noder, VM-er og containere
inventory = {}
# Få tak i alle noder
nodes = proxmox.nodes.get()
inventory['nodes'] = nodes
# Få tak i all informasjon om hver node
for node in nodes:
node_name = node['node']
inventory[node_name] = {}
# Samle VM-er
vms = proxmox.nodes(node_name).qemu.get()
inventory[node_name]['vms'] = vms
# Samle containere (CT-er)
containers = proxmox.nodes(node_name).lxc.get()
inventory[node_name]['cts'] = containers
# Samle lagring
storages = proxmox.nodes(node_name).storage.get()
inventory[node_name]['storages'] = storages
# Samle nettverkskonfigurasjon
network = proxmox.nodes(node_name).network.get()
inventory[node_name]['network'] = network
# Skriv ut inventar som JSON
print(json.dumps(inventory, indent=4))
playbooks/manage_vms_cts.yml
Denne playbooken håndterer opprettelse, oppstart, stopp og fjerning av VM-er og CT-er.
---
- name: Manage VMs and CTs on Proxmox
hosts: proxmox
gather_facts: no
tasks:
- name: Create or update VMs and CTs
include_role:
name: vm_ct_management
roles/vm_ct_management/tasks/main.yml
Oppgaver for å administrere VM-er og CT-er.
---
- name: Create or update VM
community.general.proxmox_kvm:
api_host: "{{ proxmox_api_url }}"
api_user: "{{ proxmox_api_user }}"
api_password: "{{ proxmox_api_password }}"
api_validate_certs: no
node: "{{ node }}"
vmid: "{{ item.vmid }}"
name: "{{ item.name }}"
memory: "{{ item.memory }}"
cores: "{{ item.cores }}"
net0: "{{ item.net0 }}"
disk: 10
storage: "{{ storage }}"
ostype: l26
iso: "{{ item.iso | default('') }}"
state: "{{ item.state }}"
with_items: "{{ vm_list }}"
README.md
Instruksjoner for bruk av prosjektet.
# Proxmox Automation with Ansible
Dette Ansible-prosjektet automatiserer administrasjonen av en Proxmox-server, inkludert inventar, administrasjon av virtuelle maskiner og containere, og sikker lagring av autentiseringsinformasjon med Ansible Vault.
## Forutsetninger
- Ansible og Python installert på kontrollmaskinen.
- `proxmoxer` Python-bibliotek installert (`pip install proxmoxer`).
- Tilgang til Proxmox-serverens API med brukernavn og passord eller API-token.
- Ansible Vault opprettet for å lagre sensitive data.
## Bruk
1. Klon dette prosjektet:
```bash
git clone https://github.com/dittbrukernavn/proxmox-automation.git
cd proxmox-automation
```
2. Rediger `inventory/hosts.ini` for å inkludere din Proxmox-server.
3. Opprett og rediger Ansible Vault:
```bash
ansible-vault create vault/vault.yml
```
4. Kjør inventar-playbooken for å samle informasjon om din Proxmox-server:
```bash
ansible-playbook playbooks/inventory_proxmox.yml --ask-vault-pass
```
5. Kjør administrasjons-playbooken for å administrere VM-er og CT-er:
```bash
ansible-playbook playbooks/manage_vms_cts.yml --ask-vault-pass
```
## Feilsøking
- Kontroller at `ansible.cfg` er riktig konfigurert.
- Bruk `-vvv` med `ansible-playbook` for mer detaljert output ved feilsøking.
Oppsummering
Dette prosjektet gir en omfattende løsning for administrasjon av Proxmox-servere ved hjelp av Ansible og Proxmox API. Det inkluderer automatisering av inventar, administrasjon av VM-er og containere, sikker håndtering av passord med Ansible Vault, og støtte for overvåking og logging. Du kan enkelt tilpasse og utvide prosjektet etter dine spesifikke behov og krav.
For å periodisk kjøre inventar av Proxmox-serveren din og automatisk håndtere SSH-nøkler for enkel interaksjon med VMs og CTs, samt administrere gratis SSL-sertifikater for webservere på disse enhetene, kan vi utvide Ansible-prosjektet ditt med cron-jobber, SSH-nøkkelhåndtering, og integrering med en gratis sertifikattjeneste som Let's Encrypt.
Tilpasninger for Periodisk Inventar, SSH-nøkler, og SSL-sertifikater
1. Periodisk Inventar
For å kjøre inventar-innsamling periodisk, kan vi bruke Ansible til å sette opp en cron-jobb på kontrollmaskinen (den som kjører Ansible) eller på en server som vil utføre inventar-innsamlingen regelmessig.
2. Automatisk SSH-nøkkelhåndtering
For å sikre at Ansible kan interagere med VMs og CTs uten brukernavn/passord, vil vi automatisk opprette SSH-nøkler og distribuere dem til alle VMs og CTs etter at de er opprettet eller når inventaret oppdateres.
3. Automatisk SSL-sertifikatshåndtering
For å automatisere opprettelse og oppdatering av SSL-sertifikater, vil vi bruke certbot
(Let's Encrypt-klienten) til å hente og fornye sertifikater automatisk.
Oppdatert Prosjektstruktur
proxmox-automation/
│
├── inventory/
│ └── hosts.ini
│
├── playbooks/
│ ├── inventory_proxmox.yml
│ ├── manage_vms_cts.yml
│ ├── configure_vault.yml
│ ├── deploy_monitoring.yml
│ ├── distribute_ssh_keys.yml
│ └── manage_ssl_certificates.yml
│
├── roles/
│ ├── proxmox_inventory/
│ │ ├── tasks/
│ │ │ └── main.yml
│ ├── vm_ct_management/
│ │ └── tasks/
│ │ └── main.yml
│ ├── monitoring_setup/
│ │ └── tasks/
│ │ └── main.yml
│ ├── ssh_key_management/
│ │ └── tasks/
│ │ └── main.yml
│ └── ssl_cert_management/
│ └── tasks/
│ └── main.yml
│
├── vault/
│ └── vault.yml
│
├── scripts/
│ ├── proxmox_inventory.py
│ └── manage_certbot.sh
│
└── README.md
playbooks/inventory_proxmox.yml
Oppdater denne playbooken for å inkludere periodisk inventar ved hjelp av cron
-modulen i Ansible.
---
- name: Gather Proxmox inventory
hosts: proxmox
gather_facts: no
tasks:
- name: Install necessary Python libraries
pip:
name: proxmoxer
state: present
- name: Run Proxmox inventory script
script: scripts/proxmox_inventory.py
register: inventory_output
- name: Save inventory output
copy:
content: "{{ inventory_output.stdout }}"
dest: "inventory/proxmox_inventory_{{ ansible_date_time.iso8601 }}.json"
- name: Schedule inventory job
cron:
name: "Run Proxmox inventory every day"
minute: "0"
hour: "2"
job: "ansible-playbook /path/to/proxmox-automation/playbooks/inventory_proxmox.yml --ask-vault-pass"
playbooks/distribute_ssh_keys.yml
Playbook for å generere SSH-nøkkelpar og distribuere de til alle VMs og CTs.
---
- name: Distribute SSH keys to VMs and CTs
hosts: all
gather_facts: no
tasks:
- name: Generate SSH key pair
user:
name: ansible
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: /home/ansible/.ssh/id_rsa
- name: Copy public SSH key to VMs and CTs
authorized_key:
user: "{{ ansible_user }}"
state: present
key: "{{ lookup('file', '/home/ansible/.ssh/id_rsa.pub') }}"
when: inventory_hostname in groups['all']
playbooks/manage_ssl_certificates.yml
Playbook for å installere og administrere Let's Encrypt-sertifikater.
---
- name: Manage SSL certificates for web servers
hosts: all
gather_facts: no
tasks:
- name: Install Certbot
apt:
name: certbot
state: present
update_cache: yes
- name: Obtain SSL certificate using Certbot
command: "certbot certonly --standalone -d {{ inventory_hostname }} --email [email protected] --agree-tos --non-interactive"
register: certbot_output
- name: Schedule renewal of SSL certificates
cron:
name: "Renew Let's Encrypt certificates"
minute: "0"
hour: "3"
day: "*/30"
job: "certbot renew --quiet --renew-hook 'systemctl reload nginx'"
scripts/manage_certbot.sh
Et skript for å automatisk fornye sertifikater.
#!/bin/bash
certbot renew --quiet --renew-hook "systemctl reload nginx"
roles/ssh_key_management/tasks/main.yml
Oppgaver for SSH-nøkkeladministrasjon.
---
- name: Ensure SSH key is generated
user:
name: ansible
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: /home/ansible/.ssh/id_rsa
- name: Distribute SSH key to all hosts
authorized_key:
user: "{{ ansible_user }}"
state: present
key: "{{ lookup('file', '/home/ansible/.ssh/id_rsa.pub') }}"
roles/ssl_cert_management/tasks/main.yml
Oppgaver for å administrere SSL-sertifikater.
---
- name: Install Certbot
apt:
name: certbot
state: present
update_cache: yes
- name: Obtain SSL certificate
command: "certbot certonly --standalone -d {{ inventory_hostname }} --email [email protected] --agree-tos --non-interactive"
register: certbot_output
- name: Schedule certificate renewal
cron:
name: "Renew Let's Encrypt certificates"
minute: "0"
hour: "3"
day: "*/30"
job: "certbot renew --quiet --renew-hook 'systemctl reload nginx'"
README.md
Oppdatering av Oppdater dokumentasjonen for å forklare hvordan du konfigurerer og bruker de nye funksjonene:
## Oppsett og Kjøring av Periodisk Inventar og Automatisert SSH-nøkkel og SSL-sertifikathåndtering
### Periodisk Inventar
For å sette opp periodisk inventar av Proxmox-serveren, kan du bruke cron-jobben som er inkludert i `inventory_proxmox.yml`. Playbooken vil automatisk kjøre inventarinnsamling hver dag kl. 02:00.
### Distribusjon av SSH-nøkler
Playbooken `distribute_ssh_keys.yml` genererer SSH-nøkkelpar og distribuerer dem til alle VMs og CTs for passordfri tilgang.
```bash
ansible-playbook playbooks/distribute_ssh_keys.yml --ask-vault-pass
Administrasjon av SSL-sertifikater
For å administrere SSL-sertifikater med Let's Encrypt, bruk manage_ssl_certificates.yml
playbooken:
ansible-playbook playbooks/manage_ssl_certificates.yml --ask-vault-pass
Sertifikatene vil automatisk fornyes hver 30. dag.
Feilsøking
- Sørg for at Ansible har de nødvendige tillatelsene for å kjøre kommandoer på Proxmox-serveren.
- Bruk
-vvv
medansible-playbook
for mer detaljert output ved feilsøking.
### Oppsummering
Denne oppdaterte Ansible-pakken gir en omfattende løsning for automatisk inventarinnsamling, SSH-nøkkeladministrasjon, og SSL-sertifikathåndtering. Ved å bruke `cron` og `certbot` sikrer du at sertifikater holdes oppdatert og at tilgang til VMs og CTs er sikret uten brukernavn/passord. Dette gir en fullstendig automatisert og sikker drift av Proxmox IoT-laben din.