Ansible führt bestimmte Aufgaben auf einer Servergruppe aus, andere auf einer anderen

Ansible führt bestimmte Aufgaben auf einer Servergruppe aus, andere auf einer anderen

Ich migriere eine Gruppe von Websites von einer Infrastruktur zu einer anderen, einschließlich eines ziemlich langsamen rsync-Vorgangs. Der Migrationsprozess umfasst Änderungen sowohl an den Quell- als auch an den Zielsystemen.

Aufgrund eines ziemlich langsamen rsync-Vorgangs, der Teil des Prozesses ist, durchlaufe ich eine Var-Datei, die die Details für jede Website enthält, und führe dann die Aufgaben aus, die zum Verschieben einer Website nach der anderen erforderlich sind.

Ich kann keine Möglichkeit finden, einige Aufgaben auf das Quellsystem und einige auf das Zielsystem auszurichten. Ich habe versucht, dies zu tun, indem ich zu jeder Aufgabe Hosts: hinzugefügt habe: (alle Aufgaben haben eine einzige Rolle)

Mein Spielbuch:

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

  roles:
   - unmigratesite

Unmigratesite-Rolle:

---

- 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

Ich erhalte jedoch eine Fehlermeldung:

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

Genau 3 mal – so oft wie es Gastgeber gibt.

Wie kann ich einige Aufgaben für eine Gruppe und einige für eine andere Gruppe von Servern ausführen?

Antwort1

Ich kann keine Möglichkeit finden, einige Aufgaben auf das Quellsystem und einige auf das Zielsystem auszurichten. Ich habe versucht, dies zu tun, indem ich zu jeder Aufgabe Hosts: hinzugefügt habe: (alle Aufgaben haben eine einzige Rolle)

hosts:Meine erste Idee beim Lesen dieses Artikels ist, Ihr durch when: "'old_server' in group_names"oder zu ersetzen.when: "'new_server' in group_names"

Wenn das nicht funktioniert, würde ich es mit versuchen delegate_to, hier istdie Delegationsdokumentation

eine Website nach der anderen

Wenn Sie wirklich langsam sein wollen, sollten Sie verwenden serial: 1. Oder sogar --stepindie CLI.

Antwort2

Sie führen Aufgaben auf verschiedenen Hosts aus, indem Sie die Aufgaben inTheaterstücke, von denen jeder die Hosts definieren kann, auf denen seine Aufgaben ausgeführt werden. Es ist nicht wirklich gültig, Hosts für eine einzelne Aufgabe festzulegen, was die unmittelbare Ursache der Fehlermeldung ist.

Hier ist ein Beispiel mit zwei Spielen, die jeweils einen anderen Satz von Hosts definieren. Jedes Spiel definiert die Hosts, auf denen seine Aufgaben ausgeführt werden.

 - 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

Oben ist ein Spiel mit zwei Aufgaben. Unten ist ein Spiel mit einer Aufgabe.

 - 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

verwandte Informationen