nl2go.hetzner_installimage
Ansible 角色:Hetzner 安装映像
这是一个使用 Hetzner 机器人 API 管理 Hetzner 服务器 的操作系统镜像安装生命周期的 Ansible 角色。
前提条件
- 现有的 Hetzner Online GmbH 账户。
- 配置好的 Hetzner 机器人 webservice 账户。
- 在 Hetzner 机器人密钥管理 中存在 SSH 公钥。
要求
名称 | 类型 | 版本 | 位置 |
---|---|---|---|
ansible-filter | Python 包 | 1.0.1 | 控制节点 |
配置变量
以下变量建议在你的 ansible.cfg 文件中设置:
[defaults]
inventory = __你的清单__
forks = 1
host_key_checking = false
private_key_file = __你的 Hetzner 配置密钥__
remote_user = root
roles_path = __你的 Galaxy 角色路径__
[ssh_connection]
pipelining = True
scp_if_ssh = True
control_path = %(directory)s/%%h-%%r
角色变量
默认变量集定义了安装映像,最好在 group_vars/host_vars 中重写:
hetzner_installimage_install_bootloader: grub
hetzner_installimage_install_hostname: your-server-name-here
hetzner_installimage_install_partitions:
- PART swap swap 32G
- PART /boot ext4 1G
- PART / ext4 all
hetzner_installimage_install_image: Ubuntu-1604-xenial-64-minimal.tar.gz
该角色包括 RAID 值和设置的自动检测。如果检测到一个磁盘将配置无 RAID,如果检测到两个磁盘将配置 RAID1。可以使用以下变量覆盖自动 RAID 配置:
hetzner_installimage_install_drives:
- DRIVE1 /dev/sda
- DRIVE2 /dev/sdb
hetzner_installimage_install_raid:
- SWRAID 1
- SWRAIDLEVEL 0
也可以仅设置 hetzner_installimage_install_raid
让自动检测找到相应的磁盘。
以下强制变量需要在 group_vars/host_vars 中设置或作为额外变量,以允许与 webservice 通信和部署公钥:
hetzner_installimage_webservice_username: username
hetzner_installimage_webservice_password: password
以下变量可以选择性设置,以在 Hetzner 机器人中设置主机名:
hetzner_installimage_server_name: __你的服务器名称__
如果设置了 hetzner_installimage_key_fingerprints
,则在映像安装过程中仅会安装选定的密钥,而不是所有现有密钥将被配置。
hetzner_installimage_key_fingerprints:
- 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff
成功执行 playbook 后,该角色会在相应服务器的 /etc/hetzner_installimage_provisioned.flag
下创建一个标志文件。在角色的开始阶段,它会检查该文件是否存在于主机上,并跳过后续任务。可以通过使用变量 hetzner_installimage_ignore_provisioned_flag
来避免此行为:
--extra-vars "{ hetzner_installimage_ignore_provisioned_flag: yes }"
将此变量设置为 true
将跳过检查标志文件。
示例 Playbook
- hosts: hetzner
gather_facts: no
roles:
- nl2go.hetzner_installimage
vars:
hetzner_installimage_webservice_username: "{{ hetzner_robot_api_user}}"
hetzner_installimage_webservice_password: "{{ hetzner_robot_api_pass}}"
hetzner_installimage_server_name: "{{ inventory_hostname }}"
重要说明: 该角色必须在 gather_facts: no
的情况下执行,因为你要安装新操作系统的主机通常没有配置 SSH 访问,并且 gather_facts
会直接尝试访问主机。
在测试文件夹内的不同测试场景的 playbook 中查看更多示例。
该角色会要求用户确认将清除播放中所有主机的所有数据。可以通过使用将 hetzner_installimage_skip_confirmation
设置为 yes
的变量来覆盖该选项。
额外变量的示例可能如下所示:
--extra-vars "{ hetzner_installimage_skip_confirmation : yes }"
安装步骤
- 安装新机器
- 进入你的 Hetzner 机器人 (robot.your-server.de)
- 订购一个新服务器
- 选择你的操作系统
- 选择你的配置密钥
- 运行 hetzner_installimage 角色
- 安装现有机器
- 将你的配置密钥添加到 Hetzner 机器人,通过 robot.your-server.de
- 运行 hetzner_installimage 角色
- 安装已经配置好的机器
- 进入机器
- 删除 /etc/hetzner_installimage_provisioned.flag 或设置
- 运行 hetzner_installimage 角色
如果你确定不会意外清除已经在使用的运行中机器,可以直接运行该角色,并使用额外变量 hetzner_installimage_ignore_provisioned_flag
:
--extra-vars "{ hetzner_installimage_ignore_provisioned_flag: yes }"
这样,角色将不会检查机器是否存在 /etc/hetzner_installimage_provisioned.flag
文件,但仍然不会阻止机器被意外清除!
可用映像
操作系统映像位于救援系统内的 /root/.oldroot/nfs/images/
文件夹中。以下映像在 2020 年 3 月 25 日可用:
- Archlinux-2017-64-minimal.tar.gz
- archlinux-latest-64-minimal.tar.gz
- CentOS-76-64-minimal.tar.gz
- CentOS-77-64-minimal.tar.gz
- CentOS-80-64-minimal.tar.gz
- CentOS-81-64-minimal.tar.gz
- CoreOS-1298-64-production.bin.bz2
- Debian-103-buster-64-LAMP.tar.gz
- Debian-103-buster-64-minimal.tar.gz
- Debian-811-jessie-64-minimal.tar.gz
- Debian-911-stretch-64-minimal.tar.gz
- Debian-912-stretch-64-minimal.tar.gz
- Ubuntu-1604-xenial-64-minimal-no-hwe.tar.gz
- Ubuntu-1604-xenial-64-minimal.tar.gz
- Ubuntu-1804-bionic-64-minimal.tar.gz
- Ubuntu-1804-bionic-64-nextcloud.tar.gz
- Ubuntu-1910-eoan-64-minimal.tar.gz
旧映像位于救援系统中的 /root/.oldroot/nfs/images.old/
文件夹内。该角色会先检查当前图片文件夹中是否存在映像,然后检查旧图片文件夹中是否存在映像,并使用首次找到的地方的映像。这样即使某个操作系统的最新映像在某个时候被更新仍然可以在主机之间保持操作系统的一致性。
如果这些映像都不适合你,可以通过使用 hetzner_installimage_custom_image_url
变量来使用自定义映像。该映像将从指定 URL 下载,并在安装过程中使用。
维护者
许可证
请查看 LICENSE.md 文件以获取详细信息。
作者信息
此角色最初由 andrelohmann 创建或分叉。
Provision your hetzner boxes with installimage by leveraging the Hetzner Robot Webservice https://robot.your-server.de/doc/webservice/en.html
ansible-galaxy install nl2go.hetzner_installimage