我正在将一组网站从一个基础架构迁移到另一个基础架构,包括相当慢的 rsync 操作。迁移过程包括对源系统和目标系统的更改。
由于该过程的一部分 rsync 操作相当慢,我正在循环一个包含每个网站详细信息的 var 文件,然后运行一次移动一个网站所需的任务。
我无法找到一种方法来针对源系统中的一些任务和目标系统中的一些任务。我已经尝试通过添加主机来做到这一点:每个任务:(所有任务都在一个角色中)
我的剧本:
---
- hosts:
- tag_aws_autoscaling_groupName_thename
- tag_Name_server_name
vars_files:
- group_vars/all
roles:
- unmigratesite
取消迁移站点角色:
---
- 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 次 - 与主机数量一样多。
如何对一组服务器运行一些任务,而对另一组服务器运行一些任务?
我读到这篇文章的第一个想法是
hosts:
用when: "'old_server' in group_names"
或替换你的when: "'new_server' in group_names"
如果这不起作用,我会试一试
delegate_to
,这是代表团文档如果你想真的很慢,可以考虑使用
serial: 1
. 甚至--step
在cli中。您可以通过将任务分组到 play中来在不同的主机上运行任务,每个 play 都可以定义其任务运行的主机集。为单个任务设置主机实际上是无效的,这是错误消息的直接原因。
这是一个例子,有两场戏,每场都定义了一组不同的主持人。每个播放定义其任务将在其上运行的主机。
上面是一个包含两个任务的游戏。下面是一个包含一项任务的游戏。