infra: introduce terraform/opentofu for proxmox management
- move ansible project within infra - introduce terraform/opentofu for proxmox VM management
This commit is contained in:
110
infra/ansible/README.md
Normal file
110
infra/ansible/README.md
Normal file
@ -0,0 +1,110 @@
|
||||
# Ansible Playbook for Proxmox VM Management
|
||||
|
||||
This Ansible playbook automates the creation, deletion, and configuration of
|
||||
virtual machines (VMs) on a Proxmox server.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Ansible installed on the local machine
|
||||
- Ansible community.general.proxmox_kvm module
|
||||
- Access to a Proxmox server with API access enabled
|
||||
- Python `proxmoxer` library installed (`pip install proxmoxer`)
|
||||
|
||||
## Setup
|
||||
|
||||
1. Clone this repository:
|
||||
```sh
|
||||
git clone https://github.com/TheTaqiTahmid/proxmox_ansible_automation
|
||||
```
|
||||
|
||||
2. Update the `inventory` file with your Proxmox server details:
|
||||
```yaml
|
||||
all:
|
||||
hosts:
|
||||
proxmox:
|
||||
ansible_host: your_proxmox_ip
|
||||
ansible_user: your_proxmox_user
|
||||
ansible_password: your_proxmox_password
|
||||
```
|
||||
In the current example implementation in `inventories/hosts.yaml`, there are
|
||||
multiple groups depending on the types of hosts.
|
||||
|
||||
3. Add group-related variables to the group file under the `group_vars` directory
|
||||
and individual host-related variables to the files under the `host_vars`
|
||||
directory. Ansible will automatically pick up these variables.
|
||||
|
||||
4. Add the following secrets to the ansible-vault:
|
||||
- proxmox_api_token_id
|
||||
- proxmox_api_token
|
||||
- ansible_proxmox_user
|
||||
- ansible_vm_user
|
||||
- proxmox_user
|
||||
- ansible_ssh_private_key_file
|
||||
- ciuser
|
||||
- cipassword
|
||||
|
||||
One can create the secret file using the following command:
|
||||
```sh
|
||||
ansible-vault create secrets/vault.yml
|
||||
```
|
||||
|
||||
To encrypt and decrypt the file, use the following commands:
|
||||
```sh
|
||||
ansible-vault encrypt secrets/vault.yml
|
||||
ansible-vault decrypt secrets/vault.yml
|
||||
```
|
||||
The password for vault file can be stored in a file or can be provided during
|
||||
the encryption/decryption process. The password file location can be specified
|
||||
in the `ansible.cfg` file.
|
||||
|
||||
## Playbooks
|
||||
|
||||
### Create VM
|
||||
|
||||
To create the VMs, run the following command:
|
||||
```sh
|
||||
ansible-playbook playbooks/create-vms.yaml
|
||||
```
|
||||
The playbook can be run against specific Proxmox instance using:
|
||||
```sh
|
||||
ansible-playbook playbooks/create-vms.yaml --limit proxmox1
|
||||
```
|
||||
|
||||
### Delete VM
|
||||
|
||||
To delete existing VMs, run the following command:
|
||||
```sh
|
||||
ansible-playbook playbooks/destroy-vms.yaml
|
||||
```
|
||||
|
||||
Similarly the destory playbook can be run against specific Proxmox instance using:
|
||||
```sh
|
||||
ansible-playbook playbooks/destroy-vms.yaml --limit proxmox1
|
||||
```
|
||||
|
||||
### Configure VM
|
||||
|
||||
To configure an existing VM, run the following command:
|
||||
```sh
|
||||
ansible-playbook playbooks/configure-vms.yaml
|
||||
```
|
||||
|
||||
The configuration can be limited to individual VMs using limits:
|
||||
```sh
|
||||
ansible-playbook playbooks/configure-vms.yaml --limit vm6
|
||||
```
|
||||
|
||||
## Variables
|
||||
|
||||
The playbooks use the following variables, which can be customized in the
|
||||
`group_vars/proxmox.yml` file:
|
||||
|
||||
- `vm_id`: The ID of the VM
|
||||
- `vm_name`: The name of the VM
|
||||
- `vm_memory`: The amount of memory for the VM
|
||||
- `vm_cores`: The number of CPU cores for the VM
|
||||
- `vm_disk_size`: The size of the VM disk
|
||||
|
||||
## Author
|
||||
|
||||
- Taqi Tahmid (mdtaqitahmid@gmail.com)
|
||||
Reference in New Issue
Block a user