Ansible02-Ad-Hoc

Ansible-Ad-Hoc

​ ad-hoc —— 临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行

简单的命令——一条命令。对于复杂的命令则为 playbook。

语法(syntax):

ansible  <pattern>  -m <module_name>  -a <arguments>
  pattern: inventory文件里定义的主机组名,主机名,IP,别名等,all表示所有的主机,支持通配符,正则
           : - 冒号,多个组,组名之间用冒号隔开
           *web* - 组名或主机名中含web的
           webservers[0] - webservers组中的第一台主机, -1表示最后一台主机, 支持切片(正):[1:2]表示组中的第二台和第三台

  -m module_name: 模块名称,默认为command
  -a arguments: 传递给模块的参数
  -i file_name: 指定inventory文件, 默认为/etc/ansible/hosts
  -k  : 询问密码.如果没有传密钥到被管理端,必须要接此选项

配置过程:

  1. 在控制节点安装ansible
  2. 编辑主机清单文件,加入被管控节点
  3. 在控制节点生成密钥,把公钥传到所有的被控制节点(可选)

帮助信息查看
# ansible-doc -l # 查看所有模块信息
# ansible-doc module_name # 查看模块帮助信息

Ansilble-Modules

​ 常用模块介绍:

  1. setup: 查看远程主机的基本信息 - Facts - 用于采集被管理主机信息

收集可用的facts,收集每个节点的相关信息, 如: 架构信息,IP,时间,域名,网卡,MAC,主机名,CPU等信息。
物理内存容量 ansible_memtotal_mb
CPU型号 ansible_processor
CPU核心数 ansible_processor_cores
操作系统类型 ansible_os_family
操作系统内核 ansible_kernel
硬盘挂载名及容量 ansible_mounts
服务器主机名 ansible_nodename
服务器ipv4地址 ansible_all_ipv4_addresses
常用选项:
filter: 仅列出匹配到的facts, 默认值为*

  1. ping: 测试远程主机的运行状态
 3. file: 文件管理
相关选项如下:
force:需要在两种情况下强制创建软链接,一种是源文件不存在;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径,还可以写成name或dest
recurse:递归设置文件的属性,只对目录有效,有两个选项:yes|no     True|False
src:被链接的源文件路径,只应用于state=link或state=hard的情况
**state**:
    directory:如果目录不存在,就创建目录
    file:即使文件不存在,也不会被创建. 默认值,主要用于改变文件的属性
    link:创建软链接
    hard:创建硬链接
    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
    absent:删除文件
  1. copy: 把主控端的文件复制到远程主机
      backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的内容
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync
  1. fetch: 从远程某主机获取(复制)文件到本地
相关选项:
dest:用来存放文件的目录(本地路径)
src:在远程拉取的文件,并且必须是一个file,不能是目录
  1. shell: shell命令

​ ansible默认使用的模块是command,支持多数shell命令,但不支持某些shell变量及管道,如果要使用,用shell模块

  1. user: 用户管理
      相关选项:
	name: 要操作的用户名
	uid:设置用户的UID
	group:设置用户的基本组
	groups:设置用户的附加组,如果设置为空,则将用户从所有附加组中退出来
	shell:设置用户登录shell   
	home:设置用户家目录
	state:
	    present: 创建   默认值
	    absent: 删除
	remove: 当state=absent时,使用remove=yes干净的删除,默认值为no
  1. cron: 计划任务管理
      相关选项:
	**name**: 要管理的计划任务条目名称
	minute: 分
	hour: 时
	day: 日
	month: 月
	weekday: 周
	job: 要执行的命令
	user: 用户
	state: 
		present: 创建 默认值
		absent: 删除, 会列出现有的所有的任务
  1. script: 将本地脚本传输到远程执行
      相关选项:
		chdir: 在执行脚本前先cd到此目录下
		creates: 接一个文件名,如果此文件已存在,将不执行脚本
		removes: 接一个文件名,如果此文件不存在,将不执行脚本
		
		-m script -a ‘/path/to/script’
  1. service: 服务管理(el7:systemd)
      相关选项:
		name: 服务名称
		state:
			started: 启动服务
			stopped: 停止服务
			restarted: 重启服务
			reloaded: 重新加载配置文件
		enabled: 是否开机启动  yes | no
  1. lineinfile: 文件编辑
      相关选项:
	dest: 指定要修改的文件
  regexp: 正则匹配模式
  line: 要增加或者修改的内容
    insertbefore: 
    insertafter:
    firstmatch: 配合insertbefore或insertafter, 如果设置了,在第一次正则匹配到的行进行插入
  state:
    absent: 表示删除,当匹配到时进行删除
    present: 表示增加,当匹配到时进行修改,当没有匹配到时在最后增加一行,默认
  backrefs:
    no: 表示如果没有匹配到,则增加line;如果匹配成功,则替换line, 默认
    yes: 表示如果没有匹配到,则不变line;如果匹配成功,则替换line;
  backup:  
    no:  不备份原文件
    yes: 备份原文件
  1. yum: 使用yum管理软件包
      相关选项:
	name:表示要安装软件包的名字,可以带上版本号
