ansible-playbook 应用

本文介绍YAML标记语言的基本语法和数据结构,包括对象、数组和纯量的使用。深入探讨Ansible Playbook如何利用YAML文件来实现自动化任务,包括变量的自定义、传递和使用,以及如何通过不同的方法传递变量。

YAML标记语言
基本语法规则:
    大小写敏感
    使用缩进表示层级关系
    缩进时不允许使用tab键,只允许使用空格
    缩进的空格数目不重要,只要相同层级的元素左对齐即可
    # 表示注释
YAML支持的数据结构有三种:
    对象:
        对象的一组键值对,使用冒号结构表示。
        my_key:my_value
    数组:
        数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
        languages:
         - python
         - perl
         - ruby
    纯量:
        纯量是最基本的、不可再分的值
        字符串var:abc
        布尔值var:true
        整数var:123
        浮点数var:123.123
        Null var:~
        时间time:2000-12-12
        日期date:20:20:20
playbook用来完成将任务写到一个YAML格式的文件中,然后利用ansible-playbook进行调用该文件,从而实现了多条语句,可重复执行的效果,类似shell脚本的效果,ansible的playbook要借助YAML文件来实现,YAML文件扩展名通常为.yaml或者.ym

playbook的基础组件
    hosts:运行指定任务的目标主机,多主机用冒号分隔
    remote_user:在远程主机上执行任务的用户,可以全局指定,也可以单个任务指定
    sudo_user:表示以sudo方式运行任务时,切换为哪个用户身份运行
    tasks:任务列表

示例
- hosts: wyq
  remote_user: root
  tasks:
  - name:  add_group
    group: gid=8888 name=redhat state=present
  - name: copy
    copy: src=/etc/hosts dest=/tmp/

1.用户在.yml文件自定义变量
---
- hosts: wyq
  remote_user: root
  vars:
  - packname: "nmap"
  tasks:
  - name: uninstall nmap
    yum: name={{packname}} state=absent

2.通过-e参数传递的变量
---
- hosts: wyq
  remote_user: root
  tasks:
  - name: install package nmap
    yum: name={{pkname}} state=present

ansible-playbook vartest.yml -e pkname=nmap

3.通过主机或主机配置文件传递变量
主机
vim /etc/ansible/hosts 
[wyq]
192.168.254.228 package=nmap

---
- hosts: wyq
  remote_user: root
  tasks:
  - name: install package nmap
    yum: name={{package}} state=present

ansible-playbook vartest.yml

主机组
vim /etc/ansible/hosts 
[wyq]
192.168.254.228 
#192.168.254.244
#127.0.0.1

[wyq:vars]
packname=nmap

---
- hosts: wyq
  remote_user: root
  tasks:
  - name: install package nmap
    yum: name={{packname}} state=abesent

通过facts获取的系统的变量
即ansible wyq -m setup查到的变量
---
- hosts: wyq
  remote_user: root
  tasks:
  - name: save facts var in file
    shell: echo "{{ansible_default_ipv4.address}}" >> /tmp/vars.txt
    

Ansible 是一个强大的自动化工具,可以用于配置管理、应用部署、任务自动化等场景。Ansible 的 `ansible-playbook` 命令是其核心功能之一,用于执行定义在 YAML 格式文件中的 Playbook。以下是对 `ansible-playbook` 命令的使用方法及示例的详细说明。 ### 执行 Playbook 的基本命令 Playbook 文件通常以 `.yaml` 或 `.yml` 结尾,其中定义了多个任务(tasks)以及目标主机(hosts)等信息。执行 Playbook 的基本命令如下: ```bash ansible-playbook playbook_file.yaml ``` 该命令会按照 Playbook 文件中定义的任务顺序,依次在目标主机上执行操作 [^3]。 ### 检查 Playbook 文件的语法 在执行 Playbook 之前,建议先检查文件的语法是否正确,避免因格式错误导致任务失败: ```bash ansible-playbook playbook_file.yaml --syntax-check ``` 该命令会验证 YAML 文件的格式是否符合规范,确保没有语法错误 [^4]。 ### 列出 Playbook 中的任务 如果需要查看 Playbook 中定义的所有任务,可以使用以下命令: ```bash ansible-playbook playbook_file.yaml --list-tasks ``` 该命令会列出所有任务的名称,帮助用户快速了解 Playbook 的执行内容 。 ### 列出生效的主机 在执行 Playbook 之前,可以查看哪些主机将受到影响: ```bash ansible-playbook playbook_file.yaml --list-hosts ``` 该命令会列出所有将执行任务的主机或主机组 [^4]。 ### 从指定任务开始执行 在调试或重新执行 Playbook 时,可能需要从某个特定任务开始执行,而不是从头开始。可以使用 `--start-at-task` 参数实现: ```bash ansible-playbook playbook_file.yaml --start-at-task='Task Name' ``` 该命令会跳过之前的所有任务,直接从指定名称的任务开始执行 [^3]。 ### 传递参数和用户认证 在执行 Playbook 时,可能需要提供额外的参数或进行用户认证: - `-k` 或 `--ask-pass`:交互式输入 SSH 密码 - `-K` 或 `--ask-become-pass`:交互式输入 `sudo` 密码 - `-u`:指定远程执行的用户 例如,若目标主机需要密码认证,可以使用以下命令: ```bash ansible-playbook playbook_file.yaml -u username -k ``` 这将提示用户输入 SSH 密码 [^4]。 ### 示例:配置 `/etc/hosts` 文件 以下是一个简单的 Playbook 示例,用于将模板文件 `hosts.j2` 渲染并复制到目标主机的 `/etc/hosts` 文件中: ```yaml - name: Configure hosts file hosts: all_servers remote_user: root tasks: - name: Copy hosts.j2 template to target servers template: src: hosts.j2 dest: /etc/hosts ``` 执行该 Playbook 的命令如下: ```bash ansible-playbook hosts.yaml ``` 该 Playbook 会在 `all_servers` 组中的所有主机上执行任务,将本地的 `hosts.j2` 模板文件渲染后复制到 `/etc/hosts` 路径下 [^5]。 ### 调试 Playbook 在开发或维护 Playbook 时,调试功能可以帮助快速定位问题。Ansible Playbook Debugger 是一个开源工具,允许用户在 Playbook 执行过程中进行交互式调试。通过该工具,可以在任务执行时查看变量值、执行中间步骤等 [^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值