Skip to content
This repository was archived by the owner on Oct 7, 2025. It is now read-only.

Commit 4091736

Browse files
authored
r70797 nodhcp module in system role for hetzner cloud systems (#2036)
* r70797 nodhcp module in system role for hetzner cloud systems * fix syntax * r70797 set pipefail to resolve linting failure
1 parent f4a2eb1 commit 4091736

File tree

7 files changed

+148
-2
lines changed

7 files changed

+148
-2
lines changed

roles/aws/aws_backup_validation/tasks/testing_resources.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
amazon.aws.ec2_vpc_subnet_info:
2727
region: "{{ _aws_region }}"
2828
filters:
29-
vpc-id: "{{ _main_vpc_info.vpcs[0].vpc_id}}"
29+
vpc-id: "{{ _main_vpc_info.vpcs[0].vpc_id }}"
3030
register: _main_subnets_info
3131

3232
- name: Create SG for restored instances.

roles/debian/system/README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# System
22
This role provides a means of applying system variables to servers.
3+
Currently, the following entities can be managed with the role:
4+
5+
- Force IPv4 (noipv6)
6+
- Force Static IP configuration for Hetzner Cloud systems (nohetznerdhcp)
7+
38
<!--TOC-->
49
<!--ENDTOC-->
510

@@ -9,8 +14,9 @@ This role provides a means of applying system variables to servers.
914
---
1015
system:
1116
noipv6: false
17+
nohetznerchdp: false
1218

1319
```
1420

1521
<!--ENDROLEVARS-->
16-
~~~
22+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
---
22
system:
33
noipv6: false
4+
nohetznerdhcp: false

roles/debian/system/tasks/main.yml

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,124 @@
1010
name: net.ipv6.conf.all.disable_ipv6
1111
value: "1"
1212
when: system.noipv6
13+
14+
- name: Install dmidecode.
15+
ansible.builtin.apt:
16+
pkg: dmidecode
17+
state: present
18+
when:
19+
- system.nohetznerdhcp
20+
21+
- name: Check if the system is a Hetzner Cloud server.
22+
ansible.builtin.shell: |
23+
set -o pipefail
24+
dmidecode | awk '/System Information/{getline;print;getline;print}' | sed 's/[^,:]*://g' | sed 's/^ //g' | tr '\n' ' ' | grep -q "Hetzner vServer"
25+
args:
26+
executable: /bin/bash
27+
register: hetznercloudcheck
28+
failed_when: false
29+
when:
30+
- system.nohetznerdhcp
31+
32+
- name: Print if Hetzner Cloud server is detected.
33+
debug:
34+
msg: "This is a Hetzner Cloud server"
35+
when: hetznercloudcheck.rc == 0
36+
37+
- name: Install dhcpcd.
38+
ansible.builtin.apt:
39+
pkg: dhcpcd5
40+
state: present
41+
when:
42+
- system.nohetznerdhcp
43+
- hetznercloudcheck.rc == 0
44+
45+
- name: Get default NIC.
46+
ansible.builtin.shell: |
47+
set -o pipefail
48+
ifacecol=$(route | awk -v b="Iface" '{for (i=1;i<=NF;i++) { if ($i == b) { print i } }}')
49+
route | awk -v ifacecol="$ifacecol" '$1 == "default" {print $ifacecol}'
50+
register: dhcpdefaultnic
51+
when:
52+
- system.nohetznerdhcp
53+
- hetznercloudcheck.rc == 0
54+
55+
- name: Get IP from DHCP server.
56+
ansible.builtin.shell: |
57+
set -o pipefail
58+
dhcpcd -T {{ dhcpdefaultnic.stdout }} 2>&1 | grep -oP 'new_ip_address=\K\S+' | sed "s/'//g"
59+
register: dhcpipaddressoffer
60+
when:
61+
- system.nohetznerdhcp
62+
- hetznercloudcheck.rc == 0
63+
64+
- name: Get Netmask from DHCP server.
65+
ansible.builtin.shell: |
66+
set -o pipefail
67+
dhcpcd -T {{ dhcpdefaultnic.stdout }} 2>&1 | grep -oP 'new_subnet_mask=\K\S+' | sed "s/'//g"
68+
register: dhcpnetmaskoffer
69+
when:
70+
- system.nohetznerdhcp
71+
- hetznercloudcheck.rc == 0
72+
73+
- name: Get GATEWAY from DHCP server.
74+
ansible.builtin.shell: |
75+
set -o pipefail
76+
dhcpcd -T {{ dhcpdefaultnic.stdout }} 2>&1 | grep -oP 'new_routers=\K\S+' | sed "s/'//g"
77+
register: dhcpgatewayoffer
78+
when:
79+
- system.nohetznerdhcp
80+
- hetznercloudcheck.rc == 0
81+
82+
- name: Get DNS servers from DHCP server.
83+
ansible.builtin.shell: |
84+
set -o pipefail
85+
dhcpcd -T {{ dhcpdefaultnic.stdout }} 2>&1 | grep -P 'new_domain_name_servers=\K\S+' | sed "s/new_domain_name_servers=//g" | sed "s/'//g"
86+
register: dhcpnameserversoffer
87+
when:
88+
- system.nohetznerdhcp
89+
- hetznercloudcheck.rc == 0
90+
91+
- name: Copy No-DHCP Network Interfaces config.
92+
ansible.builtin.template:
93+
src: "interfaces-nohetznerdhcp.j2"
94+
dest: "/etc/network/interfaces"
95+
owner: root
96+
group: root
97+
mode: 0644
98+
force: true
99+
when:
100+
- system.nohetznerdhcp
101+
- hetznercloudcheck.rc == 0
102+
103+
- name: Delete Cloud Init script.
104+
ansible.builtin.file:
105+
path: /etc/network/interfaces.d/50-cloud-init
106+
state: absent
107+
when:
108+
- system.nohetznerdhcp
109+
- hetznercloudcheck.rc == 0
110+
111+
- name: Copy No-DHCP Network Interfaces include config.
112+
ansible.builtin.template:
113+
src: "50-static-init.j2"
114+
dest: "/etc/network/interfaces.d/50-static-init"
115+
owner: root
116+
group: root
117+
mode: 0644
118+
force: true
119+
when:
120+
- system.nohetznerdhcp
121+
- hetznercloudcheck.rc == 0
122+
123+
- name: Copy disable cloud init config.
124+
ansible.builtin.template:
125+
src: "99-disable-network-config.cfg.j2"
126+
dest: "/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg"
127+
owner: root
128+
group: root
129+
mode: 0644
130+
force: true
131+
when:
132+
- system.nohetznerdhcp
133+
- hetznercloudcheck.rc == 0
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
auto {{ system.dhcpdefaultnic.stdout }}
2+
iface {{ system.dhcpdefaultnic.stdout }} inet static
3+
address {{ system.dhcpipaddressoffer.stdout }}
4+
netmask {{ system.dhcpnetmaskoffer.stdout }}
5+
gateway {{ system.dhcpgatewayoffer.stdout }}
6+
pointopoint {{ system.dhcpgatewayoffer.stdout }}
7+
dns-nameservers {{ system.dhcpnameserversoffer.stdout }}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
network:
2+
config: disabled
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# This file describes the network interfaces available on your system
2+
# and how to activate them. For more information, see interfaces(5)
3+
4+
# Include files from /etc/network/interfaces.d:
5+
source /etc/network/interfaces.d/*
6+
7+
# The loopback network interface
8+
auto lo
9+
iface lo inet loopback

0 commit comments

Comments
 (0)