[PYTHON] [Ansible] Worauf ich beim Schreiben von Ansible achten muss

Es ist viel praktischer geworden (mein Schreibstil ist älter) als die alte Version, also ein Memo, als ich die Verwaltung meiner Punktedatei auf ansible umstellte und verschiedene Dinge ausprobierte

Umgebung

Referenzierte Site

Lesen Sie das Verzeichnislayout der Best Practices

Bei Betrachtung verschiedener Repositorys scheint ansible mit verschiedenen Verzeichnisstrukturen geschrieben zu sein, aber das offizielle Dokument [Verzeichnislayout](http://docs.ansible.com/ansible/playbooks_best_practices.html#directory- Da es im Layout beschrieben ist, schreiben (oder zielen) wir mit einer Verzeichnisstruktur, die darauf verweist

Dinge im Zusammenhang mit Urteil (wenn System)

Es gibt verschiedene Probleme, die nicht allein durch Module gelöst werden können.

Die Änderung des Ergebnisses der Playbook-Ausführung wird immer nur geändert, wenn sich das Verhalten des Zielhosts ändert.

Obwohl in beschrieben

Wenn es sich um ein Playbook handelt, das Sie geschrieben haben, ist dies eine Änderung, über die Sie sich keine Sorgen machen müssen. Sie können sofort beurteilen, indem Sie sich das Ausführungsergebnis von ansible ansehen. Wenn Sie jedoch eine Änderung erhalten, wenn jemand anderes dieses Spielbuch ausführt, werden Sie sich fragen: "Oh, etwas hat sich geändert?" Ich halte es für wünschenswert, dass Änderungen nur geändert werden, wenn sich das Verhalten des Zielbetriebssystems ändert.

Andernfalls wird eine Änderung unheimlich und es wird unmöglich, allgemeine Aufgaben in Produktion, Inszenierung, Entwicklung usw. zu schreiben, und der Prozess der Erledigung von Aufgaben gemäß jeder Umgebung beginnt. Zu diesem Zeitpunkt sollte die "geheime Sauce" ziemlich weit fortgeschritten sein. Ich habe das Gefühl, ich weiß nicht, wofür es ist.

Da wann schnell ist, schreiben Sie den Ausführungsbedingungszweig so oft wie möglich mit wann

Es ist eine schnelle Geschichte, aber von geändert_wenn [wann](http: //docs.ansible. com / ansible / playbooks_error_handling.html # Steuern-was-definiert-Fehler) fühlt sich beim Ausführen von Playbooks oft schneller an (Vielleicht hat chaged_when das Gefühl, dass es eine Aktion und dann eine Wann-Entscheidung macht. Es tut mir leid, wenn es falsch ist.)

Fügen Sie für betriebssystemspezifische Module `hinzu, wenn:" ansible_os_family == '{uname}' "`

Wenn Sie beispielsweise das Zielbetriebssystem beim Schreiben der Aufgabe zur Installation von nkf auf OSX beschränken, würden Sie folgendermaßen schreiben

roles/nkf/install/tasks/main.yml


- name: Install the nkf from homebrew
  homebrew: name=nkf state=present

Aber nkf ist auch für das Gastbetriebssystem notwendig, oder? Wenn Sie dies so schreiben, dass Sie in diesem Fall keine nutzlosen Rollen erstellen, können Sie den gleichen Vorgang für verschiedene Betriebssysteme mit einer Rolle garantieren.

roles/nkf/install/tasks/main.yml


- name: Install the nkf from homebrew
  homebrew: name=nkf state=present
  when: "ansible_os_family == 'Darwin'"

- name: Install the nkf from yum
  yum: pkg=nkf state=present
  when: "ansible_os_family == 'RedHat'"

Mit `` `failed_when: no``` anstatt ignore_erros

Es gibt ignore_errors, da Sie es ignorieren können, selbst wenn ein Fehler auftritt.

"widerlich····"

Wenn beim Ausführen des Playbooks "ignore_errors" auftritt, wird "failed" auf dem Display angezeigt.

Auf der Konsole wird etwas Rotes angezeigt, auch wenn es nicht ansibel ist.

Was Sie mit ignore_errors tun möchten, ist, fail zu ignorieren. Wenn Sie es also ignorieren, verursachen Sie keinen Fail

failed_when: no

Lass uns schreiben. Auf diese Weise werden Sie auf der Konsole nicht ausgefallen.

Verwenden Sie Meta, wenn Sie eine abhängige Rolle haben

Beispielsweise ist Chrome erforderlich, wenn chrome-cli installiert wird, das Chrome mit CUI betreibt.

Die Art und Weise, die Aufgabe in diesem Fall zu schreiben, ist wie folgt

Aufgabe zur Installation von chrome-cli

roles/homebrew/brew/chrome-cli/tasks/main.yml


- name: Install the chrome-cli in the brew.
  homebrew: name=chrome-cli state=present
  when: "ansible_os_family == 'Darwin'"

Installieren Sie einfach Chrome-Cli mit Homebrew

Aufgabe zur Installation von Google-Chrome

roles/homebrew/brew-cask/google-chrome/tasks/main.yml


- name: Install the google-chrome in the brew-cask
  homebrew_cask: name=google-chrome state=present
  when: "ansible_os_family == 'Darwin'"

Installieren Sie einfach Google-Chrome mit Homebrew-Fass

chrome-cli ist Homebrew / Brew-Cask / Google-Chrome-Abhängigkeits-Meta

homebrew/brew/chrome-cli/meta/main.yml


dependencies:
  - { role: homebrew/brew-cask/google-chrome }
chrome-cli
├── meta
│   └── main.yml
└── tasks
    └── main.yml

google-chrome
└── tasks
    └── main.yml

Schreiben Sie zwei Rollen und beschreiben Sie die Abhängigkeiten in Meta

Wenn Sie wget möchten, verwenden Sie get_url

Wie der Titel schon sagt. Für persönliches Memo

Bearbeiten von Dateien und Verzeichnissen

Ich vergesse das oft auch und schaue mir oft die Dokumentation des Ansible-Moduls an, also mein eigenes Memo

Das Überprüfen der Existenz von Dateien und Verzeichnissen ist stat

Wenn Sie sich die obigen [Beispiele] ansehen (http://docs.ansible.com/ansible/stat_module.html#examples), können Sie die meisten Dinge tun.

Schließlich

Ich werde es hinzufügen, wenn es einen zusätzlichen Hinweis gibt.

Recommended Posts

[Ansible] Worauf ich beim Schreiben von Ansible achten muss
Dinge, die Sie bei der Implementierung von Airflow mit Docker-Compose beachten sollten
Eine verschiedene Zusammenfassung dessen, was ich über Ansible recherchiert habe
Was ich über Linux gelernt habe
Worüber ich mir Sorgen gemacht habe, als ich Bilder mit matplotlib angezeigt habe
Was ich über Qiitas Post überprüft habe
Worauf ich mich bei der Verwendung von Tensorflow-gpu eingelassen habe
Worauf ich mich beim Studium von tkinter bezog
Was ich beim Update von Python 2.6 auf 2.7 gemacht habe
[Frage] Was passiert, wenn Sie% in Python verwenden?
Was ich über KI / maschinelles Lernen mit Python gelernt habe (1)
Was beim Nachahmen zu tun ist, wird in Python eingebettet
Was ich über KI / maschinelles Lernen mit Python gelernt habe (3)
Wovon ich süchtig war, als ich Python Tornado benutzte
Was ich über KI / maschinelles Lernen mit Python gelernt habe (2)
Ein Hinweis darauf, was ich gelernt habe, als ich über die Verwendung von pyenv oder virtualenv unter Windows nachdachte