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.