0
点赞
收藏
分享

微信扫一扫

Ansible配置文件与yaml语法

梦为马 05-06 06:00 阅读 23

一、ansible 的配置文件优先级:

优先级最高的是ANSIBLE_CONFIG 环境变量

优先级其次的是当前工作目录下的 ansiblecfg

优先级较次的是当前用户家目录下的.ansible.cfg 隐藏文件

优先级最低的是/etc/ansible/ansible.cfg 全局默认文件

1、ansible 的配置文件:

[defaults]: 通用配置项

[inventory]: 与主机清单相关的配置项

[privilege_escalation]: 特权升级相关的配置项

[paramiko_connection]: 使用 paramiko 连接的相关配置项,Paramiko 在 RHEL6以及更早的版本中默认使用的 ssh 连接方式

[ssh_connection]: 使用 OpenSSH 连接的相关配置项,OpenSSH是Ansible 在RHEL6 之后默认使用的 ssh 连接方式

[persistent_connection]: 持久连接的配置项

[accelerate]: 加速模式配置项

[selinux]: selinux相关的配置项

[colors]: ansible命令输出的颜色相关的配置项

[diff]: 定义是否在运行时打印 diff(变更前与变更后的差异)

2、ansible 运行任务的方式:

①.使用 ad-hoc 运行任务——>ansible 的临时指令 用来执行简单的任务

②.使用 playbook 运行任务——>ansible 的剧本 用来执行复杂的任务

注意:在ansible的导航器中,也就是容器版本中ansible的 ad-hoc 已经废除

ad-hoc 的执行:

语法格式:

ansible  主机/主机组  -m 模块   -a'模块的参数‘  ansible 的参数 

ansible 的模块:

ansible-doc  -l       列出当前系统中 ansible 的所有模块

ansible-doc  -s       模块名杳看模块的参数

ansible-doc 模块名    查看模块的详细信息 包括用法

3、ansible 的四大命令执行模块:

command、shell、raw、script   四个模块专门用来执行 linux 的指令

ansible 默认使用command模块作为默认的命令执行模块

①command  有四个例外,如果命令中出现了<、>、&、|  符号则command 无法执行

②shel 模块   相当于在本机执行 bashshel 一样,可以让 ansible 执行 Linux 的指令,并且支持一些高阶参数,例如 chdir 可以在执行命令前切换到指定的目录,creates、removes等

③raw 模块   也相当于在本机执行命令,但是缺少chdir、creates、removes的高阶参数

creates 当文件存在时命令不执行 ;removes 当文件不存在时命令不执行

④script模块  将主控端的shell复制到被控端执行(没有将脚本文件拷贝到对端执行,而是将文件中 shel 的内容复制到被控端执行)

二、Ansible Playbook:

playbook 是一系列 ansible 命令的集合,通过 playbook的高级特性可以完成很多复杂的自动化任务,比如在playbook中可以进行任务的判断、循环、还可以将任务的执行结果作为变量,以及从外部或者其他位置获得变量;让playbook更加的灵活

playbook 语言:

playbook 使用yaml作为配置语言,yaml是非标记型语言(其实还是一种标记型语言),这类语言,通俗易懂;并且不需要掌握编程技能就可以写好这个配置

1、yaml的约束:

①.大小写敏感——>变量的大小写是完全不同的两个变量

②.使用缩进表示层级关系

③.只能使用空格进行缩进不能使用tab(从RHEL8.4开始会将yaml中的tab 转成空格,个人感觉是 vim的版本有关系,vim的版本更高了)

④.空格的数量不重要,相同的元素向左对齐很重要

⑤.使用#符号注释内容,注释一整行

2、yaml的数据类型:

纯量: 不可再分的值

数组(序列、列表): 一组有次序的值,通常使用短横线开头 “-”

对象(字典/哈希/映射): 键值对key=vaule用冒号进行表示,也就是key 和 vaule 之间使用冒号分隔,并且 vaule 前需要使用空格

3、playbook的示例需求:

①.在所有节点上安装 apache

②.在所有节点上生成一个名为/var/www/html/index.html 的文件内容为 hello rhce

③.apache 服务需要开机自启动,且当前立即启动

④.配置 firewalld 防火墙允许 web服务器的规则

- name: configure website
  host: all
  remote_user: bob
  tasks: 
               - name: install httpd
                 yum: 
                       name: httpd
                       state: present
               - name: create file for index.html
                 copy: 
                       content: "hello rhce\n"
                       dest: /var/www/html/index.html
                       mode: 777
               - name: start service
                 systemd:
                       name: httpd
                       state: started
                       enabled: yes
               - name: enable firewalld for 80/tcp
                       service: http
                       permanent: yes
                       immediate: yes
                       state: enabled

4、ansible-playbook的执行选项:

-v   v越多信息越详细

syntax-check  检查语法错误 

-C      测试运行 playbook,测试运行下不会对目标造成真正的影响,则测试剧本能否成功执行

5、playbook 的定义:

playbook由一个或者多个play组成的列表,而一个 play就是一组任务的集合,一个 play 中 tasks 的任务列表,就是 play 中要完成的需求,而每一个需求或者说每一个 tasks的任务都是对一个模块的调用,因此将play 根据一定的顺序或者是逻辑组合在一起完成一个复杂的大任务,我们将其称为playbook的编排

6、playbook 的结构

Targetsection: 目标、指的是 play中需要定义的远程主机、远程用户、是否开启提权、是否需要密码连接等,都在此定义,如果没有定义则使用 ansible.cfg 中默认的配置,如果用户进行了定义,则以用户定义的为准

Variable section: 变量、指的是在 playbook的执行过程中,需要传递给任务或者是其他插件的变量,在此定义,该段落专门用来给playbook定义变量

Tasksection: 任务、指的是 play中所有需要执行的任务在此定义,也就是 play 的任务列表

Handler section: 特定任务、该任务是有条件执行的任务,只有当达到特定条件是该任务才会被触发,一般情况下该任务不会自动执行;该任务在所有tasks任务执行完成后,根据触发的条件来决定是否执行

7、playbook 的任务列表:

①.任务列表中的所有任务都是从上向下执行

②.任务列表中任务一旦在某个主机上执行失败,则 playbook 接下来的任务不会在该主机上执行,也就是在该主机上停止

③.任务列表中有任务执行失败,只需要修复该任务后继续执行playbook即可完成失败的任务,这是因为 ansible 具有幂等性

幂等性:对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的

解决 ansible 的任务报错:

命令执行模块报错(shel、raw): 可以使用逻辑或 通过 || /usr/bin/true 让其返回值永远为零,则任务不会失败

其他模块执行报错: file、user等模块通过 ignore_errors:true 来忽略报错

 







举报

相关推荐

0 条评论