Ansible-Playbook核心元素及组件

1:核心元素

1:Hosts         执行的远程主机列表
2:Tasks         任务集
3:Variables     内置变量或自定义变量在playbook中调用
4:Templates     模板,可替换模板文件中的变量并实现一些简单逻辑的文件
5:Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
6:tags          标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

2:Hosts组件

Hosts:playbook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,须事先定义在主机清单中

# 前面将Ad-Hoc的时候也讲过如何匹配主机,这里其实也是类似的
1:10.0.0.10
2:10.0.0.10:10.0.0.11
3:ansible_agent_11
4:ansible_*
5:web:db
6:web:&db
7:web:!db
# 链接在这里:https://www.cnblogs.com/layzer/articles/ansible_simple.html

# 示例
- hosts: web:db

3:remote_user组件

remote_user: 可用于Host和task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用become_user指定sudo时切换的用户

---
- hosts: web
  remote_user: zhangsan
  become: true

  tasks:
    - name: Hello
      command: 'echo "Hello"'
      become: true
      become_user: zhangsan

# 运行代码时
[root@ansible-manager ~]# ansible-playbook hello.yaml -k
SSH password:   # 这里时sudo切换账户的密码

PLAY [web] **********************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************
ok: [10.0.0.12]
ok: [10.0.0.11]

TASK [Hello] *********************************************************************************************
changed: [10.0.0.11]
changed: [10.0.0.12]

PLAY RECAP ***********************************************************************************************
10.0.0.11          : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.12          : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

# 解释:-k 的意思时  --ask-pass 指定的是sudo时候的密码

4:task列表和action组件

play的主体部分是task list,task list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个task后,再开始第二个task
task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致
每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出

task两种格式:
(1):action: module arguments
(2):module: arguments 建议使用

注意:shell和command模块后面跟命令,而非key=value

# 示例
---
- hosts: web
  remote_user: root
  tasks:
    - name: install httpd
      yum: name=httpd 
    - name: start httpd
      service: name=httpd state=started enabled=yes
# 安装并启动httpd
# 运行代码
[root@ansible-manager ~]# ansible-playbook hello.yaml 

PLAY [web] **************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************
ok: [10.0.0.12]
ok: [10.0.0.11]

TASK [install httpd] **************************************************************************************************************

changed: [10.0.0.12]
changed: [10.0.0.11]

TASK [start httpd] **************************************************************************************************************
changed: [10.0.0.11]
changed: [10.0.0.12]

PLAY RECAP *************************************************************************************************************
10.0.0.11              : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.12              : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible-manager ~]# ansible all -m shell -a "netstat -nplt | grep 80"
10.0.0.12 | CHANGED | rc=0 >>
tcp6       0      0 :::80                   :::*                    LISTEN      39484/httpd         
10.0.0.11 | CHANGED | rc=0 >>
tcp6       0      0 :::80                   :::*                    LISTEN      3875/httpd

5:其它组件

某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers
任务可以通过"tags"打标签,可在ansible-playbook命令上使用-t指定进行调用

ShellScripts VS Playbook
# 使用shell安装apache并配置启动
#!/bin/bash
# 安装Apache
yum install --quiet -y httpd 
# 复制配置文件
cp /opt/httpd.conf /etc/httpd/conf/httpd.conf
cp /opt/blog.conf /etc/httpd/conf.d/
# 启动Apache,并设置开机启动
systemctl enable --now httpd 

# 使用Playbook实现安装apache并配置启动
---
- hosts: web
  remote_user: root
  tasks:
    - name: "安装Apache"
      yum: name=httpd
    - name: "复制配置文件"
      copy: src=/opt/httpd.conf dest=/etc/httpd/conf/
    - name: "复制配置文件"
      copy: src=/opt/blog.conf dest=/etc/httpd/conf.d/
    - name: "启动Apache,并设置开机启动"
      service: name=httpd state=started enabled=yes
posted @ 2022-07-08 23:28  Layzer  阅读(114)  评论(0编辑  收藏  举报