[PYTHON] Nachdem ich angefangen hatte, versuchte ich, die Bereitstellungsabteilung von httpd conf für jede Umgebung mit ansible lokal auszuführen

Überblick

Ich habe versucht, ansible zu berühren, also werde ich es zusammenfassen. Dies ist ein Beispiel für die lokale Ausführung der httpd-Installation, die Starteinstellungen, die Konfiguration nach Umgebung und das erneute Laden von httpd. Nach dem Einrichten des Servers wünschte ich, ich könnte die ansible Umgebung vorbereiten und die gewünschte Umgebung mit einem einzigen Befehl erstellen (mit den Optionen dev oder stg).

Einführung

Grundkenntnisse sammeln

Lesen Sie einige Artikel, die ich gegoogelt habe, wie "Einführung in ansible" Einführung in Ansible - Qiita Probieren Sie die LAMP-Umgebung vorerst mit Ansible aus - Tagebuch --yk5656 Ansible Tutorial mit Role | Developers.IO

Zumindest scheint Folgendes verfügbar zu sein.

Ist es möglich, die Inventardatei wegzulassen und in einer Datei zu verwalten? Ich kämpfte, aber ich konnte es nicht reproduzieren, und es scheint veraltet zu sein. (Mit Optionen kann etwas getan werden, wenn Befehle wie Fabric ausgeführt werden.)

Es scheint einen Fall zu geben. [Ansible] Ausführen eines ansible-Befehls ohne Verwendung der Inventardatei | Developers.IO

Installation

Die Installation erfolgt über yum oder sudo. Da die vorhandene Umgebung für jedes Verzeichnis mit pyenv + virtualenv abgeschnitten ist, habe ich sie von pip eingeführt.

sh



#von yum
$ sudo yum install epel-release
$ sudo yum install ansible
#In diesem Fall die später beschriebene Inventardatei(/etc/ansible/hosts)Scheint in der Lage zu sein, es alleine zu tun

#von pip(Python Voraussetzung ist, dass es im Voraus eine Umgebung gibt)
$ pip install ansible

Ich versuchte es

Vorbereitung der Inventardatei (Es scheint, dass / etc / ansible / hosts standardmäßig gelesen wird)

/home/hoge/ansible/hosts



[all]
localhosts ansible_connection=local

Playbook-Vorbereitung

/home/hoge/ansible/main.yaml


---
- hosts: localhosts
  sudo: yes
  tasks:
  - name: install httpd
    yum: name=httpd state=present
  - name: start httpd service
    service: name=httpd state=started enabled=yes
  - name: setup stg conf file
    template: src=stg-hoge.j2 dest=/etc/httpd/conf.d/hoge.conf
    notify: httpd restart
    when: conf_env == "stg"
  - name: setup dev conf file
    template: src=dev-hoge.j2 dest=/etc/httpd/conf.d/hoge.conf
    notify: httpd restart
    when: conf_env == "dev"
  - name: httpd start confirm
    wait_for: port=80 delay=1
  handlers:
    - name: httpd restart
      action: service name=httpd state=reloaded

Vorlagenvorbereitung für conf für jede Umgebung (Diesmal ist es eine Probe, also ist alles in Ordnung)

bash


# /home/hoge/Ansible bzw. unten
$ cat dev-hoge.j2
<VirtualHost *:80>
  DocumentRoot /www/public/dev-html
  ServerName www.example.com
</VirtualHost>
$ cat stg-hoge.j2
<VirtualHost *:80>
  DocumentRoot /www/public/stg-html
  ServerName www.example.com
</VirtualHost>

Versuche zu rennen

bash



#Fragen Sie nach dem Sudo-Pfad, welches Spielbuch ausgeführt werden soll?, Spezifikation der Ausführungsvariablen, Spezifikation der Inventardatei
$ ansible-playbook main.yaml --ask-sudo-pass --extra-vars "conf_env=stg" -i hosts

SUDO password:

PLAY [localhosts] *************************************************************

GATHERING FACTS ***************************************************************
ok: [localhosts]

TASK: [install httpd] *********************************************************
ok: [localhosts]

