Ansible-Probleme (Layer-8-Problem möglich)

Moin,

ich pack’s mal in’s »große« Forum, nachdem ja auch andere Communities mit Ansible, und auch speziell mit den Münsteraner Rollen, arbeiten.

Problem:

root@aux01:~/test-ansible-ffms.git# ansible-playbook -vv -i hosts gateways.yml -l fastd-gut01
[…]
TASK [backbone_gre_intern : Tunnels between backbones] *****************************************************************
task path: /root/test-ansible-ffms.git/roles/backbone_gre_intern/tasks/main.yml:2
fatal: [fastd-gut01]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'vm_id'"}
        to retry, use: --limit @/root/test-ansible-ffms.git/gateways.retry

PLAY RECAP *************************************************************************************************************
fastd-gut01                : ok=51   changed=0    unreachable=0    failed=1   

Das hat aber schon mal getan:

root@fastd-gut01 ~ # ls -la /etc/network/interfaces.d/42_gre_interbackbone.cfg 
-rw-r--r-- 1 root root 2.4K Nov 17 15:13 /etc/network/interfaces.d/42_gre_interbackbone.cfg
root@aux01:~/test-ansible-ffms.git# ls -la /root/test-ansible-ffms.git/roles/backbone_gre_intern/tasks/main.yml /root/tst-ansible-ffms.git/roles/backbone_gre_intern/templates/gre_interbackbone.j2
-rw-r--r-- 1 root root  566 Nov 15 00:47 /root/test-ansible-ffms.git/roles/backbone_gre_intern/tasks/main.yml
-rw-r--r-- 1 root root 1101 Nov 15 01:29 /root/test-ansible-ffms.git/roles/backbone_gre_intern/templates/gre_interbackbne.j2

Ich verstehe zwar schon nicht, wo da vm_id herkommt, aber es hat ja mal geklappt — warum aber jetzt nicht mehr?

Falls jemand 'ne Idee zum Debugging hat – ich bin Ansible-Noob –, oder gar eine Lösung – ich vermute ja, das ist ein Folgefehler, aber den eigentlichen zeigt Ansible mir nicht –, bitte her damit :wink:

Nachtrag: lt. Debugger existiert die Variable (oder‽):

[fastd-gut01] TASK: backbone_gre_intern : Tunnels between backbones (debug)> p task_vars
[…]
          u'v6dns': {u'changed': False,
                     u'cmd': u"grep '^nameserver' /etc/resolv.conf|sed -e 's/.*nameserver *//' -e 's/#.*//'|grep ':' || true",
                     u'delta': u'0:00:00.009409',
                     u'end': u'2020-01-12 23:19:47.184592',
                     'failed': False,
                     u'rc': 0,
                     u'start': u'2020-01-12 23:19:47.175183',
                     u'stderr': u'',
                     'stderr_lines': [],
                     u'stdout': u'',
                     'stdout_lines': []},
          u'vm_id': 7},
 u'vm_id': 7}

Was ist das für ein schlechter Film‽

Ohne die Konfiguration dazu zu kennen wird das schwer dir darauf zu antworten.

Wie sehen denn host_vars/$HOSTNAME und hosts aus? Was steht in den group_vars/all und group_vars/gateways ?

gibt es irgendwo ein Git mit der Konfig?

Edith:
Bei uns wird die vm_id für gewöhnlich in der host_vars/$HOSTNAME gesetzt.

Muß ich noch zusammenbasteln später am Abend.

host_vars/fastd-gut01:

vm_id: 7
server_id: 7

server_besitzer: "Verein 4830.org"
hoster: "4830.org"

ospf_nat_ip: 192.251.226.170/32
#ospf_nat_instanceid: 10
#ospf_nat_area: 10

dhcp_type: "isc-dhcp"

domaenenliste:
   "99":
      dhcp_start: 10.255.136.16
      dhcp_ende: 10.255.143.254
      server_id: 7
      vm_id: 7
      fastd: true

batman:
  downstream: 1024Mbit
  upstream: 1024Mbit
  version: "2013.4.0"

fastd:
  mtu: 1426
  port_base: 10000

hosts:

[mapserver]
mskarte      ipv4=193.26.120.236 ipv6=2a06:e881:1707:1:400:c1ff:fe1a:78ec  ansible_ssh_host="{{ipv4}}"  ansible_ssh_port=22
newmap       ipv4=193.26.120.122 ipv6=2a06:e881:1702:1:400:c1ff:fe1a:787a  ansible_ssh_host="{{ipv4}}"  ansible_ssh_port=22
oldmap       ipv4=193.26.120.231 ipv6=2a06:e881:1707:1:400:c1ff:fe1a:78e7  ansible_ssh_host="{{ipv4}}"  ansible_ssh_port=22

[statistics]
newstats       ipv4=193.26.120.249  ipv6=2a06:e881:1708:42:400:c1ff:fe1a:78f9  ansible_ssh_host="{{ipv4}}"  ansible_ssh_port=22

