
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 --step
enel 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