TASK: [start httpd service] ***************************************************
ok: [localhosts]

TASK: [setup stg conf file] ***************************************************
ok: [localhosts]

TASK: [setup dev conf file] ***************************************************
skipping: [localhosts]

TASK: [httpd start confirm] ***************************************************
ok: [localhosts]

PLAY RECAP ********************************************************************
localhosts                 : ok=5    changed=0    unreachable=0    failed=0

$ ansible-playbook main.yaml --ask-sudo-pass --extra-vars "conf_env=dev" -i hosts
SUDO password:

PLAY [localhosts] *************************************************************

GATHERING FACTS ***************************************************************
ok: [localhosts]

TASK: [install httpd] *********************************************************
ok: [localhosts]

TASK: [start httpd service] ***************************************************
ok: [localhosts]

TASK: [setup stg conf file] ***************************************************
skipping: [localhosts]

TASK: [setup dev conf file] ***************************************************
ok: [localhosts]

TASK: [httpd start confirm] ***************************************************
ok: [localhosts]

PLAY RECAP ********************************************************************
localhosts                 : ok=5    changed=0    unreachable=0    failed=0

Herzlichen Glückwunsch zur Tatsache, dass dev oder stg bei der Ausführung des Befehls als Option angegeben wird.

Playbook-Kommentar

Was ich diesmal gemacht habe

Führen Sie "Aufgaben" aus, die den "Hosts" der Umgebungseinheit zugeordnet sind.

Sie können "sudo" für "hosts" angeben.

main.yaml


#Laufen Sie mit sudo auf localhosts
- hosts: localhosts
  sudo: yes

main.yaml


#httpd, bis Sie den Prozessstart und den Autostart installieren und aktivieren
  tasks:
  - name: install httpd
    yum: name=httpd state=present
  - name: start httpd service
    service: name=httpd state=started enabled=yes
  ...

Siehe die jinja2-Datei (.j2) in der Vorlage Darunter können Sie einen Zweig für die nächste Aufgabe angeben, wenn eine Änderung in dieser Aufgabe mit Benachrichtigung auftritt oder in welcher Situation sie überhaupt ausgeführt werden soll.

main.yaml


###Conf Platzierung für stg
  - name: setup stg conf file
    template: src=stg-hoge.j2 dest=/etc/httpd/conf.d/hoge.conf
    notify: httpd restart
    when: conf_env == "stg"

Der durch notify angegebene "Httpd-Neustart" wird als Handler wie eine Hilfsaufgabe angegeben

main.yaml


#Als Handler"httpd restart"Definieren
  handlers:
    - name: httpd restart
      action: service name=httpd state=reloaded

Was Sie in Zukunft tun können

--Vars können auch Variablen in main.yaml einbetten --main.yaml kann die Wiederverwendbarkeit verbessern, indem jede Aufgabe als separate Datei eingefügt wird

Referenz: Versuchen Sie es mit Ansibles Playbook-Akishin999s Tagebuch Iroha zum Erstellen des Ansible-Moduls --Nulab Inc. Passwortauthentifizierung mit Ansible & Root-Ausführung mit su-Qiita

Impressionen

Ich konnte schnell tun, was ich wollte, aber ich bin immer noch in der Einführungsphase, also frage ich mich, ob es in Zukunft passieren wird.

--Gut? ――Es ist gut, 2 Dateien oder das Minimum zu erstellen

das ist alles.

Recommended Posts

Nachdem ich angefangen hatte, versuchte ich, die Bereitstellungsabteilung von httpd conf für jede Umgebung mit ansible lokal auszuführen
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Vom Umgebungsaufbau bis zum Einsatz für Kolben + Heroku mit Docker
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Erstellen einer Windows 7-Umgebung für eine Einführung in das maschinelle Lernen mit Python
Wechseln Sie das zu installierende Paket für jede Umgebung mit Gedichten
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Generiere Power-Material für das Video "Ich habe versucht, mit XX zu singen" [python-pptx]
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Erste Schritte mit Python für PHPer-Klassen
Erste Schritte mit Julia für Pythonista
Erste Schritte mit Python für PHPer-Funktionen
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen