J'essaie d'utiliser mes playbooks docker existants pour provisionner un conteneur Docker en utilisant ubuntu 18.04 pour le développement local.
J'ai du mal à exécuter des playbooks sur le conteneur car il n'est pas fourni avec python installé, donc d'après ce que je comprends, ansible ne peut pas s'exécuter.
Est-il possible d'installer python sur le conteneur pour que mes playbooks puissent fonctionner?
NB Je sais que ansible-container existe mais j'aimerais utiliser mes playbooks existants qui utilisent devenir_user et qui ne fonctionnent pas comme indiqué sur le instructions de construction
3 Réponses :
Je ne savais pas que vous pouviez simplement faire ça.
- name: Create container
docker_container:
name: docker-test
image: ubuntu:18.04
command: sleep 1d
- name: Install python on docker
delegate_to: docker-test
raw: apt -y update && apt install -y python-minimal
Je suis presque sûr que ce manuel, tel qu'il est écrit, ne fonctionnera pas. Après avoir exécuté la tâche docker_container , il n'y a pas de docker-test dans votre inventaire, la délégation échouerait donc.
Je pense que ce que vous avez probablement le plus de sens est d'installer Python et vos autres outils dans votre Dockerfile lorsque vous créez l'image. Ou vous pouvez choisir une image docker avec python déjà installé comme en utilisant ceci comme ligne FROM dans votre Dockerfile:
FROM python
De cette façon, vous n'aurez pas à exécuter votre tâche Ansible pour installer Python à chaque fois que vous faire apparaître un conteneur, il sera intégré à partir du moment où vous créez votre image.
Vous devrez ajouter votre conteneur Docker à l'inventaire ansible avant de pouvoir le cibler dans vos playbooks. Quelque chose comme ceci fonctionnerait:
---
- hosts: localhost
gather_facts: false
tasks:
- name: create container
docker_container:
name: ansible-test
image: ubuntu:bionic
command: bash
detach: true
interactive: true
tty: true
- name: add docker container to inventory
add_host:
name: ansible-test
ansible_connection: docker
- hosts: ansible-test
gather_facts: false
tasks:
- name: update apt cache
delegate_to: ansible-test
raw: apt -y update
- name: install python
delegate_to: ansible-test
raw: apt -y install python-minimal
- name: demonstrate that normal ansible modules work
file:
path: /etc/testdir
state: directory
Notez que même si cela fonctionne, ce n'est pas un très bon modèle: vous ne voulez généralement pas effectuer de tâches de configuration dans vos conteneurs au moment de l'exécution; vous souhaitez configurer vos images au moment de la construction.