ansible-playbook使用总结

文章详细介绍了AnsiblePlaybook的基础知识,包括如何使用`ansible-playbook`命令,以及YAML文件的语法,如循环(with_items,with_dict,with_fileglob,with_lines,with_nested)和变量的使用。还提到了注册结果集(register)和变量的定义与优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ansible-playbook使用总结

大纲

  • 基础知识
  • 基础使用方式
  • playbook yaml文件语法
  • 变量
  • roles

基础知识

Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合.

基础使用方式

基础使用方式
ansible-playbook t1.yml 

检查yml文件语法格式
ansible-playbook -C t1.yml 

查看yml中有哪些task
ansible-playbook  t1.yml --list-tasks
 
查看yml中有哪些host主机
ansible-playbook  t1.yml --list-hosts

查看yml中有哪些tag
ansible-playbook  t1.yml --list-tags

playbook yaml文件语法

见 playbook_shell文件夹:《playbook语法说明yml.yml》

循环

循环的作用是让一个task多次执行,而不需要配置多个task 详细见**《loop_demo.yml》**

循环的配置项:

  • with_items
  • with_dict
  • with_fileglob
  • with_lines
  • with_nested

with_items 迭代列表

with_dict 迭代Map

with_fileglob 迭代文件

例如,拷贝一堆用通配符匹配出来的文件到各远程主机上。

- hosts: centos
      tasks: 
        - copy: src="{{item}}" dest=/tmp/
          with_fileglob:
            - /tmp/*.sh
            - /tmp/*.py

注意,通配符无法匹配"/",因此无法递归到子目录中,也就无法迭代子目录中的文件

with_lines迭代行

with_lines很好用,可以将命令行的输出结果按行迭代

例如,find一堆文件出来,copy走。

- hosts: localhost
      tasks:
        - copy: src="{{item}}" dest=/tmp/yaml
          with_lines:
            - find /tmp -type f -name "*.yml"  #相当于把命令的结果集作为item的每一项

with_nested嵌套迭代

相当于两个for循环

  - hosts: localhost
      tasks:
        - debug: msg="{{item[0]}} & {{item[1]}}"
          with_nested: 
            - [a,b]
            - [1,2,3]

结果将得到"a & 1"、“a & 2”、“a & 3”、“b & 1”、"b & 2"和"b & 3"共6个结果。

register 结果集

register用于注册一个变量,保存命令的结果(shell或command模块),这个变量可以在后面的task、when语句或模板文件中使用

详情见《register_demo.yml》

变量

内置变量

使用 setup 模块可以看到所有支持的内置变量

# 查看所有内置变量
ansible all -m setup 

# 过滤
ansible all -m setup -a "filter=changed"

设置变量的方式

在playbook yml脚本文件中可以使用 {{ }} 来使用变量

在这里插入图片描述

1注意:使用变量前需要在yml文件中先定此文件需要使用的变量

在这里插入图片描述

2注意:使用变量作为文件路径的时候不要有空格
在这里插入图片描述

**变量定义的位置: **

  • 1 /etc/ansible/hosts 文件中 在不同的主机后面
  • 2 单独的变量文件 使用vars_files:指定
  • 3 yml文件内部 使用vars:指定
  • 4 执行命令的时候 -e ‘var1=xx’ -e ‘var2=yy’ 或者 -e ‘var1=xxx 空格 var2=yyy’

假如yml配置文件中存在变量 {{var1}} {{var2}}

- name: write log1
  shell: chdir=/medcrab/tmp/ttcopy (echo $(date) >> {{var1}}.log)
- name: write log2
  shell: chdir=/medcrab/tmp/ttcopy (echo 4456 >> {{var2}}.log)

/etc/ansible/hosts文件配置变量

/etc/ansible/hosts配置的变量可以与服务器ip绑定,但是变量的优先级最低
在这里插入图片描述

**ansible-playbook t1.yml 命令执行以后 **

在这里插入图片描述

可以ansible根据/etc/ansible/hosts中不同的ip 使用了不同的配置

单独的变量文件

单独创建一个配置项变量key=value 的yml文件
在这里插入图片描述

在playbook剧本中使用vars_files: 指定变量文件 注意路径
在这里插入图片描述

**ansible-playbook t1.yml 命令执行以后 **
在这里插入图片描述

yml文件内部 使用vars:指定

例如在playbook yml文件内部使用vars: 指定变量
hosts: g2
remote_user: 
vars: 
  var1: jimliu # 配置的变量
  var2: xuting

执行命令的时候 -e

ansible-playbook -e ‘var1=cctv’ -e ‘var2=qtp’ t1.yml 运行的时候指定参数
在这里插入图片描述

**变量的优先顺序: -e > vars:=vars_files: >hosts **

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值