Ansible executa certas tarefas em um grupo de servidores, outras em outro

Ansible executa certas tarefas em um grupo de servidores, outras em outro

Estou migrando um grupo de sites de uma infraestrutura para outra, incluindo uma operação rsync bastante lenta. O processo de migração inclui alterações nos sistemas de origem e de destino.

Devido a uma operação rsync bastante lenta que faz parte do processo, estou percorrendo um arquivo var que contém os detalhes de cada site e, em seguida, executo as tarefas necessárias para mover um site por vez.

Não consigo encontrar uma maneira de direcionar algumas tarefas no sistema de origem e outras no sistema de destino. Eu tentei fazer isso adicionando hosts: a cada tarefa: (todas as tarefas estão em uma única função)

Meu manual:

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

  roles:
   - unmigratesite

função de não migração:

---

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

desmigraronesite.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

No entanto, estou recebendo um erro:

    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"}

Exatamente 3 vezes - quantas vezes houver hosts.

Como posso executar algumas tarefas em um grupo e outras em outro grupo de servidores?

Responder1

Não consigo encontrar uma maneira de direcionar algumas tarefas no sistema de origem e outras no sistema de destino. Eu tentei fazer isso adicionando hosts: a cada tarefa: (todas as tarefas estão em uma única função)

Minha primeira ideia ao ler isto é substituir o seu hosts:por when: "'old_server' in group_names"ouwhen: "'new_server' in group_names"

Se isso não funcionar, eu tentaria delegate_to, aqui estáa documentação da delegação

um site por vez

Se você quiser ser muito lento, considere usar serial: 1. Ou mesmo --stepemo cli.

Responder2

Você executa tarefas em hosts diferentes agrupando-as emtocam, cada um dos quais pode definir o conjunto de hosts em que suas tarefas são executadas. Não é realmente válido definir hosts para uma tarefa individual, que é a causa imediata da mensagem de erro.

Aqui está um exemplo, com duas jogadas, cada uma definindo um conjunto diferente de anfitriões. Cada jogada define os hosts nos quais suas tarefas serão executadas.

 - 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

Acima está uma peça contendo duas tarefas. Abaixo está uma peça contendo uma tarefa.

 - 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

informação relacionada