engonzal.proxmoxct

Ansible 角色:Proxmox

这是一个设置新容器的角色。请注意,你必须已配置对 Proxmox 节点的 root SSH 访问。此外,你还必须拥有对 Proxmox 主机/集群的 API 访问权限。

此角色主要在 Ansible 本地主机上运行。一些任务将使用“delegate_to”选项在远程 Proxmox 节点上运行。

角色变量

有很多变量可用于容器的配置。所需变量取决于你的使用案例。大多数是可选的。

简单容器:

pve_node: pve1
pve_apiuser: root@pam
pve_apipass: myAPIpassword
pve_hostname: "newhostname"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz

带有 Proxmox 节点绑定挂载的详细示例。我在我的集群中添加了一个 cephfs 挂载,因此它在每个 Proxmox 节点上都挂载:

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domain.com
pve_hostname: "newhostname"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
pve_netif:
  net0: "name=eth0,gw=192.168.84.1,ip=192.168.84.20/24,bridge=vmbr0"
pve_cores: 2
pve_mem: 2048
pve_swap: "{{ pve_mem }}"
pve_guest_pass: myContainerRootPassword
pve_search: domain.com
pve_dns: '192.168.84.1'
pve_storage: ceph_storage_ct
pve_unprivileged: yes
pve_ssh: "ssh-rsa myPublicKey engonzal@hostname"
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/downloads/,mp=/downloads"
  mp1: "/mnt/pve/cephfs_data/media,mp=/media"

示例播放书

Ansible 主机清单文件

# hosts
[proxmox_containers]
test_server

Ansible 播放书

# proxmox.yml
---
- hosts: plex_app
  connection: local
  user: root
  vars:
    pve_node: pve1
    pve_apiuser: root@pam
    pve_apipass: myAPIpassword
    pve_api_host: pve1.domain.com
    pve_hostname: "newhostname"
    pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
  roles:
    - engonzal.proxmoxct

执行 Ansible 命令

ansible-playbook -i hosts -l test_server proxmox.yml

示例播放书(高级)

如果你有其他播放在后面运行,你也可以在播放之后添加延迟:

---
- hosts: plex_app
  connection: local
  user: root
  pre_tasks:
  - name: 获取当前 Python 解释器(用于 pip 虚拟环境)
    command: which python
    register: which_interpreter
    tags: always
    changed_when: False

  - name: 使用当前 Python 路径而不是系统 Python
    set_fact:
      ansible_python_interpreter: "{{ which_interpreter.stdout }}"
    tags: always

  roles:
    - name: engonzal.proxmoxct
      tags: pve
  post_tasks:
    - name: 如果容器已启动,则允许容器有时间启动
      pause:
        seconds: 20
      when: pve_info_state.changed

- hosts: plex_app
  user: root
  vars:
    ansible_python_interpreter: /usr/bin/python3 # 需要用于 bionic ct
    package_list:
      - vim
  roles:
    - engonzal.package

其他示例

DHCP 示例:

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domain.com
pve_state: present
pve_hostname: "newhostname"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
pve_netif:
  net0: "name=eth0,ip=dhcp,ip6=dhcp,bridge=vmbr0"
pve_storage: local-lvm
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/downloads/,mp=/downloads"
  mp1: "/mnt/pve/cephfs_data/media,mp=/media"

组织

对于我的使用案例,我将变量组织如下(使用 ansible vault 加密密码):

# group_vars/all
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domain.com
pve_guest_pass: myContainerRootPassword
pve_search: domain.com
pve_dns: '192.168.84.1'
pve_unprivileged: yes
pve_ssh: "ssh-rsa myPublicKey engonzal@hostname"

# group_vars/plex
pve_node: pve3
pve_vmid: 114
pve_hostname: "plex"
pve_netif:
  net0: "name=eth0,gw=192.168.84.1,ip=192.168.84.20/24,bridge=vmbr0"
pve_template: local:vztmpl/ubuntu-18.10-standard_18.10-1_amd64.tar.gz
pve_cores: 8
pve_mem: 4096
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/media,mp=/media"

许可证

BSD

说明

Proxmox API 信息可在以下网址获得:

关于项目

Provision Proxmox LXC containers with Ansible

安装
ansible-galaxy install engonzal.proxmoxct
许可证
Unknown
下载
236
拥有者
I'm a Linux engineer. Verifications - https://defcon.social/@engonzal