[gateways]
fastd-gut01   ipv4=192.251.226.101    ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
fastd-ham02   ipv4=193.26.120.116     ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
fastd-fra01   ipv4=193.26.120.235     ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
l2tp-ham02    ipv4=193.26.120.245     ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
l2tp-fra01    ipv4=193.26.120.227     ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
l2tp-ham01    ipv4=193.26.120.125     ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
l2tp-ams01    ipv4=193.26.120.67      ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
l2tp-ber01    ipv4=193.26.120.99      ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root
l2tp-gut01    ipv4=192.251.226.30     ansible_ssh_host="{{ipv4}}" ansible_ssh_port=22  ansible_ssh_user=root

[monitoring]
icinga        ipv4=193.26.120.232    ipv6=2a06:e881:1707:1:400:c1ff:fe1a:78e8  ansible_ssh_host="{{ipv4}}"  ansible_ssh_port=22

[monitoringsatellites]
#remue
#satellite-01		ansible_ssh_host=234.234.234.234	ansible_ssh_port=22

[vipnodes]
#vip-node-dummy-01	ansible_ssh_host=123.123.123.123	ansible_ssh_port=22

Das initiale Problem kann ich nicht mehr nachstellen, aber auch die aktualisierten Sourcen tun nimmer:

Jan 15 03:21:37 l2tp-ham01 systemd[1]: tunneldigger@00.service: Main process exited, code=exited, status=1/FAILURE
Jan 15 03:21:37 l2tp-ham01 systemd[1]: tunneldigger@00.service: Failed with result 'exit-code'.
Jan 15 03:21:37 l2tp-ham01 systemd[1]: tunneldigger@00.service: Service hold-off time over, scheduling restart.
Jan 15 03:21:37 l2tp-ham01 systemd[1]: tunneldigger@00.service: Scheduled restart job, restart counter is at 4.
Jan 15 03:21:37 l2tp-ham01 systemd[1]: Stopped tunneldigger tunnelling network daemon using l2tpv3 for domain 00.
Jan 15 03:21:37 l2tp-ham01 systemd[1]: Started tunneldigger tunnelling network daemon using l2tpv3 for domain 00.
Jan 15 03:21:37 l2tp-ham01 python[25418]: Traceback (most recent call last):
Jan 15 03:21:37 l2tp-ham01 python[25418]:   File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
Jan 15 03:21:37 l2tp-ham01 python[25418]:     "__main__", fname, loader, pkg_name)
Jan 15 03:21:37 l2tp-ham01 python[25418]:   File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
Jan 15 03:21:37 l2tp-ham01 python[25418]:     exec code in run_globals
Jan 15 03:21:37 l2tp-ham01 python[25418]:   File "/srv/tunneldigger/env_tunneldigger/lib/python2.7/site-packages/tunneldigger_broker-0.3.0-py2.7-linux-x86_64.egg/tunneldigger_broker/main.py", line 1, in <module>
Jan 15 03:21:37 l2tp-ham01 python[25418]:     import configparser
Jan 15 03:21:37 l2tp-ham01 python[25418]: ImportError: No module named configparser
Jan 15 03:21:37 l2tp-ham01 systemd[1]: tunneldigger@00.service: Main process exited, code=exited, status=1/FAILURE
Jan 15 03:21:37 l2tp-ham01 systemd[1]: tunneldigger@00.service: Failed with result 'exit-code'.

Das Deployment fand auf frischen Ubuntu-18.04-VMs statt:

PLAY RECAP *************************************************************************************************************
l2tp-ber01                 : ok=182  changed=143  unreachable=0    failed=0   
l2tp-fra01                 : ok=182  changed=143  unreachable=0    failed=0   
l2tp-gut01                 : ok=182  changed=143  unreachable=0    failed=0   
l2tp-gut02                 : ok=182  changed=143  unreachable=0    failed=0   
l2tp-ham01                 : ok=182  changed=143  unreachable=0    failed=0   
l2tp-ham02                 : ok=183  changed=143  unreachable=0    failed=0

… und die Knoten sind nun offline:

Wed Jan 15 03:26:04 2020 daemon.info td-client: Performing broker selection...
Wed Jan 15 03:26:15 2020 daemon.err td-client: No suitable brokers found. Retrying in 5 seconds
Wed Jan 15 03:26:21 2020 daemon.info td-client: Performing broker selection...
Wed Jan 15 03:26:32 2020 daemon.err td-client: No suitable brokers found. Retrying in 5 seconds

Laufen denn die Tunnerligger Prozesse auf den Servern?

Hast du das ganze mal mit einem --diff laufen lassen und geguckt was er da überhaupt macht?

Was konkret meinst Du? Ansible läuft sauber durch jetzt, aber der Tunneldigger kotzt ins Essen, tut wohl nicht mehr mit Python2 (.7); wenn man ihn mit „import configparser as ConfigParser“ über jene Klippe bringt, crasht es später. Wie gesagt, frisch auf neuen 18.04-VMs deployed.

