Update playbooks/alpine/install-zerotier.yml

This commit is contained in:
diablo committed 2026-10-10 00:35:09 +08:00
1 parent 3af08ca647
commit de2185b4e5
1 file changed
+91 -37
+91 -37
View File
@@ -1,58 +1,112 @@
--- ---
- name: Install ZeroTier on Alpine hosts using Docker - name: Install ZeroTier binary on Alpine
hosts: alpine hosts: alpine
become: true become: true
gather_facts: true gather_facts: true
tasks: vars:
- name: Verify Alpine Linux zerotier_version: "1.16.2"
ansible.builtin.assert: zerotier_dir: /var/lib/zerotier-one
that: zerotier_binary_url: "https://download.zerotier.com/RELEASES/1.4.2/dist/static-binaries/zerotier-one.x86_64.gz"
- ansible_facts["distribution"] == "Alpine"
- ansible_facts["architecture"] == "x86_64"
- name: Ensure persistent ZeroTier directory exists tasks:
- name: Install required packages
community.general.apk:
name:
- ca-certificates
- curl
- gzip
- iproute2
state: present
update_cache: true
- name: Create ZeroTier directories
ansible.builtin.file: ansible.builtin.file:
path: /opt/zerotier-one path: "{{ item }}"
state: directory state: directory
owner: root owner: root
group: root group: root
mode: "0700" mode: "0755"
loop:
- /usr/local/bin
- "{{ zerotier_dir }}"
- name: Ensure TUN device exists - name: Download ZeroTier static binary
ansible.builtin.get_url:
url: "{{ zerotier_binary_url }}"
dest: /tmp/zerotier-one.gz
mode: "0644"
force: true
- name: Extract ZeroTier binary
ansible.builtin.command:
cmd: gzip -dc /tmp/zerotier-one.gz
register: zerotier_binary
changed_when: true
no_log: true
- name: Install ZeroTier binary
ansible.builtin.copy:
content: "{{ zerotier_binary.stdout }}"
dest: /usr/local/bin/zerotier-one
owner: root
group: root
mode: "0755"
no_log: true
- name: Create ZeroTier CLI symlink
ansible.builtin.file:
src: /usr/local/bin/zerotier-one
dest: /usr/local/bin/zerotier-cli
state: link
- name: Create OpenRC service
ansible.builtin.copy:
dest: /etc/init.d/zerotier-one
owner: root
group: root
mode: "0755"
content: |
#!/sbin/openrc-run
name="ZeroTier One"
command="/usr/local/bin/zerotier-one"
command_args="-d"
command_background="yes"
pidfile="/run/zerotier-one.pid"
directory="{{ zerotier_dir }}"
output_log="/var/log/zerotier-one.log"
error_log="/var/log/zerotier-one.log"
- name: Check TUN device
ansible.builtin.stat: ansible.builtin.stat:
path: /dev/net/tun path: /dev/net/tun
register: zerotier_tun register: zerotier_tun
- name: Fail if TUN device is unavailable - name: Stop if TUN device is missing
ansible.builtin.fail: ansible.builtin.fail:
msg: "Enable /dev/net/tun on this host or its Proxmox LXC configuration first." msg: "ZeroTier binary is installed, but /dev/net/tun is missing. Enable TUN access in the Proxmox LXC configuration before starting the service."
when: not zerotier_tun.stat.exists when: not zerotier_tun.stat.exists
- name: Install Python dependencies for Docker modules - name: Enable ZeroTier at boot
community.general.apk: ansible.builtin.command:
name: cmd: rc-update add zerotier-one default
- py3-requests register: zerotier_rc_update
state: present changed_when: zerotier_rc_update.rc == 0
update_cache: true failed_when: false
- name: Pull ZeroTier container image - name: Start ZeroTier
community.docker.docker_image: ansible.builtin.command:
name: zyclonite/zerotier:1.14.2 cmd: rc-service zerotier-one restart
source: pull register: zerotier_start
changed_when: zerotier_start.rc == 0
- name: Run ZeroTier container - name: Verify ZeroTier binary
community.docker.docker_container: ansible.builtin.command:
name: zerotier cmd: /usr/local/bin/zerotier-one -v
image: zyclonite/zerotier:1.14.2 register: zerotier_version_check
state: started changed_when: false
restart_policy: unless-stopped
network_mode: host
capabilities:
- NET_ADMIN
- SYS_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- /opt/zerotier-one:/var/lib/zerotier-one
- name: Display installed version
ansible.builtin.debug:
var: zerotier_version_check.stdout