zl程序教程

您现在的位置是:首页 >  其它

当前栏目

ansible之Playbook

Ansible PlayBook
2023-06-13 09:12:47 时间

playbook 是什么?

  • playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中一系列tasks,可以让远程主机达到预期状态,也可以说,playbook字面意思是剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。
  • ansible使用playbook来管理自动化task,playbook是yaml格式的文件,其基本内容可以认为是多条ansible的ad-hoc的语句组成。我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成。而playbook就是组织多个task的容器,他的实质就是一个文件,是用yaml(Yet Another Markup Language)语言编写的文件,有着特定的组织格式。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便,YAML语法能够简单的表示散列表,字典等数据结构。
  • playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。

ansible-playbook 常用命令

ansible-playbook playbook.yml [options]

# ssh 连接的用户名
-u REMOTE_USER, --user=REMOTE_USER

# ssh登录认证密码
-k, --ask-pass    

# sudo 到root用户,相当于Linux系统下的sudo命令
-s, --sudo       
    
# sudo 到对应的用户
-U SUDO_USER, --sudo-user=SUDO_USER   
 
# 用户的密码(—sudo时使用)
-K, --ask-sudo-pass     

# ssh 连接超时,默认 10 秒
-T TIMEOUT, --timeout=TIMEOUT

# 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-C, --check      

# 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-e EXTRA_VARS, --extra-vars=EXTRA_VARS    

# 进程并发处理,默认 5
-f FORKS, --forks=FORKS    

# 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-i INVENTORY, --inventory-file=INVENTORY   

# 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
-l SUBSET, --limit=SUBSET    

# 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-hosts  

# 列出该 playbook 中会被执行的 task
--list-tasks   

# 私钥路径
--private-key=PRIVATE_KEY_FILE   

# 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--step    

# 只检测 playbook 文件语法是否有问题,不会执行该 playbook
--syntax-check  

# 当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
-t TAGS, --tags=TAGS   

# 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
--skip-tags=SKIP_TAGS   

# 输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
-v, --verbose   

ansible 执行ping命令 与 ansible-playbook 执行ping命令

  • ansible 执行ping命令
[vagrant@controller my_ansible_working_dir]$ ansible all -m ping
node3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
  • ansible-playbook 执行ping命令
[vagrant@controller my_ansible_working_dir]$ cat site1.yml
---

- name: ping module
  hosts: all

  tasks:
    - name: ping test
      ping:
[vagrant@controller my_ansible_working_dir]$ ansible-playbook site1.yml

PLAY [ping module] ********************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************
ok: [node3]
ok: [node2]
ok: [node1]

TASK [ping test] **********************************************************************************************************************
ok: [node3]
ok: [node2]
ok: [node1]

PLAY RECAP ****************************************************************************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0