小机灵鬼|自动化运维工具:ansible(二)( 二 )

  • webserver:&dbserver 两个组的交集
  • webservers:!dbserver 在webserver组 , 但不在dbserver组
  • all /etc/ansible/hosts主机清单中的所有主机
  • ---- hosts: all#主机清单中的所有主机remote_user: roottasks:#任务......(7)task列表和action
    ?play的主体部分是task list , task list中的各任务按次序逐个在hosts中指定的所有主机上执行 , 即在所有主机上完成第一个任务后再开始第二个 。 在运行自下而下某playbook时 , 如果中途发生错误 , 所有已执行任务都将回滚 , 因此 , 在更正playbook后重新执行一次即可 。
    ?task的目的是使用指定的参数执行模块 , 而在模块参数中可以使用变量 。 模块执行是幂等的 , 这意味着多次执行是安全的 , 因为其结果均一致 。
    ?每个task都应该有其name , 用于playbook的执行结果输出 , 建议其内容尽可能清晰地描述任务执行步骤 , 如果未提供name , 则action的结果将用于输出 。
    tasks:任务列表
    格式:
    • action: module arguments
    • module: arguments #建议使用
    ?注意:shell和command模块后面跟命令 , 而非key=value
    某任务的状态在运行后为changed时 , 可通过"notify"通知给相应的 handlers
    handlers(触发器)和notify(通知)结合使用触发条件Handlers是task列表 , 这些task与前述的task并没有本质上的不同 , 用于当关注的资源发生变化时 , 才会采取一定的操作Notify此action可用于在每个play的最后被触发 , 这样可避免多次有改变发生时每次都执行指定的操作 , 仅在所有的变化发生完成后一次性地执行指定操作 。 在notify中列出的操作称为handler , 也即notify中调用handler中定义的操作 。
    #编辑httpd.yml , 实现httpd的安装 , 配置文件更改 , 服务启动#问题:第一次启动后 , 更改httpd的配置文件 , 第二次再执行 , 会因为之前启动了 , 而无法重启服务#解决:通过设置"notify" , 当某任务的状态在运行后为changed时 , 通知给相应的 handlers, 触发相应的命令[root@ansible ansible]#vim httpd.yml ---- hosts: allremote_user: roottasks:- name: install httpd packageyum: name=httpd- name: copy conf filecopy: src=http://kandian.youth.cn/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: restart service- name: start serviceservice: name=httpd state=started enabled=yeshandlers:- name: restart serviceservice: name=httpd state=restarted
    小机灵鬼|自动化运维工具:ansible(二)?任务可以通过"tags"打标签 , 而后可在ansible-playbook命令上使用-t指定进行调用
    [root@ansible ansible]#ansible all -m yum -a 'name=httpd state=absent'[root@ansible ansible]#ansible all -m shell -a 'rpm -q httpd'[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.If you need to use command because yum, dnf or zypper is insufficient you can add'warn: false' to this command task or set 'command_warnings=False' in ansible.cfgto get rid of this message.192.168.100.20 | FAILED | rc=1 >>未安装软件包 httpd non-zero return code192.168.100.10 | FAILED | rc=1 >>未安装软件包 httpd non-zero return code
    小机灵鬼|自动化运维工具:ansible(二)通过ansible卸载httpd , 在通过tags标签指定只下载httpd


    推荐阅读