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).
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
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
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.
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
--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
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