state:
    present | installd: 安装  默认
    lastest:  安装最新版
    absent | removed: 删除
  1. package: 使用操作系统相应的软件包管理工具模块处理,如centos: yum, ubuntu: apt
相关选项:
        name: 要管理的包名,可以带上版本号,必选项
        state:  必选项
            present: 安装
            absent: 删除

  1. unarchive: 解压缩
默认情况下,此模块会将本地压缩包拷贝到远程机器上解压,当设置了remote_src=yes选项表示解压远程主机上的压缩包
    相关选项:
        src: 必选项, 要解压的包名
        dest: 必选项, 解压到哪个目录下
        remote_src: 
            yes: 解压远程主机上的包
            no: 将管理机上的包传到远程主机上解压
  1. template: 基于jinja2模板创建配置文件

Ansible-PlayBook

1. Playbook简介

      Playbook 是 ansible 用于配置,部署,和管理被控节点的剧本
通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态
playbook 就像 Ansible 控制器给被控节点列出的的一系列 to-do-list ,而被控节点必须要完成 
也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演
在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情
可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等
如果说 Ansible 模块是工作中的工具的话,那么 playbooks 就是方案

2. Playbook使用场景

		执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但对于过于复杂,需要大量的操作时候,执行ad-hoc命令是不适合的,这时最好使用playbook。  
就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。  
使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。
在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。把常见的应用都编写成playbook之后,管理服务器会变得十分简单。

3. Playbook 组成

Target section

定义将要执行 playbook 的远程主机组
Variable section
定义 playbook 运行时需要使用的变量
Task section
定义将要在远程主机上执行的任务列表
Handler section
定义 task 执行完成以后需要调用的任务

4. YAML语法简介

      Playbook 采用 YAML 语法 

官方文档:https://docs.ansible.com/ansible/2.9/reference_appendices/YAMLSyntax.html

​ playbook由YAML语言编写。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。

YAML格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。
首先学习了解一下YAML的格式,对我们后面书写playbook很有帮助。
以下为playbook常用到的YAML格式:
  1、文件的第一行应该以 “—” (三个连字符)开始,表明YAML文件的开始。
  2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
  3、YAML中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。
  4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
  5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":“分隔表示,”:"后面还要增加一个空格。

5. 语法****检测

语法检测:
# ansible-playbook --syntax-check /path/to/playbook.yaml

测试运行
# ansible-playbook -C /path/to/playbook.yaml

示例1 - 基本写法 :
[root@master ~]# cd /etc/ansible/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@master ansible]# vim test.yml #后缀为yml或yaml

---
- hosts: 192.168.10.22
  tasks:
  - name: 创建用户jerry
    user:
      name: jerry
      state: present
  - name: 创建文件/tmp/abc
    file:
      path: /tmp/abc
      owner: jerry
      mode: 0600
      state: touch

注意:

hosts参数指定了对哪些主机进行操作;
tasks指定了任务列表,其下面的name参数是任务的ID,在执行过程中会打印出来。

执行:

[root@master ansible]# ansible-playbook test.yml


playbook执行后的输出结果由不同颜色组成,便于识别。

一般而言
绿色代表执行成功,系统保持原样
黄色代表系统状态发生改变
红色代表执行失败,显示错误输出

示例2 - 变量定义及使用 :

[root@master ansible]# vim create_user.yml

---
- name: create_user
  hosts: testhost
  user: root
  gather_facts: false
  vars:
  - user: "qfedu"
  tasks:
  - name: create user
    user: name="{{ user }}"

