wake-up-neo.com

Variable für ein anstehbares Datum

Ich versuche zu lernen, Ansible-Fakten als Variablen zu verwenden, und ich verstehe es nicht. Wenn ich renne ...

$ ansible localhost -m setup

... es listet alle Fakten meines Systems auf. Ich habe zufällig einen ausprobiert, um es auszuprobieren und zu verwenden, ansible_facts.ansible_date_time.date, aber ich kann nicht herausfinden, wie ich es verwenden soll. Wenn ich renne ...

$ ansible localhost -m setup -a "filter=ansible_date_time"
localhost | success >> {
    "ansible_facts": {
        "ansible_date_time": {
            "date": "2015-07-09",
            "day": "09",
            "Epoch": "1436460014",
            "hour": "10",
            "iso8601": "2015-07-09T16:40:14Z",
            "iso8601_micro": "2015-07-09T16:40:14.795637Z",
            "minute": "40",
            "month": "07",
            "second": "14",
            "time": "10:40:14",
            "tz": "MDT",
            "tz_offset": "-0600",
            "weekday": "Thursday",
            "year": "2015"
        }
    },
    "changed": false
}

So ist es CLEARLY dort. Aber wenn ich renne ...

$ ansible localhost -a "echo {{ ansible_facts.ansible_date_time.date }}"
localhost | FAILED => One or more undefined variables: 'ansible_facts' is undefined

$ ansible localhost -a "echo {{ ansible_date_time.date }}"
localhost | FAILED => One or more undefined variables: 'ansible_date_time' is undefined

$ ansible localhost -a "echo {{ date }}"
localhost | FAILED => One or more undefined variables: 'date' is undefined

Was bekomme ich nicht hier? Wie verwende ich Fakten als Variablen?

37
turiyag

Der Befehl ansible localhost -m setup sagt im Wesentlichen "das Setup-Modul gegen localhost ausführen" und das Setup-Modul sammelt die Fakten, die Sie in der Ausgabe sehen.

Wenn Sie den Befehl echo ausführen, sind diese Fakten nicht vorhanden, da das Setup-Modul nicht ausgeführt wurde. Eine bessere Methode zum Testen von Dingen wie diesem ist die Verwendung eines Ansible-Playbooks, um ein Playbook auszuführen, das ungefähr wie folgt aussieht:

- hosts: localhost
  tasks:
      - debug: var=ansible_date_time

      - debug: msg="the current date is {{ ansible_date_time.date }}"

Da dies als Spielbuch läuft, werden Fakten für localhost gesammelt, bevor die Aufgaben ausgeführt werden. Die Ausgabe des obigen Spielbuchs sieht etwa so aus:

PLAY [localhost] **************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [debug var=ansible_date_time] *******************************************
ok: [localhost] => {
    "ansible_date_time": {
        "date": "2015-07-09",
        "day": "09",
        "Epoch": "1436461166",
        "hour": "16",
        "iso8601": "2015-07-09T16:59:26Z",
        "iso8601_micro": "2015-07-09T16:59:26.896629Z",
        "minute": "59",
        "month": "07",
        "second": "26",
        "time": "16:59:26",
        "tz": "UTC",
        "tz_offset": "+0000",
        "weekday": "Thursday",
        "year": "2015"
    }
}

TASK: [debug msg="the current date is {{ ansible_date_time.date }}"] **********
ok: [localhost] => {
    "msg": "the current date is 2015-07-09"
}

PLAY RECAP ********************************************************************
localhost      : ok=3    changed=0    unreachable=0    failed=0
64
Bruce P

Das Suchmodul von Ansible funktioniert gut für mich. Das Yml ist:

- hosts: test vars: time: "{{ lookup('pipe', 'date -d \"1 day ago\" +\"%Y%m%d\"') }}"

Sie können jeden Befehl durch Datum ersetzen, um das Ergebnis des Befehls zu erhalten.

5
onebraveman

Beachten Sie, dass der Befehl ansible keine Fakten erfasst, der Befehl ansible-playbook jedoch. Wenn ansible -m setup ausgeführt wird, führt das Setup-Modul die Faktensammlung aus, sodass Sie die Fakten erhalten, ansible -m command nicht. Daher sind die Fakten nicht verfügbar. Aus diesem Grund enthalten die anderen Antworten Playbook-YAML-Dateien und zeigen an, dass die Suche funktioniert.

2
Eric Horne

Die Filteroption filtert nur den Unterschlüssel der ersten Ebene unter ansible_facts