设为首页 收藏本站
查看: 1404|回复: 0

[经验分享] ansible 的任务委派功能(delegate_to)

[复制链接]

尚未签到

发表于 2018-7-30 12:03:07 | 显示全部楼层 |阅读模式
  今天遇到这样一个需求:在对A服务器执行一个操作任务的时候,同时也要把该操作任务在B服务器执行,如在A服务器添加一条hosts 记录: 1.1.1.1 abc.com 。这个必须是要在一个 playbook 完成,而且B服务器只需要执行这一个操作任务,其它操作任务不需要执行。也就是A服务器这一个操作任务与B服务器有依赖关系。
  一开始这个需求可能通过ansible 是完成不了,但是在查阅了 ansible 文档后,发现ansible的任务委派(delegate_to)功能可以很好的完成这一要求。先看看ansible 官网文档对任务委派功能的描述:
Delegation
  New in version 0.7.
  This isn’t actually rolling update specific but comes up frequently in those cases.

  If you want to perform a task on one host with reference to other hosts, use the ‘delegate_to’ keyword on a task. This is>  Ansible默认在配置的机器上执行任务,当你有一大票机器需要配置或则每个设备都可达的情况下很有用。但是,当你需要在另外一个Ansible控制机器上运行任务的时候,就需要用到任务委派了。
  使用delegate_to关键字就可以委派任务到其他机器上运行,同时可用的fact也会使用委派机器上的值。下面的例子使用get_url到所有web服务器上下载配置:
  ---
  - name: Fetch configuration from all webservers
  hosts: webservers
  tasks:
  - name: Get config
  get_url: dest=configs/` ansible_hostname ` force=yes url=http://` ansible_hostname `/diagnostic/config
  delegate_to: localhost
  当你委派给本机的时候,还可以使用更快捷的方法local_action,代码如下:
  ---
  - name: Fetch configuration from all webservers
  hosts: webservers
  tasks:
  - name: Get config
  local_action: get_url dest=configs/` ansible_hostname`.cfg url=http://` ansible_hostname`/diagnostic/config
  你可以委派任务给设备清单上的任意机器,下面是使用任务委派的一些场景:

  •   在部署之前将一个主机从一个负载均衡集群中删除
  •   当你要对一个主机做改变之前去掉相应dns的记录
  •   当在一个存储设备上创建iscsi卷的时候
  •   当使用外部的主机来检测网络出口是否正常的时候
  下面描述下我的场景,如我要在192.168.1.1 服务器添加一个hosts 记录 "1.1.1.1 www.abc.com" ,同时也要把这个hosts 记录写到192.168.1.2
  ansible hosts 192.168.1.1 文件内容
  [all]
  192.168.1.1
  ansible task 文件内容(192.168.1.1.yml):
  ---
  - name: add host record
  shell: "echo "1.1.1.1 www.abc.com" >> /etc/hosts"
  - name: add host record
  shell: "echo "1.1.1.1 www.abc.com" >> /etc/hosts"
  delegate_to: 192.168.1.2
  # 添加上面这一行,就可以了
  执行playbook
  ansible-playbook -i 192.168.1.1.host 192.168.1.1.yml

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543561-1-1.html 上篇帖子: ansible内置模块使用 下篇帖子: Linux安装配置Ansible
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表