​ 注意:

​ name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值 ,可以省略;

​ gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;
​ vars参数指定了变量,这里指字一个user变量,其值为test ,需要注意的是,变量值一定要用引号引住;
​ user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。

示例3 - 条件判断:

[root@master ansible]# vim when.yml

---
- hosts: all
  user: root
  gather_facts: True
  tasks:
  - name: use when
    shell: touch /tmp/when.txt
    when: 
    - ansible_fqdn == "host1.qf.com"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMYBuYK3-1655896400133)(D:\笔记图片\image-20220617200353110-16554674344911-16554674355763.png)]

when: “‘jenkins’ in ansible_fqdn” # 条件判断

注意:
(1)要求多条件同时满足可用and连接或写成列表的形式;
(2)变量要先定义才能进行比较

示例4 - handlers
[root@master ansible]# vim handlers.yml

---
- hosts: all
  vars:
  - user_name: "hello"
  tasks:
  - name: create user
    user: 
      name: {{ user_name }}
      state: present
    notify: change owner to file                    # notify后面是handler的ID
  handlers:
  - name: change owner to file
    file: 
      name: /tmp/a.txt
      owner: {{ user_name }}

说明:

(1)任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;
(2)当所有任务执行完毕后才会执行handlers  
以上只有 user 模块真正执行后,才会去调用下面的 handlers 相关的操作,追加内容。所以这种比较适合配置文件发生更改后,需要重启服务的操作。

​ 示例5 - 循环 :

# 例 1
---
- hosts: lamp
  tasks:
  - name: install lamp packages
    yum: name={{ item }} state=present
    loop:
    - httpd
    - mariadb-server
    - php
    - php-mysql

# 例 2
---
- name: Create two hard links
  file:
    src: '/tmp/{{ item["src"] }}'
    dest: '{{ item["dest"] }}'
    state: hard
  loop:
    - { src: x, dest: y }
    - { src: z, dest: k }

说明:

循环:迭代,需要重复执行的任务;  
对迭代项的引用,固定变量名为"item",而后使用 loop 给定要迭代的元素列表

示例6 - tags-了解
有时候我们并不希望所有的任务都执行。 tags可以对任务打标签,我们可以借助标签,指定执行哪些任务,或者不执行哪些任务。
[root@master ansible]# vim tags.yaml

---
- hosts: host1
  gather_facts: false
  tasks:
  - name: task1
    file:
      path: /tmp/task1.txt
      state: touch
    tags:                                                                  # tags写法1
    - t1
    - test
  - name: task2
    file:
      path: /tmp/task2.txt
      state: touch
    tags: ['t2','test']                                                    # tags写法2
  - name: task3
    file:
      path: /tmp/task3.txt
      state: touch
    tags: t3                                                               # tags写法3

说明:

(1) 任务可以有1个或多个标签
(2) 在执行playbook时,可通过 --tags=tag 来指定想要运行的任务
- --tags=t1,t2 任务中只要有其中任意一个tag都将执行
- 所有包含有 “always” 标签的任务都将执行
(3) 在执行playbook时,可通过 --skip-tags 明确指定不执行对应的任务,一般和 --tags 配合使用。使用场景如下:
- 可禁止含 “always” 标签的任务执行
- 禁止某些特定的任务执行。如任务1和2都有test标签,希望执行所有含test标签的任务,但有t2标签的除外,可使用 --tags=test --skip-tags=t2来实现
(4) 特殊值 tagged, untagged, all
- tagged 配合 --tags 使用,所有有标签的将执行(有 never 标签的除外); 配合 --skip-tags,无标签的将执行
- untagged 与 tagged 相反
- all 配合 --tags 使用,所有任务都将执行(有 never 标签的除外); 配合 --skip-tags,无任务执行

示例7 - register

register 是个寄存器,接收任务的返回值或者状态.
register 用于获取task输出,检测是否执行正常或失败。可以通过使用 register 关键字来实现获取输出。
register 关键字可以存储指定task的输出结果到一个自定义的变量中,我们通过访问这个自定义变量就可以获取到task的输出结果。

# 例 1
---
- hosts: 192.168.10.21
  gather_facts: false
  tasks:
  - name: 获取当前日期
    shell: date +%F
    register: day
  - name: 查看变量内容
    debug:
      var: day

