Saltstack & Python 3: 'dict object' has no attribute

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Topicstarter
Ik draai momenteel Salt 3002.6 (Debian 11 stable) en Debian 11 is ook de eerste Debian-versie die exclusief op Python 3 draait vzw. Ik heb een pillar die de beschikbare grains van de minions aanroept om het LAN IP op te vragen, en dat werkte de laatste keer goed (ik draai niet elke week Salt states :P). Alleen breekt het nu:

nov 04 22:38:25 salt-master[8329]:   File "/usr/lib/python3/dist-packages/salt/template.py", line 101, in compile_template
nov 04 22:38:25 salt-master[8329]:     ret = render(input_data, saltenv, sls, **render_kwargs)
nov 04 22:38:25 salt-master[8329]:   File "/usr/lib/python3/dist-packages/salt/renderers/jinja.py", line 66, in render
nov 04 22:38:25 salt-master[8329]:     tmp_data = salt.utils.templates.JINJA(
nov 04 22:38:25 salt-master[8329]:   File "/usr/lib/python3/dist-packages/salt/utils/templates.py", line 261, in render_tmpl
nov 04 22:38:25 salt-master[8329]:     output = render_str(tmplstr, context, tmplpath)
nov 04 22:38:25 salt-master[8329]:   File "/usr/lib/python3/dist-packages/salt/utils/templates.py", line 508, in render_jinja_tmpl
nov 04 22:38:25 salt-master[8329]:     raise SaltRenderError("Jinja variable {}{}".format(exc, out), buf=tmplstr)
nov 04 22:38:25 salt-master[8329]: salt.exceptions.SaltRenderError: Jinja variable 'dict object' has no attribute 'eth0'
nov 04 22:38:25 salt-master[8329]: [CRITICAL] Pillar render error: Rendering SLS 'mysql.kodi' failed. Please see master log for details.


Het werkte dus goed tot een tijdje terug - en alle gegevens zouden er ook gewoon moeten zijn :?

Pillar code:
code:
1
2
3
4
5
6
7
8
9
10
11
include:
  - mysql

kodi:
  server:
    bind-address: {{ grains['ip4_interfaces']['eth0'] }}

  mysqld:
    kodi_user: aaa
    kodi_pass: bbbb
    connection_charset: utf8


Als ik de pillar items als JSON opvraag komen deze wél te voorschijn? Er staan wel vierkante haakjes rond, dus ik weet niet of dat deel van het probleem is?

$ sudo salt 'amalthea*' pillar.items --out=json
[snip]
        "kodi": {
            "server": {
                "bind-address": [
                    "10.0.0.15"
                ]
            },
            "mysqld": {
                "kodi_user": "aaaa",
                "kodi_pass": "bbbb",
                "connection_charset": "utf8"
            }
        },


De grains tonen duidelijk de data:
$ sudo salt 'amalthea*' grains.items
[snip]
    ip4_interfaces:
        ----------
        eth0:
            - 10.0.0.15
        lo:
            - 127.0.0.1


De 'dict_object has no attribute' fout lijkt zo weidverbreid bij Salt dat ik er niks specifiek over vind. Het 'vreemde' is ook dat het daarvoor gewoon een werkende pillar was, maar ik kan maar niet vinden wat er hier mis is. Layout lijkt het probleem niet te zijn.

Wat zoeken op de foutmelding oplevert hier en daar is dat het misschien aan Python 3 zou liggen, maar een oplossing of workaround vind ik niet. De meeste vergelijkbare foutmeldingen gaan over syntax errors in de pillar, maar die heb ik gedubbelcheckt en die zijn er voor zover ik kan zien niet.

[ Voor 4% gewijzigd door Borromini op 06-11-2021 22:00 ]

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje

Alle reacties


Acties:
  • 0 Henk 'm!

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Topicstarter
Niemand een idee? :P

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22-05 22:30

Hero of Time

Moderator LNX

There is only one Legend

Eerste waar ik aan denk is "heet je netwerkkaart ook echt eth0?", want dat is al jaren niet meer de standaard. Je moet wat handelingen uitvoeren om de oude naamgeving weer te krijgen en eigenlijk is het op deze manier opschrijven van je NIC ook geen goed idee. Saltstack is toch bedoelt om je systeem te configureren? Dan moet het ook in staat zijn dynamisch je netwerkinterfaces op te roepen en als variabele te gebruiken.

Ken Salt verders niet, dus mijn gedachtegang moet je met een korreltje zout nemen. :+

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Topicstarter
Haha, ja die interfaces heb ik hernoemd via udev. Die en38ps0 dingen, dat onthoudt niet zo makkelijk (helemaal niet als je 'n systeem met vier NICs hebt :p). Dus dat zit wel goed :).

Dit doet exact dat, het IPv4-adres oproepen van eth0:
code:
1
grains['ip4_interfaces']['eth0']

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


Acties:
  • 0 Henk 'm!

  • sander85
  • Registratie: Mei 2003
  • Laatst online: 22-05 08:30
Sorry dat ik nog zo laat met een mogelijk antwoord kom. Ik zie dat je grains via Pillar probeert uit te vragen. Kan het heel misschien zijn dat die Pillar gerendered wordt op de salt master? En die Salt master heeft misschien geen eth0?

Acties:
  • 0 Henk 'm!

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Topicstarter
De grains zijn afkomstig van de client, het lijkt echt op een regressie van Salt zelf.

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje

Pagina: 1