Puncte:1

Cum să utilizați rezultatul unei comenzi în interiorul valorii ansible ini_file

drapel ve

Am vrut să setez o valoare în interiorul unui fișier ini, dar această valoare este un hash MD5 al timpului curent. (Nu mă tem să înlocuiesc accidental valoarea sau să o rulez magic de două ori și să aibă aceeași valoare pe două servere diferite.)

Acesta este ceea ce am încercat, dar am primit doar comanda ca valoare din fișier (nu sunt sigur de ce am crezut că va funcționa...):

- nume: Înlocuiți ID hardware cu noul MD5
      ini_file:
        calea: /etc/app/config.ini
        secțiunea: DEFAULT
        opțiune: hardware_token
        valoare: $(data | md5sum | cut -d" " -f1)

Există o modalitate simplă de a o face să funcționeze?

Michael Hampton avatar
drapel cz
Aceasta este doar suma md5 a unui șir aleatoriu. Este important în ce format este șirul?
Puncte:1
drapel cz

Ansible își poate genera propriile șiruri de dată și oră și își poate face propriile sume MD5 fără a apela la programe externe. Considera:

---
- gazde: localhost
  conexiune: locală
  sarcini:
    - depanare:
        msg: "{{ ansible_date_time.iso8601 | hash('md5') }}"

Rețineți că ansible_date_time conține ultima dată când ați adunat date de pe serverul de la distanță, nu neapărat ora curentă. Dacă adunați întotdeauna informații despre fiecare rulare de playbook, atunci aceasta nu ar trebui să fie o problemă.

Guilherme Richter avatar
drapel ve
Nu știam că Ansible are acele „funcții” native. Mă bucur că am pus această întrebare.
Puncte:0
drapel br

Î: "Cum se utilizează ieșirea comenzii în valoarea Ansible ini_file?"

R: Înregistrați rezultatul comenzii și utilizați-l ca valoare, de ex.

- gazde: test_24
  gather_facts: false
  sarcini:
    - coajă: „data | md5sum | tăiați -d" " -f1'
      înregistrare: rezultat
      check_mode: false
    - depanare:
        var: rezultat
    - nume: Înlocuiți ID hardware cu noul MD5
      ini_file:
        cale: etc/app/config.ini
        secțiunea: DEFAULT
        opțiune: hardware_token
        valoare: „{{ result.stdout }}”

dă (rulează cu --check --diff)

SARCINA [Înlocuiți ID hardware cu noul MD5] ************************************
--- înainte de: etc/app/config.ini (conținut)
+++ după: etc/app/config.ini (conținut)
@@ -0,0 +1,3 @@
+
+[IMPLICIT]
+token_hardware = ba3f11c4f1ecfe9d1e805dc8c8c8b149

schimbat: [test_24]

Este mai ușor să utilizați Ansible facts dacă doriți să utilizați datele și timpul ca intrare. De exemplu, dicționarul ansible_date_time păstrează data și ora dacă adunați faptele. În cartea de joc, am stabilit gather_facts: false. âDe aceea dicționarul nu este definit

    - depanare:
        var: ansible_date_time.iso8601

ok: [test_24] => 
  ansible_date_time.iso8601: VARIABILA NU ESTE DEFINITĂ!

Va trebui fie să adunați faptele gather_facts: adevărat când începi jocul sau alergi înființat, de exemplu.

    - înființat:
        gather_subset: min
    - depanare:
        var: ansible_date_time.iso8601

ok: [test_24] => 
  ansible_date_time.iso8601: '2021-07-29T21:32:26Z'

Acest lucru nu este foarte practic deoarece pentru a obține ora curentă trebuie să alergați înființat. În schimb, filtrul strftime vă oferă întotdeauna ora curentă, de ex.

    - depanare:
        msg: "{{ '%Y-%m-%d %H:%M:%S' | strftime }}"

    - nume: Înlocuiți ID hardware cu noul MD5
      ini_file:
        cale: etc/app/config.ini
        secțiunea: DEFAULT
        opțiune: hardware_token
        valoare: „{{'%Y-%m-%d' | strftime | hash('md5') }}"

SARCINA [depanare] ************************************************ ****************
ok: [test_24] => 
  mesaj: '2021-07-29'

SARCINA [Înlocuiți ID hardware cu noul MD5] *************************************
--- înainte de: etc/app/config.ini (conținut)
+++ după: etc/app/config.ini (conținut)
@@ -0,0 +1,3 @@
+
+[IMPLICIT]
+hardware_token = 5847924805aa614957022ed73d517e7e

Ca o notă secundară: utilizarea acestui hash ar putea fi o căutare foarte rapidă dacă data-ora (în granularitate de secunde) este indexul.

Guilherme Richter avatar
drapel ve
Uau, nu aveam idee că pot face unele dintre acele lucruri în ansible. De asemenea, soluția propusă de dvs. este mult mai bună decât „apucă pur și simplu ieșirea shell-ului și folosește valoarea”.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.