# 例 2
---
- hosts: 192.168.10.21
  gather_facts: false
  vars:
  - foo: "bar"
  tasks:
  - name: 获取当前星期
    shell: date +%w
    register: week_day
  - name: 星期三在/tmp目录下创建记录日期的文件a.txt
    shell: date > /tmp/a.txt
    when: week_day.stdout == "3"

Ansible-Variable

​ 在Playbook 中,我们提到了变量,Ansible变量有四种定义方法

1. facts :可直接调用

在facts中变量的值可能是字符串, 列表(相当于索引数组)或字典(相当于关联数组)
字符串: ansible_fqdn = “web1.qf.com”
列表: ipv4 = [ ‘192.168.10.11’ , ‘192.168.10.100’ , ‘192.168.10.101’ ]
字典: tom = { ‘age’:18 , ‘sex’:‘male’ , ‘class’:‘yunjisuan’ }

上一篇中,我们有说到setup这个模块,这个模块就是通过调用facts组件来实现的。我们这里的variables也可以直接调用facts组件。

- ansible_all_ipv4_addresses:仅显示ipv4的信息 ---> [u'192.168.95.143']
- ansible_eth0['ipv4']['address']:仅显示ipv4的信息 ---> eth0 的ip地址
- ansible_devices:仅显示磁盘设备信息
- ansible_distribution:显示是什么系统,例:centos,suse等
- ansible_distribution_version:仅显示系统版本
- ansible_machine:显示系统类型,例:32位,还是64位
- ansible_eth0:仅显示eth0的信息
- ansible_hostname:仅显示主机名
- ansible_kernel:仅显示内核版本
- ansible_lvm:显示lvm相关信息
- ansible_memtotal_mb:显示系统总内存
- ansible_memfree_mb:显示可用系统内存
- ansible_memory_mb:详细显示内存情况
- ansible_swaptotal_mb:显示总的swap内存
- ansible_swapfree_mb:显示swap内存的可用内存
- ansible_mounts:显示系统磁盘挂载情况
- ansible_processor:显示cpu个数(具体显示每个cpu的型号)
- ansible_processor_vcpus:显示cpu个数(只显示总的个数)
- ansible_python_version:显示python版本

​ 例如:批量修改主机 hosts 文件

---
- hosts: web  
  vars:        
    IP: "{{ ansible_eth0['ipv4']['address'] }}"  
  tasks:        
  - name: 将原有的hosts文件备份          
    shell: cp /etc/hosts  /etc/hosts_bak        
  - name: 将ansible端的hosts复制到各自机器上          
    copy: src=/root/hosts dest=/etc/ force=yes owner=root group=root mode=0644        
  - name: 在新的hosts文件后面追加各自机器内网ip和hostname          
    lineinfile: dest=/etc/hosts line="{{ IP }}  {{ ansible_hostname }}"

2. 用户自定义变量

我们也可以直接使用用户自定义变量,自定义变量有以下两种方式:
1).通过命令行传入
  ansible-playbook命令的命令行中的-e VARS,这样就可以直接把自定义的变量传入。

2).在playbook中定义变量

我们也可以直接在playbook中定义我们的变量:
vars:
- var1: value1
- var2: value2

例如: 安装并运行keepalived

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pDDSu5Qk-1655896400134)(D:\笔记图片\1-16554688436695.png)]

如果在上面的playbook中没有定义vars的话,我们还可以这样来传入:

# ansible-playbook install.yml -e rpmname=keepalived

3. 在Host Inventory中定义变量

我们也可以直接在主机清单中定义变量。  
定义的方法如下:
1). 向不同的主机传递不同的变量:
IP/HOSTNAME var1=value1 var2=value2
2). 向组中的主机传递相同的变量:
[groupname:vars]
var1=value1
var2=value2

**4. 通过roles传递变量

vars
defaults

具体的,我们说到 roles 的时候再详细说明
**

5. register

JinJa2简介

使用Jinja2管理配置文件

Jinja2介绍

Jinja2是基于python的模板引擎,功能比较类似于PHP的smarty,J2ee的Freemarker和velocity。
它能完全支持unicode,并具有集成的沙箱执行环境,应用广泛。

Jinja2的语法是由variables(变量)和statement(语句)组成,如下:

1)、variables:可以替换数据
如: listen {{ nginxport }};

