Ansible ejecuta ciertas tareas en un grupo de servidores, otras en otro

Ansible ejecuta ciertas tareas en un grupo de servidores, otras en otro

Estoy migrando un grupo de sitios web de una infraestructura a otra, incluida una operación rsync bastante lenta. El proceso de migración incluye cambios en los sistemas de origen y de destino.

Debido a una operación rsync bastante lenta que es parte del proceso, estoy recorriendo un archivo var que contiene los detalles de cada sitio web y luego realizo las tareas necesarias para mover un sitio web a la vez.

No puedo encontrar una manera de dirigir algunas tareas al sistema de origen y otras al sistema de destino. Intenté hacer esto agregando hosts: a cada tarea: (todas las tareas tienen una sola función)

Mi libro de jugadas:

---
- hosts:
    - tag_aws_autoscaling_groupName_thename
    - tag_Name_server_name
  vars_files:
    - group_vars/all

  roles:
   - unmigratesite

Rol de inmigrante:

---

- include_tasks: "unmigrateonesite.yml"
  loop: "{{ wordpress_websites }}"

unmigrateonesite.yml:

- name: rsync site
  hosts: tag_aws_autoscaling_groupName_thename
  shell: rsync -avz /efs/www/{{new_folder}}/htdocs/ 172.31.18.217:/www/{{item.folder}}
  run_once: true
  register: rsync_out

- name: setup proxy host file
  template: src=proxy-host.j2 dest=/efs/nginx/sites-available/{{item.name}} owner=root group=root mode=0644
  hosts: tag_aws_autoscaling_groupName_thename
  notify:
    - restart nginx
  tags:
    - site
    - nginx-host-conf
    - nginx-temp-proxy

- name: setup wp-config.php WP_CONTENT_DIR on old server
  lineinfile: name=/www/{{ folder }}/{{ configuration_file }} regexp=WP_CONTENT_DIR line="define('WP_CONTENT_DIR', '/www/{{folder}}/app');"
  hosts: tag_Name_server_name
  ignore_errors: yes
  tags:
    - wp-config.php
    - wordpress
    - site
    - WP_CONTENT_DIR

Sin embargo, recibo un error:

    fatal: [54.219.216.237]: FAILED! => {"reason": "conflicting action statements: shell, hosts\n\nThe error appears to be in '/Users/jd/projects/bizinconline/ansible/roles/unmigratesite/tasks/unmigrateonesite.yml': line 22, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: rsync site\n  ^ here\n"}
    fatal: [54.193.100.223]: FAILED! => {"reason": "conflicting action statements: shell, hosts\n\nThe error appears to be in '/Users/jd/projects/bizinconline/ansible/roles/unmigratesite/tasks/unmigrateonesite.yml': line 22, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: rsync site\n  ^ here\n"}
    fatal: [13.57.52.221]: FAILED! => {"reason": "conflicting action statements: shell, hosts\n\nThe error appears to be in '/Users/jd/projects/bizinconline/ansible/roles/unmigratesite/tasks/unmigrateonesite.yml': line 22, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: rsync site\n  ^ here\n"}

Exactamente 3 veces, tantas veces como anfitriones hay.

¿Cómo puedo ejecutar algunas tareas en un grupo y otras en otro grupo de servidores?

Respuesta1

No puedo encontrar una manera de dirigir algunas tareas al sistema de origen y otras al sistema de destino. Intenté hacer esto agregando hosts: a cada tarea: (todas las tareas tienen una sola función)

Mi primera idea al leer esto es reemplazar tu hosts:por when: "'old_server' in group_names"owhen: "'new_server' in group_names"

Si eso no funciona, lo intentaré delegate_to, aquí estála documentación de la delegación

un sitio web a la vez

Si quieres ser realmente lento, considera usar serial: 1. O incluso --stepenel cli.

Respuesta2

Ejecuta tareas en diferentes hosts agrupando las tareas enobras de teatro, cada uno de los cuales puede definir el conjunto de hosts en los que se ejecutan sus tareas. Realmente no es válido configurar hosts para una tarea individual, lo cual es la causa inmediata del mensaje de error.

Aquí hay un ejemplo, con dos jugadas, cada una de las cuales define un conjunto diferente de anfitriones. Cada jugada define los hosts en los que se ejecutarán sus tareas.

 - name: configure new hosts
   hosts: tag_aws_autoscaling_groupName_thename
   strategy: free
   tasks:
    - name: rsync site
      shell: rsync -avz /efs/www/{{new_folder}}/htdocs/ 172.31.18.217:/www/{{item.folder}}
      run_once: true
      register: rsync_out
    
    - name: setup proxy host file
      template: src=proxy-host.j2 dest=/efs/nginx/sites-available/{{item.name}} owner=root group=root mode=0644
      notify:
        - restart nginx
      tags:
        - site
        - nginx-host-conf
        - nginx-temp-proxy

Arriba hay una obra que contiene dos tareas. A continuación se muestra una obra que contiene una tarea.

 - name: configure old hosts
   hosts: tag_Name_server_name
   strategy: free
   tasks:
    - name: setup wp-config.php WP_CONTENT_DIR on old server
      lineinfile: name=/www/{{ folder }}/{{ configuration_file }} regexp=WP_CONTENT_DIR line="define('WP_CONTENT_DIR', '/www/{{folder}}/app');"
      ignore_errors: yes
      tags:
        - wp-config.php
        - wordpress
        - site
        - WP_CONTENT_DIR

información relacionada