Für die Hetzner-Cloud gibt es ein Kommandozeilentool, noch schöner finde ich die Steuerung aber über Ansible!
Voraussetzung:
pip3 install hcloud
)getestet mit ansible 2.10.0.dev0 mit python3.7 und hcloud 1.6.3 (2020-01)
Entspannt ausprobieren, ob das mit dem Token usw. auch so funktioniert. Der Servername wird hier als Variable "cloudserver" auf der Kommandozeile übergeben
--- # list_hcloud_server.yml # hcloud list a server - name: list hcloud server | test hosts: localhost connection: local gather_facts: false user: root vars_files: - vars/hcloud_token.yml tasks: - name: list server hcloud_server_info: api_token: "{{ hcloud_token }}" name: "{{ cloudserver }}"
API Token NIE im git einchecken!
Deshalb: Verschlüsselt einchecken, z.B. mit git-secret.io
Alternativ: Ansible Vault verwenden.2)
Notfalls: Ausserhalb des git-Baums (auf einer verschlüsselten Festplatte) ablegen und bei Bedarf einfach einen Symlink an die richtige Stelle machen.
--- # var/hcloud_token.yml # hetzner cloud (hcloud) api token for project test hcloud_token: "PleaseMoveYourRealApiTokenOutOfYourGitPathAndSymlink1234567890ab"
ansible-playbook -v list_hcloud_server.yml --extra-vars "cloudserver=myserver"
Using /home/youruser/.ansible.cfg as config file PLAY [list hcloud server | test] ************************************************ TASK [list server] ************************************************************** ok: [localhost] => {"changed": false, "hcloud_server_info": [{"backup_window": "02-06", "datacenter": "nbg1-dc1", "delete_protection": true, "id": "1493124", "image": "ubuntu-18.04", "ipv4_address": "203.0.113.16", "ipv6": "2001:db8:1234:5678::/64", "labels": {}, "location": "nbg1", "name": "myserver", "rebuild_protection": true, "rescue_enabled": false, "server_type": "cx11", "status": "running"}]} PLAY RECAP ********************************************************************** localhost: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
--- - name: create hcloud server with attached disk volume hosts: localhost connection: local gather_facts: false user: root vars_files: - vars/hcloud_token.yml - "../../../host_vars/{{ cloudserver }}.yml" # there the host var file lives tasks: - name: list server hcloud_server_info: api_token: "{{ hcloud_token }}" name: "{{ cloudserver }}" - name: create server hcloud_server: api_token: "{{ hcloud_token }}" name: "{{ hostname }}" server_type: "{{ h_server_type }}" image: "{{ h_server_image }}" location: "{{ h_server_location }}" ssh_keys: "{{ h_server_ssh_keys }}" state: present register: server - name: attach disk volume hcloud_volume: api_token: "{{ hcloud_token }}" name: "{{ h_volume_name }}" size: "{{ h_volume_size }}" format: "{{ h_volume_format }}" server: "{{ server.hcloud_server.name }}" automount: no # does not mount to the correct place state: present when: h_volume_size is defined - name: list server hcloud_server_info: api_token: "{{ hcloud_token }}" name: "{{ cloudserver }}" - name: print status debug: msg: - "finished creating {{ server.hcloud_server.name }}" - "id: {{ server.hcloud_server.id }}" - "type: {{ server.hcloud_server.server_type }}" - "status: {{ server.hcloud_server.status }}" - "datacenter: {{ server.hcloud_server.datacenter }}" - "{{ cloudserver }} IN A {{ server.hcloud_server.ipv4_address}}" - "{{ cloudserver }} IN AAAA {{ server.hcloud_server.ipv6 }}"
../../../host_vars/testserver.yml
--- hostname: "testserver" # hcloud - Hetzner Cloud h_server_location: "nbg1" h_server_type: "cx11" h_server_image: "ubuntu-18.04" h_server_ssh_keys: - anna_beispiel_salbei_19_pub - peter_example_thymian_20_pub h_volume_name: "testserver-data" h_volume_size: 10 #in GB h_volume_format: "ext4"
$ ansible-playbook create_hcloud_server.yml --extra-vars "cloudserver=testserver"
PLAY [create hcloud server with attached disk volume] ************************ TASK [list server] ************************************************************ ok: [localhost] TASK [create server] ********************************************************** changed: [localhost] TASK [attach disk volume] ***************************************************** changed: [localhost] TASK [list server] ************************************************************ ok: [localhost] TASK [print status] ********************************************************** ok: [localhost] => { "msg": [ "finished creating testserver", "id: 7654321", "type: cx11", "status: running", "datacenter: nbg1-dc3", "testserver IN A 203.0.113.49", "testserver IN AAAA 2001:db8:5678:9abc::/64 " ] } PLAY RECAP ******************************************************************** localhost : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.21@unixwitch.de
weitere Tools / Spickzettel