2)、statements: 可以用来创建条件和循环等
if语句:
{% if conditional %}

{% endif %}

for 语句:
{% for item in all_items %}

{% endfor %}

例 - 判断

# cat test_if.yml

---
- hosts: all
  tasks:
  - name: ansible jinja2 template for hosts config
    template: src=/tmp/test_if.j2 dest=/tmp/test.conf
# cat /tmp/test_if.j2

{% if PORT %}
Listen {{ PORT }}
{% else %}
Listen 80
{% endif %}

当PORT变量为0或为空时,执行后:
# cat /tmp/test.conf
Listen 80

当PORT变量有一个真值(如:8080)时:
# cat /tmp/test.conf
Listen 8080

      ***\**注: if 判断中涉及到变量时,这个变量一定要事先定义好,否则会报变量未定义的错误。
          对于已定义的变量,其值为0或空值时为假,其他情况为真。**

Jinja default()设定

​ 精通程序编码的朋友皆知,default()默认值的设定有助于程序的健壮性和简洁性。
Jinja也支持该功能,上面的例子中生成Mysql配置文件中的端口定义,如果指定则PORT=8080,否则PORT=80,我们将该案例改造为使用default()试试
编辑/tmp/test_if.j2内容如下,这种方法更简洁。
Listen {{ PORT | default(3306) }}

注:使用到default()的时候,变量有值则应用该值,并不会判断值的真假,没值则应用默认值。
故在使用default()时,想使用默认值时不能事先定义变量。

例 - 循环: 

# cat test_for.yml

---
- hosts: all
  tasks:
  - name: ansible jinja2 template for hosts config
    template: src=/tmp/test_for.j2 dest=/tmp/hosts.test

# cat /tmp/test_for.j2
{% for id in range(11,16) %}
192.168.10.{{ id }} web{{ id }}.test.com
{% endfor %}

执行后:
# cat /tmp/hosts.test
192.168.10.11 web11.test.com
192.168.10.12 web12.test.com
192.168.10.13 web13.test.com
192.168.10.14 web14.test.com
192.168.10.15 web15.test.com

Ansible-Roles

Roles

简介

		"ansible all -i /app/ansible-playbook/hosts -m ping” 这种执行方式被称为ad-hoc模式,即命令行或交互模式
但任何配置管理工具的官方文档都会告诉你要用编排的方式进行复杂的部署,例如saltstack里的.sls文件,ansible里的playbook。

		对于以上所有的方式有个弊端就是无法实现复用.假设在同时部署Web、db、ha 时或不同服务器组合不同的应用就需要写多个yml文件。很难实现灵活的调用。
		ansible提供了一种目录树结构的编排方式,顶层目录对应roles,里面包含子目录,比如defaults、files、tasks、templates等不同的子目录对应不同的功能,这种方式使得管理和重复调用变得极为方便。
		roles 用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

角色集合

#ls roles/

mysql/ httpd/ nginx/ #这里的每个目录都是一个角色

在每一个角色的目录下又可以有如下目录:
files/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
defaults/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VG3yTWKb-1655896400135)(D:\笔记图片\image-20220617204055941-16554696574667.png)]

Playbook 关键字

play

