
Я переношу группу веб-сайтов из одной инфраструктуры в другую, включая довольно медленную операцию rsync. Процесс миграции включает изменения как в исходной, так и в целевой системах.
Из-за довольно медленной операции rsync, которая является частью процесса, я просматриваю файл var, содержащий подробную информацию о каждом веб-сайте, а затем выполняю задачи, необходимые для перемещения одного веб-сайта за раз.
Я не могу найти способ нацелить некоторые задачи на исходную систему, а некоторые на целевую. Я пробовал сделать это, добавляя hosts: к каждой задаче: (все задачи находятся в одной роли)
Мой план действий:
---
- hosts:
- tag_aws_autoscaling_groupName_thename
- tag_Name_server_name
vars_files:
- group_vars/all
roles:
- unmigratesite
unmigratessite роль:
---
- 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
Однако я получаю сообщение об ошибке:
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"}
Ровно 3 раза — столько раз, сколько хозяев.
Как можно запустить некоторые задачи для одной группы серверов, а некоторые — для другой группы?
решение1
Я не могу найти способ нацелить некоторые задачи на исходную систему, а некоторые на целевую. Я пробовал сделать это, добавляя hosts: к каждой задаче: (все задачи находятся в одной роли)
Первая мысль, которую я подумала, прочитав это, — заменить ваш hosts:
на when: "'old_server' in group_names"
илиwhen: "'new_server' in group_names"
Если это не сработает, я бы попробовал delegate_to
, вотдокументация по делегированию
один веб-сайт за раз
Если вы хотите быть действительно медленным, рассмотрите возможность использования serial: 1
. Или даже --step
вкли.
решение2
Вы запускаете задачи на разных хостах, группируя задачи вигры, каждый из которых может определять набор хостов, на которых выполняются его задачи. На самом деле некорректно задавать хосты для отдельной задачи, что является непосредственной причиной сообщения об ошибке.
Вот пример с двумя играми, каждая из которых определяет свой набор хостов. Каждая игра определяет хосты, на которых будут выполняться ее задачи.
- 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
Выше представлена одна пьеса, содержащая два задания. Ниже представлена одна пьеса, содержащая одно задание.
- 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