Los módulos de Ansible están escritos en Python. Por lo tanto, si la máquina destino no tiene Python instalado, no se puede ejecutar hasta que no se instale. Ansible tiene la opción raw para poder ejecutar un comando usando la conexión ssh directamente, saltándose todo el sistema de módulos. El uso más normal de este comando es instalar Python para poder usar posteriormente el sistema de módulos. Un ejemplo de uso, es poder usar Ansible para provisionar una Ubuntu 16.04 instalada en EC2, ya que por defecto la ami que se usa no tiene Python. Si incluimos en nuestro playbook una tarea de este tipo:
tasks: - name: install python 2 raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal) become: yes
Sino encuentra el ejecutable de Python, nos instalará el mismo. Luego, podremos usar los módulos de Ansible como siempre. Un ejemplo completo de un playbook que despliega una máquina en EC2 usando la AMI de Ubuntu 16.04 y se instala python en la misma para poder usar el resto de los módulos. Las variables se pueden definir en un fichero de configuración y pasarlas con -e a ansible-playbook.
- name: Deploy EC2 machine and install python if no exists hosts: 127.0.0.1 connection: local gather_facts: False tasks: - name: Create the security group ec2_group: name: "{{ec2securitygroup}}" description: Access rules: - proto: tcp ports: - 22 cidr_ip: 0.0.0.0/0 - name: Deploy the machine ec2: region: "{{ec2region}}" key_name: "{{ec2sshkey}}" instance_type: "{{ec2instancetype}}" image: "{{ec2ami}}" wait: yes count: 1 group: "{{ec2securitygroup}}" vpc_subnet_id: "{{ec2subnetid}}" register: ec2 - name: If EC2 exists, register its IP add_host: hostname: "{{item.public_ip}}" groups: - deployedMachines with_items: "{{ec2.instances|default([])}}" - name: Wait for SSH to come up wait_for: host: "{{item}}" port: 22 delay: 10 timeout: 60 state: started with_items: "{{groups[\"deployedMachines\"]|default([])}}" - name: Configure instance hosts: deployedMachines user: "{{remoteuser}}" gather_facts: False tasks: - name: install python 2 raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal) become: yes - name: Update the system shell: apt-get update && apt-get -y install python-apt become: yes
Las variables a definir en el fichero yaml de configuración son:
ec2sshkey: Clave de la instancia que se va a usar.
ec2instancetype: Tipo de instancia
ec2region: Región de Amazon
ec2ami: "ami-43a15f3e" # Esta es la AMI de Ubuntu en us-east-1
ec2subnetid: ID de la subred donde se va a desplegar ec2securitygroup: Nombre grupo de seguridad
remoteuser: "ubuntu" # Por defecto, el usuario de las AMI es este
No hay comentarios:
Publicar un comentario