any_errors_fatal:强制任何主机上的任何未处理任务错误传播到所有主机并结束播放。
become:布尔值,用于控制是否在任务执行时适用权限提升。
become_exe: 用来提升特权的可执行文件的路径。
become_flags:当变为True的时候,要传递给权限提升程序的标志。
become_method:适用那种权限升级方法(例如sudo或su)
become_user:成为什么用户(拥有此用户的权限)
check_mode:布尔值,控制任务是否以check的模式执行
collections:用于搜索模块、插件和角色的集合名称空间列表
connection: 允许你改变用于在target上执行任务的连接插件
debugger:调试器,根据任务结果的状态启用调试任务
diff: 切换使任务是否返回“diff”信息。
environment:转换未环境变量的字典,在执行时为任务提供。这不会影响Ansible本身及其配置,它只是为负责执行任务的代码设置变量。
fact_path:为gather_facts控制的事实收集插件设置事实路径选项。
force_handlers:即使在播放期间失败,也会强制通知处理程序执行主机
gather_facts: 一个布尔值,控制游戏是否会自动运行“setup”任务,为主机收集facts。
gather_subset:允许您将子集选项传递给gather_facts控制的事实收集插件。
gather_timeout:允许您设置由gather_facts控制的事实收集插件的超时
handlers:处理器,具有被视为处理程序的任务的部分,只有在每个任务部分完成后通知时才会正常执行。
hosts:主机或主机组列表
ignore_errors:布尔值,允许您忽略任务失败并继续执行。它不会影响连接错误。
ignore_unreachable:布尔值,允许您忽略无法访问的主机并继续播放
max_fail_percentage:可以用于在当前批次中给定百分比的主机发生故障后中止运行。
module_defaults:指定模块的默认参数值。
name:标识符。
no_log:控制信息泄露的布尔值。
order:控制主机在用于执行播放时的排序。可能的值是inventory(默认),sorted,reverse_sorted,reverse_inventory和shuffle。
port:用于覆盖连接中使用的默认端口。
post_tasks:任务部分后要执行的任务列表。
pre_tasks:在角色之前执行的任务列表。
remote_user:用户通过连接插件登录目标。
roles: 角色
run_once:布尔值,它将绕过主机循环,强制任务尝试在第一个可用主机上执行,然后将任何结果和事实应用于同一批次中的所有活动主机。
serial:批次执行
strategy:允许您选择用于播放的连接插件。
tags:应用于任务或包含任务的标签,允许从命令行选择任务子集。
tasks:在游戏中执行的任务的主要列表,它们在角色之后和post_tasks之前运行。
vars:变量
vars_files:变量文件
vars_prompt:交互式变量输入

Role

  any_errors_fatal:强制任何主机上的任何未处理任务错误传播到所有主机并结束播放。
  become:布尔值,用于控制是否在任务执行时使用权限升级。
become_flags:当变为 True 时,要传递给权限提升程序的一串标志。
become_method:使用哪种权限升级方法(例如sudo或su)。
become_user:使用权限升级后您“成为”的用户。远程/登录用户必须具有成为此用户的权限。
check_mode:一个布尔值,用于控制任务是否以“检查”模式执行
collections
connection:允许您更改用于在目标上执行的任务的连接插件。
debugger:根据任务结果的状态启用调试任务
delegate_facts:布尔值,允许您将事实应用于委托主机而不是inventory_hostname。
delegate_to:主机执行任务而不是目标(inventory_hostname)。来自委派主机的连接变量也将用于该任务。
diff:切换以使任务返回'diff'信息与否。
environment:转换为环境变量的字典,在执行时为任务提供。这不会影响Ansible本身及其配置,它只是为负责执行任务的代码设置变量。
ignore_errors:布尔值,允许您忽略任务失败并继续播放。它不会影响连接错误。
ignore_unreachable:布尔值,允许您忽略无法访问的主机并继续播放。这不会影响其他任务错误
module_defaults:指定模块的默认参数值。
name:控制信息泄露的布尔值。
no_log:
port:用于覆盖连接中使用的默认端口。
remote_user
run_once
tags
vars
when

Task

action:任务要执行的操作
any_errors_fatal:强制任何主机上的任何未处理任务错误传播到所有主机并结束播放
args:将参数传递到任务的第二种方法。
async:异步
become:是否在执行任务时进行权限升级
become_flags
become_method:适用那种权限升级的方法
become_user:权限升级后变更的用户
changed_when
check_mode
collections
connection:定义连接插件
debugger:调试器
delay:延迟的秒数
delegate_facts:布尔值,允许您将事实应用于委托主机而不是inventory_hostname。
delegate_to:委托
diff:
environment:配置环境信息
failed_when:任务失败的条件表达式
ignore_errors:布尔值,允许您忽略任务失败并继续执行。它不会影响连接错误。
ignore_unreachable:布尔值,允许忽略无法访问的主机并继续播放。
local_action:
loop:循环取值的任务列表
loop_control
module_defaults:指定模块的默认参数值。
name
no_log:控制信息泄露的布尔值
notify:当任务返回changed=True状态时要通知处理程序
poll:轮询
port:连接节点的端口
register:寄存器,接收任务的返回值或者状态
remote_user:连接节点的用户
retries:重试次数,与until配合适用
run_once:运行批次中的一台主机,将结果同步给其它主机
tags:应用于任务或包含任务的标签,允许从命令行选择任务子集
until:直到...结束循环
vars:变量
when:条件表达式
with_<lookup_plugin>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值