Nope, das ist ja das (aktuelle) Problem.

Wichtig ist das du die Rolle gateways_l2tp_slovenija und nicht gateways_l2tp ausrollst.

Du kannst auch z.B. mal /srv/tunneldigger verschieben oder löschen. Dann müsste die rolle den Tunneldigger nochmal komplett ausrollen. Lass ansible dann am besten mit --diff laufen damit man sieht was passiert.

Sehe grade der TD hat den Support für Python2 eingestellt. \o/

https://github.com/wlanslovenija/tunneldigger/commit/c50ef46d78d797750979ebf2f8ddc5aa993a02ae#diff-d9ae695c8119e58c2ec435b6deae2d53R5

also müssen wir erst die Rolle anpassen oder du nimmst einen älteren Commit.

2 „Gefällt mir“

Danke, good find, das wird’s sein. Probiere es mal mit

      version: f5bb0efb19468e8dfd0726b40c1431f5c526b3b7

im main.yml.

1 „Gefällt mir“

Hab’s bei uns schon auf die Tagesordnung gesetzt. Vlt findet sich ja heute Abend schon jemand der die Rolle updatet…

Bis dahin tut’s vielleicht mit Use last TD commit that supports Python2 ... · wusel42/Test-Ansible-Freifunk-Gateway@13d1e7f · GitHub — Deploy läuft.

Edit: Danke, das war’s tatsächlich:

root@l2tp-ham01 ~ # systemctl status tunneldigger@01
● tunneldigger@01.service - tunneldigger tunnelling network daemon using l2tpv3 for domain 01
   Loaded: loaded (/etc/systemd/system/tunneldigger@.service; indirect; vendor preset: enabled)
   Active: active (running) since Wed 2020-01-15 12:36:04 CET; 3s ago
 Main PID: 6433 (python)
    Tasks: 1 (limit: 1108)
   CGroup: /system.slice/system-tunneldigger.slice/tunneldigger@01.service
           └─6433 /srv/tunneldigger/env_tunneldigger/bin/python -m tunneldigger_broker.main /srv/tunneldigger/broker/l2tp_b

Jan 15 12:36:04 l2tp-ham01 systemd[1]: Started tunneldigger tunnelling network daemon using l2tpv3 for domain 01.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Initializing the tunneldigger broker.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Registered script '/srv/tunneldigger/broker/scripts/add
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Registered script '/srv/tunneldigger/broker/scripts/del
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Maximum number of tunnels is 1023.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Tunnel identifier base is 2048.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Tunnel port base is 20000.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Namespace is domaene_01.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Listening on 193.26.120.125:10001.
Jan 15 12:36:04 l2tp-ham01 python[6433]: [INFO/tunneldigger.broker] Broker initialized.
1 „Gefällt mir“

Sorry :grimacing:

1 „Gefällt mir“

Das \o/ galt meiner Freude darüber und war nicht ironisch gemeint :wink:

Danke fürs updaten!

2 „Gefällt mir“

Ah okay. Danke :relaxed:
Dann warne ich schon mal vor.
In den Pull requests sind noch zwei weitere dicke Dinger.
Beides sollten non-breaking changes sein, aber das entfernen des NAT Konstruktes könnte vermutlich etwas Verschlankung der Ansible Rollen ermöglichen.

1 „Gefällt mir“

Ist doch gut, Python 2 ist EOL.

Falls jemand ein ähnliches Problem hat so wie ich gerade mit Puppet und der Neuinstallation von einem Gateway:

  • apt-get install python3-dev (wird ab python3 benötigt auf dem System)

  • virtualenv -p /usr/bin/python3 env_tunneldigger (laut Doku, auch bei der legacy Version)

  • git clone git://github.com/wlanslovenija/tunneldigger.git -b legacy (die Version ohne NAT)

Erst hing ich kurz an python2, bis ich diesen Beitrag hier gefunden habe. Dann hing es an dem python3-dev Paket. Jetzt geht alles wieder automatisch, danke :slight_smile:

Gruß, Jan

3 „Gefällt mir“

Der legacy branch ist derjenige, der noch den NAT hack enthält und daher auch auf älteren Kerneln noch funktioniert.
Python 2 wurde, wie du schon richtig erwähntest, sowohl bei dem legacy als auch dem aktuellen master Branch entfernt.

4 „Gefällt mir“

Vermutlich auch ein Layer8-Problem hier:
Aber was tut ein Tunneldigger-broker, der sich nicht an seinen Listen-Port attachen kann?
Weiterlaufen!

P.S: systemd-[service] bei ubuntu möchte jetzt „user=root“ sehen, wiki ist mal wieder veraltet…
https://wiki.ubuntuusers.de/systemd/Service_Units/

"User legt fest, unter welchem Benutzer der Service laufen soll (Standard: root) "