[PYTHON] Après avoir commencé, j'ai essayé d'exécuter localement la division de déploiement httpd conf pour chaque environnement avec ansible

Aperçu

J'ai essayé de toucher ansible, donc je vais le résumer. Voici un exemple d'exécution locale de l'installation httpd, des paramètres de démarrage, du placement de conf par environnement et du rechargement de httpd. Après avoir configuré le serveur, j'aimerais pouvoir préparer l'environnement ansible et créer l'environnement souhaité avec une seule commande (avec les options dev ou stg).

introduction

Rassemblez les connaissances de base

Lisez quelques articles que j'ai recherchés sur Google comme "Introduction à ansible" Introduction à Ansible --Qiita Essayez l'environnement LAMP avec Ansible pour le moment - journalyk5656 Tutoriel Ansible utilisant Role | Developers.IO

Au moins, il semble que les éléments suivants devraient être disponibles.

--environnement transformable --Fichier d'inventaire (fichier contenant des informations sur le serveur) --Fichier Playbook (fichier avec des informations sur la tâche)

Est-il possible d'omettre le fichier d'inventaire et de le gérer dans un seul fichier? J'ai eu du mal, mais je n'ai pas pu le reproduire, et cela semble être obsolète. (Quelque chose peut être fait avec des options lors de l'exécution de commandes comme fabric)

Il semble y avoir un cas. [Ansible] Exécutez la commande ansible sans utiliser le fichier d'inventaire | Developers.IO

Installation

L'installation se fait via yum ou sudo. Puisque l'environnement à portée de main est coupé pour chaque répertoire avec pyenv + virtualenv, je l'ai introduit à partir de pip.

sh



#de yum
$ sudo yum install epel-release
$ sudo yum install ansible
#Dans ce cas, le fichier d'inventaire décrit plus loin(/etc/ansible/hosts)Semble pouvoir le faire tout seul

#de pip(python Prémisse qu'il existe un environnement à l'avance)
$ pip install ansible

Je l'ai essayé

Préparation du dossier d'inventaire (Il semble que / etc / ansible / hosts soit lu par défaut)

/home/hoge/ansible/hosts



[all]
localhosts ansible_connection=local

Préparation du livre de lecture

/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

Préparation du modèle pour conf pour chaque environnement (Cette fois, c'est un échantillon, donc tout va bien)

bash


# /home/hoge/Ansible et ci-dessous respectivement
$ 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>

Essayez de courir

bash



#Quel playbook exécuter, demandez le chemin sudo?, Spécification de la variable d'exécution, Spécification du fichier d'inventaire
$ 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

Félicitations pour le fait que dev ou stg est spécifié comme option lors de l'exécution de la commande.

Commentaire du Playbook

Ce que j'ai fait cette fois

Exécuter des "tâches" associées à l'unité d'environnement "hôtes"

Vous pouvez spécifier «sudo» pour «hôtes».

main.yaml


#Exécuter avec sudo sur les hôtes locaux
- hosts: localhosts
  sudo: yes

--Dans "tâches", donnez un nom à chaque tâche pour chaque "nom" et décrivez l'état réel souhaité en dessous. --Ce sont appelés modules, et cette fois nous utilisons yum, service, template, wait_for, etc. --Référence: Tous les modules - Documentation Ansible

main.yaml


#httpd jusqu'à ce que vous installiez et activiez le démarrage et le démarrage automatique du processus
  tasks:
  - name: install httpd
    yum: name=httpd state=present
  - name: start httpd service
    service: name=httpd state=started enabled=yes
  ...

Reportez-vous au fichier jinja2 (.j2) dans le modèle En dessous, vous pouvez spécifier une branche pour la tâche suivante lorsqu'une modification se produit dans cette tâche avec notification, ou dans quelle situation, quand l'exécuter en premier lieu.

main.yaml


###Placement de conf pour 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"

"Httpd restart" spécifié par notify est spécifié comme des gestionnaires comme une tâche d'assistance

main.yaml


#En tant que manutentionnaire"httpd restart"Définir
  handlers:
    - name: httpd restart
      action: service name=httpd state=reloaded

Ce que vous pouvez faire à l'avenir

--Vars peut également intégrer des variables dans main.yaml --main.yaml peut améliorer la réutilisabilité en incorporant chaque tâche dans un fichier séparé --Si vous créez la structure du fichier selon les règles telles que chef avec rôle, il sera lu automatiquement --Il semble que vous puissiez créer votre propre module avec bash --Il semble que vous puissiez utiliser Vault pour le databag du chef. ――Il semble que vous puissiez le faire même dans un environnement triste où vous ne pouvez pas l'exécuter à moins d'être root au lieu de sudo

référence: Essayez d'utiliser le Playbook-Akishin999's Diary d'Ansible Iroha pour la création du module Ansible --Nulab Inc. Authentification par mot de passe avec exécution ansible et root avec su-Qiita

Impressions

J'ai pu faire ce que je voulais faire rapidement, mais je suis toujours au niveau d'introduction, alors je me demande si cela va se produire dans le futur.

--Bien? ――Il est bon de pouvoir faire 2 fichiers ou le minimum --Est-ce que vous êtes confus par beaucoup de commandes mystérieuses comme chef? (Bien qu'il y ait des commandes ansible et ansible-playbook ...) --Est-il mauvais?

c'est tout.

Recommended Posts

Après avoir commencé, j'ai essayé d'exécuter localement la division de déploiement httpd conf pour chaque environnement avec ansible
J'ai essayé de commencer avec Hy
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
J'ai essayé de démarrer avec le script python de blender_Partie 02
De la construction de l'environnement au déploiement pour flask + Heroku avec Docker
J'ai essayé de commencer avec Hy ・ Définir une classe
Création d'un environnement Windows 7 pour une introduction à l'apprentissage automatique avec Python
Changez le package à installer pour chaque environnement avec de la poésie
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
J'ai essayé de démarrer avec Bitcoin Systre le week-end
Générer du matériel pour la vidéo "J'ai essayé de chanter avec XX" [python-pptx]
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
Premiers pas avec Python pour les classes PHPer
Premiers pas avec Julia pour Pythonista
Premiers pas avec Python pour les fonctions PHPer
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv