Vorbereitungen
Ansible-Rolle anlegen “gitea”: (mkdir roles; cd roles; ansible-galaxy role init gitea)
Playbook anlegen, welches diese Rolle zieht
1
2
3
4
5
6
---
# file: giteaservers.yml
- hosts: giteaservers
serial: 1
roles:
- gitea
Inventory anlegen
1
2
3
4
5
6
7
8
---
# file: inventory.yml
all:
hosts:
children:
giteaservers:
hosts:
myohgserver.mydomain.com
Erster Versuch
Task zum Runterladen einrichten:
1
2
3
4
5
6
---
# tasks file for gitea - roles/gitea/tasks/main.yml
- name: Download gitea.xz
get_url:
url: https://github.com/go-gitea/gitea/releases/download/v1.11.4/gitea-1.11.4-linux-amd64.xz
dest: "/tmp/gitea-1.11.4-linux-amd64.xz"
Task ausführen: ansible-playbook -i inventory.yml giteaservers.yml
Beobachtung: Ausführung klappt nicht, runterladen scheitert!
1
2
3
4
5
6
7
8
9
$ ansible-playbook -i inventory.yml giteaservers.yml
...
TASK [gitea : Download gitea.xz] *************************************************************************
fatal: [myohgserver.mydo...]: FAILED! => {"changed": false, "dest": "/tmp/gitea-1.11.4-linux-amd64.xz",
"elapsed": 0, "msg": "Request failed: <urlopen error [Errno -2] Name or service not known>",
"url": "https://github.com/go-gitea/gitea/releases/download/v1.11.4/gitea-1.11.4-linux-amd64.xz"}
PLAY RECAP ***********************************************************************************************
myohgserver.mydo...: ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Problem: Der Download wird von meinem Server angestossen, nicht von meinem lokalen Rechner!
Lokaler Download
Task zum Runterladen anpassen:
1
2
3
4
5
6
7
8
9
---
# tasks file for gitea - roles/gitea/tasks/main.yml
- name: Download gitea.xz
get_url:
url: https://github.com/go-gitea/gitea/releases/download/v1.11.4/gitea-1.11.4-linux-amd64.xz
dest: "/tmp/gitea-1.11.4-linux-amd.xz"
delegate_to: localhost
vars:
ansible_become: no
Task ausführen: ansible-playbook -i inventory.yml giteaservers.yml
Beobachtung: Ausführung klappt!
1
2
3
4
5
6
7
$ ansible-playbook -i inventory.yml giteaservers.yml
...
TASK [gitea : Download gitea.xz] *************************************************************************
changed: [myohgserver.mydomain.com -> localhost]
PLAY RECAP ***********************************************************************************************
myohgserver.mydo...: ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Task erneut ausführen: ansible-playbook -i inventory.yml giteaservers.yml
1
2
3
4
5
6
7
$ ansible-playbook -i inventory.yml giteaservers.yml
...
TASK [gitea : Download gitea.xz] *************************************************************************
ok: [myohgserver.mydomain.com -> localhost]
PLAY RECAP ***********************************************************************************************
myohgserver.mydo...: ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Beobachtung: Datei wird nicht erneut heruntergeladen – super!
Download und Upload
Task erweitern um Upload auf den Server:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
# tasks file for gitea - roles/gitea/tasks/main.yml
- name: Download gitea.xz
get_url:
url: https://github.com/go-gitea/gitea/releases/download/v1.11.4/gitea-1.11.4-linux-amd64.xz
dest: "/tmp/gitea-1.11.4-linux-amd.xz"
delegate_to: localhost
vars:
ansible_become: no
- name: Copy gitea.xz to
copy:
src: "/tmp/gitea-1.11.4-linux-amd.xz"
dest: /tmp/.
mode: go-w
Tasks ausführen: ansible-playbook -i inventory.yml giteaservers.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ansible-playbook -i inventory.yml giteaservers.yml
PLAY [giteaservers] **************************************************************************************
TASK [Gathering Facts] ***********************************************************************************
ok: [myohgserver.mydomain.com]
TASK [gitea : Download gitea.xz] *************************************************************************
ok: [myohgserver.mydomain.com -> localhost]
TASK [gitea : Copy gitea.xz to myohgserver.mydomain.com] *************************************************
changed: [myohgserver.mydomain.com]
PLAY RECAP ***********************************************************************************************
myohgserver.mydo...: ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Erneute Ausführung: Kein Herunterladen, kein Hochladen!
Download/Upload nur wenn noch nicht vorhanden
Der bisher erreichte Stand funktioniert im Wesentlichen.
Wenn ich das Playbook aber auf mehreren verschiedenen Rechnern ausführe,
dann wird GITEA jedesmal wieder heruntergeladen.
Wir wollen diese Änderung:
Prüfen, ob GITEA bereits auf dem Server vorhanden ist
Nur wenn noch nicht vorhanden: GITEA herunterladen und hochladen
Wir erreichen dies durch Erweitern der Tasks:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--- a/roles/gitea/tasks/main.yml
+++ b/roles/gitea/tasks/main.yml
@@ -1,5 +1,12 @@
---
# tasks file for gitea - roles/gitea/tasks/main.yml
+- name: Check for gitea.xz on
+ command:
+ argv:
+ - "echo"
+ - "/tmp/gitea-1.11.4-linux-amd.xz"
+ creates: "/tmp/gitea-1.11.4-linux-amd.xz"
+ register: gitea_check_for_giteaxz
- name: Download gitea.xz
get_url:
url: https://github.com/go-gitea/gitea/releases/download/v1.11.4/gitea-1.11.4-linux-amd64.xz
@@ -7,8 +14,10 @@
delegate_to: localhost
vars:
ansible_become: no
+ when: gitea_check_for_giteaxz.changed
- name: Copy gitea.xz to
copy:
src: "/tmp/gitea-1.11.4-linux-amd.xz"
dest: /tmp/.
mode: go-w
+ when: gitea_check_for_giteaxz.changed
Weitere Verbesserungen
Für einen produktiven Einsatz sind u.a. noch diese Verbesserungen notwendig:
Prüfen der Signaturen des Downloads
Einsatz von Variablen
Probleme
myohgserver.mydomain.com: UNREACHABLE!
Beim Ausführen des Playbooks erscheint eine Fehlermeldung:
1
2
3
4
5
6
7
8
9
10
11
$ ansible-playbook -i inventory.yml giteaservers.yml
PLAY [giteaservers] **************************************************************************************
TASK [Gathering Facts] ***********************************************************************************
fatal: [myohgserver.mydomain.com]: UNREACHABLE! => {"changed": false, "msg":
"Failed to connect to the host via ssh:
ssh: Could not resolve hostname myohgserver.mydomain.com: Name or service not known",
"unreachable": true}
PLAY RECAP ***********************************************************************************************
myohgserver.mydo...: ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
Abhilfe: Inventory anpassen!
Änderungen
2020-05-06: Erste Version