Salt State Testing über Jenkins


7

Alle,

Wir versuchen, automatisierte Tests in unserem Jenkins-Setup durchzuführen, um Tests vom Typ "Rauch" und "Flusen" in unseren Salt-State-Dateien ( .sls) auszuführen . Alle Google-Foo hat bisher nur sehr wenige Informationen geliefert. Es gibt eine Möglichkeit zum Testen über test=Truein der Befehlszeile, aber das funktioniert nicht mit einem No-Shell-Konto (wie es normalerweise bei Jenkins Konten der Fall ist).

Ich habe noch niemanden getroffen, der diese Art von automatisierten Tests von SaltStack-Zuständen durchgeführt hat. Damit:

1) Ist es möglich

2) Jeder kennt eine gute Ressource, die ich mir ansehen könnte

TIA.

Antworten:


7

Docker. Schnelles automatisiertes Testen der Serverkonfiguration ist ein unbestreitbares reales Problem, das Docker festnagelt. Es kann einen sauberen Computer bereitstellen, der bereits gestartet ist und in einer Sekunde das Netzwerk abhört. Starten Sie ein Image mit / srv / salt bind-mount und Sie können salt-call --local state.highstate -l debugTestzustände ohne Probleme ausführen salt-key.

Ich weiß, dass SaltStack, Inc LXC ähnlich verwendet hat. Sie tun es wahrscheinlich immer noch.

Was den Test betrifft - wenn Sie mit Ihren Statusdateien klug und vorsichtig umgehen, können Sie einen sauberen zweiten Lauf als Hinweis auf den Erfolg betrachten.

Dies ist schwer zu erreichen, da einige Staaten immer wieder ausgeführt werden. Salt Stack war gut darin, diese Zustände zu beheben, sobald sie gefunden wurden. In der Zwischenzeit müssen Sie diese Zustände mit Inline-Jinja-Bedingungen umgeben, die zur Laufzeit Befehle für den Minion ausführen:

{% if salt['cmd.retcode']('your test here') %} 
some-identifier:
  some.module:
    - name: some anme
{% endif %}'

Es gibt ein Jenkins-Docker-Plugin :

Das Ziel des Docker-Plugins besteht darin, mithilfe eines Docker-Hosts einen Slave dynamisch bereitzustellen, einen einzelnen Build auszuführen und diesen Slave dann herunterzufahren.

Alternativ können Sie das Ganze über das neue Docker-ng-Salzmodul automatisieren :

salt dockhost docker-ng.create states-qa rm=True binds="/srv/salt:/srv/salt"
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 1
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 2
salt dockhost docker-ng.stop states-qa

Genial. Werde das überprüfen. Erhöht definitiv die Zeit, die wir verbringen wollten, aber ich nehme an, es wird gut investierte Zeit sein, wenn es uns ein Missgeschick in der Produktionsautomatisierung erspart.
Rdodev

0

Vielleicht möchten Sie einen Blick auf TestInfra werfen


Könnten Sie Ihre Antwort erweitern und vielleicht erklären, warum TestInfra ihren Benutzerfall erfüllen könnte? Das Bereitstellen einer Nur-Link-Antwort wird als Beitrag von geringer Qualität angesehen, da sich Links ändern / veralten können.
Castaglia

0

Ich habe eine Weile nach einem guten Weg gesucht, um dieses QA-Zeug über den Salzzustand zu erreichen, und meine beste Antwort ist bisher:

  1. Verwenden von Jenkins zum Starten von Jobs (über ssh), basierend auf einem Dev-Git-Zweig, der:

    • Stellen Sie einen lxc in unserer privaten Proxmox-Cloud für Labors bereit (genauso wie wir dies in prod tun).

    • Bei Verwendung von Salzreaktoren erhält der Container seine Konfiguration (wie bei Prod)

    • Verwenden von testinfra zum Ausführen eines Komponententests für den erstellten und konfigurierten Container

    • Wenn alles in Ordnung war, zerstöre den Container, wenn nicht, halte ihn für eine morgendliche Debugging-Sitzung am Leben :)

  2. Wir führen auch einen Flusen-Jenkins-Job aus als:

    for state in $(sudo /usr/bin/salt-call cp.list_states | awk '{print $2}' | grep -v "^top$"); do sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
    

Ich habe immer noch ein Problem damit, den richtigen Rückkehrcode für diesen letzten Flusenjob zu erhalten (wegen ssh und so weiter).

Dieser Prozess als Ganzes stellt sicher:

  1. Unser Bereitstellungsprozess ist in Ordnung
  2. Unsere Codebasis (Zustand + Säule) funktioniert wie erwartet
  3. Wir können Entwickler zu Produkten mit einem hohen Vertrauensverhältnis zusammenführen

Der wirklich gute Punkt von testinfra ist, dass es ein Salt-Connection-Backend verwenden kann, mit dem testinfra eine Verbindung zum Container herstellen kann, ohne dass ein SSH-Schlüssel oder etwas anderes bereitgestellt werden muss (da wir Salt-Cloud für die Erstbereitstellung verwenden).

Mehr zum Testinfra Salt Connection Backend , Testinfra Salt Modul .

Das ist nicht perfekt, aber es macht trotzdem einen ziemlich guten Job.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.