AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
# :-: Playbooks 介绍 [TOC] Playbooks 是用完成许多由 ansible 命令行组合的 YAML 描述文件 ### 执行一个 playbook ``` ansible-playbook XXX.yml ansible-playbook XXX.yml --list-host //查看影响哪些机器 ``` ### Playbook 语言示例 Playbook 是由多个 `play` 组成。 一个 `play` 包含了被定义好的主机,和许多系列 `task`,每一个`task`对应一个`ansible` 任务。 下面的示例中,仅包含了一个`play` ``` --- - hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: pkg-httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: // 执行到notify时,会通知执行对应的handlers - restart apache - name: ensure apache is running service: name=httpd state=started handlers: - name: restart apache // 无论这个handlers被notify通知多少次 //都只会在执行完所有task后,才会执行一次 service: name=httpd state=restarted ``` ### Playbook 基础 ##### 执行任务用户的选择 1. 可以为每一个play ,分别的选择目标主机和用户身份去执行task ``` --- - host: group-1 remote_user: root ``` 2. 分别在每一个task中定义远程用户 ``` --- - hosts: group-1 remote_user: root tasks: - name: test connect ping: remote_user: zwh ``` 3. 使用 `sudo` 执行命令 在 play 中执行 sudo ``` --- - hosts: group-1 remote_user: zwh sudo: yes ``` 在每一个task中执行 sudo ``` --- - hosts: group-1 remote_user: zwh tasks: - service: name=ssh state=restarted sudo: yes ``` 使用 sudo 切换到 其他用户 ``` --- - hosts: group-1 remote_user: zwh sudo: yes sudo_user: other_user ``` ##### tasks列表 1、`tasks`会在`play`所选中的所有主机中进行任务,一旦某一个`task`执行过程中某一台主机出现错误,则在接下来所有的`tasks`中将这台主机剔除掉。 2、一个`task`会执行一个模块任务。 3、每一个`task`必须有一个名称`name`,这样在运行`playbook`时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个`task`的。 ### 使用变量 ``` --- - hosts: group-1 vars: service_name: 80 tasks: - name: use var value service: name={{ service_name }} state=restarted ``` ### Handlers 在发生改变时执行的操作 比如,当一个服务的配置文件发生更改时,需要重启这个服务来生效 <br/> 当更新完这个配置文件后,就会通过`notify`来通知`handlers`在`tasks`完成后来进行相应的操作, 但是不管有多少次`notify`通知执行`handlers`,里面相应的操作只会执行一次。 > handlers 会按照声明的顺序执行 ``` tasks: - name: template configuration file template: src=template.j2 dest=/etc/foo.conf notify: - restart memcached - restart apache handlers: - name: restart memcached service: name=memcached state=restarted - name: restart apache service: name=apache state=restarted ```