Opérez selon le manuel de procédure Excel! J'ai vu sur certains sites que ansible pouvait être utilisé pour changer la réalité, j'ai donc essayé de le vérifier en combinaison avec docker. Et j'ai appris lors de la vérification que ssh n'est pas nécessaire si j'utilise ** "Plugin de connexion Docker pour Ansible" ** comme méthode de connexion au conteneur, j'ai donc fait une note jusqu'à ce que je puisse me connecter après l'avoir changé.
os: centos7 ansible: 2.9.13 docker: 19.03.13 docker-compose: 1.26.2
L'installation de chaque milieu est omise car plusieurs personnes sont ouvertes au public.
# OS
FROM centos:centos7
# pkg install
RUN yum install -y epel-release && \
yum update -y && \
yum install -y openssh-server openssh-clients sshpass && \
yum install -y net-tools vim
ENV LANG ja_JP.UTF-8
# root password
RUN echo password | passwd --stdin root
# # sshd_config edit
RUN sed -ri "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
RUN systemctl enable sshd.service
CMD ["/sbin/init"]
Préparez un conteneur pour la connexion avec ansible (je l'ai fait parce que j'essayais d'utiliser ssh au début)
version: '3.7'
services:
srv1:
build:
context: .
dockerfile: srv-dockerfile
hostname: srv1
container_name: srv1
environment:
- TZ=Asia/Tokyo
restart: always
tty: true
networks:
app_net:
ipv4_address: 172.16.238.101
srv2:
build:
context: .
dockerfile: srv-dockerfile
hostname: srv2
container_name: srv2
environment:
- TZ=Asia/Tokyo
restart: always
tty: true
networks:
app_net:
ipv4_address: 172.16.238.102
#Réglage NW pour l'attribution IP fixe
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
J'ai donné ** IP fixe ** parce que cela semble pratique pour ssh.
# docker-compose up -d
Starting srv1 ... done
Starting srv2 ... done
[testGrp]
172.16.238.101
172.16.238.102
- name: start up a docker container
hosts: localhost
tasks:
- name: start up a docker container by running bash
command: docker-compose -f /srv/ansible/docker-compose.yml up -d
tags:
- never # docker-"toujours" dans la composition:Puisqu'il dit "redémarrer", je l'ai fait ne pas fonctionner normalement
- name: connection test
hosts: testGrp
connection: docker #Spécifier l'utilisation du plugin de connexion
tasks:
- name: ping
ping:
# ansible-playbook -i hosts test-ansible.yml --check --diff
PLAY [start up a docker container] ***********************************************************************************************************************************
PLAY [connection test] ***********************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************
fatal: [172.16.238.101]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1602479114.98-3164-90901945313893 `\" && echo ansible-tmp-1602479114.98-3164-90901945313893=\"` echo ~/.ansible/tmp/ansible-tmp-1602479114.98-3164-90901945313893 `\" ), exited with result 1", "unreachable": true}
fatal: [172.16.238.102]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1602479115.05-3165-268763785818242 `\" && echo ansible-tmp-1602479115.05-3165-268763785818242=\"` echo ~/.ansible/tmp/ansible-tmp-1602479115.05-3165-268763785818242 `\" ), exited with result 1", "unreachable": true}
PLAY RECAP ***********************************************************************************************************************************************************
172.16.238.101 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
172.16.238.102 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
J'ai échoué en toute sécurité. Il était possible que le message d'erreur n'ait pas l'autorité du dossier tmp, mais il n'y a pas d'autorité insuffisante avec ping, et je l'ai laissé.
# docker-compose ps
Name Command State Ports
---------------------------------
srv1 /sbin/init Up
srv2 /sbin/init Up
# docker inspect srv1 | grep IPv4Address
"IPv4Address": "172.16.238.101"
# ping 172.16.238.101
PING 172.16.238.101 (172.16.238.101) 56(84) bytes of data.
64 bytes from 172.16.238.101: icmp_seq=1 ttl=64 time=0.133 ms
64 bytes from 172.16.238.101: icmp_seq=2 ttl=64 time=0.134 ms
Juste au cas où, j'ai exécuté le ping seul, mais comme cela a réussi, j'ai décidé qu'il n'y avait aucun problème avec le conteneur lui-même.
[testGrp]
#172.16.238.101
#172.16.238.102
srv1
srv2
Lorsque je regarde divers articles utiles, je remarque que tous les articles sont spécifiés par "nom d'hôte" lors de l'utilisation du plug-in (une demi-journée s'est écoulée à ce stade). Donc, changez la méthode de spécification cible de "IP" à ** "Nom du conteneur" **.
# ansible-playbook -i hosts test-ansible.yml --check --diff
PLAY [start up a docker container] ***********************************************************************************************************************************
PLAY [connection test] ***********************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************
ok: [srv2]
ok: [srv1]
TASK [ping] **********************************************************************************************************************************************************
ok: [srv2]
ok: [srv1]
PLAY RECAP ***********************************************************************************************************************************************************
srv1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
srv2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Succès!
Même si vous ne regardez pas de près, il indique "nom du conteneur" ou "nom d'hôte", y compris le nom officiel. À partir de la vérification de la connexion ssh, il s'agissait d'un échec en raison de l'hypothèse que l'adresse IP était fixée pour le moment et que la connexion IP spécifiée pouvait être établie. .. ..
Je voulais vraiment tout démarrer dans un conteneur, y compris ansible, mais lorsque je l'ai transformé en conteneur, je ne pouvais pas accéder à d'autres conteneurs via le plug-in correspondant, donc je l'ai installé directement sur l'hôte pour le moment. Il y avait un article disant que vous pouvez utiliser DooD, mais pour une raison quelconque, le conteneur ne l'a pas reconnu et vous ne pouviez pas utiliser la commande docker. .. .. Eh bien, le principal n'est pas là, donc plus tard.
Recommended Posts