Ansible-Base-Module-1

Ansible 模块命令讲解、剧本

原文链接:https://blog.csdn.net/MssGuo/article/details/125794132

Ansible 的颜色

Ansible 的返回结果非常友好,一般会用三种颜色来表示执行结果:

颜色 是否成功 说明
绿色 成功 没有对目标机器做修改
橘黄色 成功 执行后目标机器有状态变化
红色 失败 执行过程出现异常

Ansible 语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]
[--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts]
[-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]
[--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]
[-c CONNECTION] [-T TIMEOUT]
[--ssh-common-args SSH_COMMON_ARGS]
[--sftp-extra-args SFTP_EXTRA_ARGS]
[--scp-extra-args SCP_EXTRA_ARGS]
[--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]
[-e EXTRA_VARS] [--vault-id VAULT_IDS]
[--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
[-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR]
[-a MODULE_ARGS] [-m MODULE_NAME]
pattern
1
2
3
4
5
6
7
8
9
10
11
12
-i :指定主机清单,不指定默认是 /etc/ansible/hosts;
--list-hosts: 列出指定组里有哪些主机;
-o :简化输出,显示为一行;
-u,--user=REMOTE_USER : 远程执行时受控主机的用户;
-k, --ask-pass :提示输入 ssh 密码,默认 key 验证;
-K, --ask-become-pass : 提示输入 sudo 时的密码口令;
-b,--become:特权方式运行命令;
-T,--timeout=TIMEOUT : 执行命令时的超时时间,默认 10s;
-f 10 :指定 ansible 并行线程数,在高并发场景下可以指定 ansible 的线程数,可以让 ansible 执行时启动多个线程发送命令到受控主机从而提高效率。默认是 5 个线程;
-m: 指定模块,m 是 module 的缩写,不指定模块缺省值默认是 command,可以在 ansible.cfg 配置文件中配置默认模块。
-a:指定模块所要执行的命令,参数等。
-l,--limit: 指只针对某个组的某些主机执行。

演示示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看 /etc/ansible/hosts 主机清单的 node 组有哪些主机
ansible -i /etc/ansible/hosts node --list-hosts

# 查看默认主机文件 /etc/ansible/hosts 主机清单的全部受控主机
ansible all --list-hosts

# -u 指定远程执行的用户为 guo,
# -b 指定以 root 特权方式运行命令,
# -k 表示输入 ssh 登陆密码,
# -K 表示特权方式时输入 sudo 密码,
# -T 指定命令超时时间,
# -m 指定要使用模块是 shell 模块,
# -a 指定要运行的命令.
ansible -i /etc/ansible/hosts node -u guo -b -k -K -T 20 -m shell -a 'ls -l /root'

# 针对全部主机里的 192.168.118.133 执行
ansible all -m ping --limit 192.168.118.133

# 针对node组里的192.168.118.133执行
ansible node -m ping -l 192.168.118.133

Ansible 的 Host-pattern

all: 表示主机清单所有的主机,如下所示:

1
2
# all 表示主机清单所有的主机
ansible -i /etc/ansible/hosts all -m ping

指定主机清单的某个组,如指定 node 组,如下所示:

1
2
# 指定 node 组
ansible -i /etc/ansible/hosts node -m ping

指定主机清单的某个主机 IP,如下所示:

1
2
# 指定主机清单里面的 192.168.118.132 这台受控主机
ansible -i /etc/ansible/hosts 192.168.118.132 -m ping

*使用通配符模糊匹配组,如下所示:

1
2
# 模糊匹配带有 web 后缀的组
ansible -i /etc/ansible/hosts *web -m ping

或关系,表示在 A 组或 B 组中的主机,如下所示:

1
2
3
4
5
# 表示在 node 组或 web 组中的主机
ansible -i /etc/ansible/hosts 'node:web' -m ping

# 也表示或关系
ansible '192.168.118.132:192.168.118.133' -m ping

逻辑与:表示同时在 A 组和 B 组中的主机,如下所示:

1
2
# 同时在 node 组和 web 组中的主机
ansible -i /etc/ansible/hosts 'node:&web' -m ping

逻辑非:表示在 A 组,但不在 B 组中的主机,如下所示:

1
2
3
4
5
# 同时在 node 组但不在 web 组中的主机
ansible -i /etc/ansible/hosts 'node:!web' -m ping

# 同上,表示在 node 组但不在 web 组中的主机
ansible -i /etc/ansible/hosts '!web:node' -m ping

综合逻辑:可以把上面的逻辑组合起来形成综合逻辑,如下所示:

1
2
# 表示在 web 组或 node 组同时又在 redis 组但不在 db 组中的主机
ansible -i /etc/ansible/hosts 'web:node:&redis!db:' -m ping

正则表达式:

1
2
# 表示匹配以 web 或 node 开头 servers 结尾的组中的主机
ansible -i /etc/ansible/hosts '~(web|node)servers' -m ping

file 模块

作用:主要用于在目标受控主机上创建文件,目录,删除文件等操作。

参数:

1
2
3
4
5
6
path:指定路径,path 的别名是 dest, name
state:表示状态,absent 删除文件或目录, directory 创建目录, file, hard 创建硬链接, link 创建软链接, touch 创建普通文件,默认是:file
owner:属主
group:属组
mode:设置权限
src:表示创建的是软硬链接时链接到的源文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看 file 模块帮助文档
ansible-doc file

# 创建一个普通文件
ansible -i /etc/ansible/hosts all -m file -a 'path=/root/test.txt state=touch'

# 创建一个目录
ansible -i /etc/ansible/hosts all -m file -a 'path=/root/k8s state=directory'

# 创建一个可执行文件属组是 root,属组也是 root,权限是 755
ansible -i /etc/ansible/hosts all -m file -a 'path=/root/run.sh state=touch mode=755 owner=root group=root'

# 删除文件或目录(会级联删除)
ansible -i /etc/ansible/hosts all -m file -a 'name=/root/k8s state=absent'

copy 模块

作用:主要用于复制 ansible 主控端的文件到受控端上

1
2
3
4
5
6
7
8
9
10
11
# 查看 copy 模块帮助文档
ansible-doc cppy

# src 指定源文件,dest 指定目标路径
ansible -i /etc/ansible/hosts node -m copy -a 'src=/root/test_file1 dest=/root/'

# src 指定源文件,dest 指定目标路径,owner group mode 等参数可以指定文件属性
ansible -i /etc/ansible/hosts node -m copy -a 'src=/root/test_file2 dest=/root/ owner=root group=fuji mode=755'

# backu=yes 表示当 src 源文件改变了,目标机器上具有同名文件时,备份同名的目标文件,默认 backup=no 不备份直接覆盖目标主机上同名文件,备份的文件名会加上年月日时分秒
ansible -i /etc/ansible/hosts node -m copy -a 'src=/root/test_file2 dest=/root/ owner=root group=fuji mode=755 backup=yes'

fetch 模块

作用:从远程主机上抓取文件到主控端上。fetch 模块功能与 copy 模块功能整好相反。

1
2
3
# 从远程主机上抓取 /var/log/messages 文件到 /root/logs/ 目录下
# src 参数表示远程文件,必须是一个文件,不能是目录;dest 是本地目录
ansible all -m fetch -a 'src=/var/log/messages dest=/root/logs/'
1
2
3
4
5
6
7
8
9
10
11
# 抓取后的文件,其实是用主机地址为目录做了区分,同时被抓取的文件连同绝对路径也一起抓取过来了,如下所示:
[root@master ~]# tree logs/ # 查看抓取后的文件
logs/
├── 192.168.118.132 # 以远程主机 IP 为目录做了区分
│ └── var # 被抓取的文件连同绝对路径也一起抓取过来
│ └── log # 被抓取的文件连同绝对路径也一起抓取过来
│ └── messages # 被抓取的文件名
└── 192.168.118.133 # 以远程主机 IP 为目录做了区分
└── var # 被抓取的文件连同绝对路径也一起抓取过来
└── log # 被抓取的文件连同绝对路径也一起抓取过来
└── messages # 被抓取的文件名

cron 模块

作用:添加、删除 Linux 的定时计划任务。

参数:

1
2
3
4
5
6
name :指定计划任务的名称;
minute、hour、day、month、weekday:分时日月周,默认是*
job:表示计划任务要执行的命令
state:状态,状态有两种,present 表示添加计划任务含义,absent 表示删除计划任务;
user:表示计划任务的所属的用户,默认是 root;
disabled:disabled=true 表示禁用计划任务,disabled=false 表示启用计划任务,默认是 false 表示启用计划任务;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 每十分钟执行
ansible node -m cron -a 'name="sync-date" minute=/10 user=root job="/usr/sbin/ntpdate ntp1.aliyun.com" state=present'#每小时执行ansible node -m cron -a 'name="sync-date" hour=/1 user=root job="/usr/sbin/ntpdate ntp1.aliyun.com" state=present'

# 每天一点执行
ansible node -m cron -a 'name="sync-date" minute=00 hour=1 user=root job="/usr/sbin/ntpdate ntp1.aliyun.com" state=present '

# 每周一凌晨两点整执行
ansible node -m cron -a 'name="sync-date" minute=00 hour=2 weekday=1 user=root job="/usr/sbin/ntpdate ntp1.aliyun.com" state=present'

# 在远程主机上查看第一条的计划任务
[root@node1 ~]# crontab -l
# Ansible: sync-date
*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

# 使用 disabled=no 重新启用计划任务,必须指明 name 和 job 才能唯一标识一个计划任务,user 不指定默认就是 root
ansible node -m cron -a 'name="sync-date" user=root job="/usr/sbin/ntpdate ntp1.aliyun.com" disabled=no'

# 查看远程主机,计划任务已经重启启用了
[root@node1 ~]# crontab -l
#Ansible: sync-date
* * * * * /usr/sbin/ntpdate ntp1.aliyun.com

# 删除计划任务
ansible node -m cron -a 'name="sync-date" user=root job="/usr/sbin/ntpdate ntp1.aliyun.com" state=absent'

user 模块

作用:主要用于用户信息管理,包括用户创建,密码修改,组等基本操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看 `user` 模块的帮助文档
ansible-doc user

# 在所有主机组上创建一个 xiaoming 用户
ansible -i /etc/ansible/hosts all -m user -a 'name=xiaoming'

# 在所有主机组上创建一个 xiaoming 用户
# 如果创建的用户需要密码,则密码需要使用 openssl 命令和 passwd 命令从标准输入中先加密,然后再 ansible 使用 password 指定,如下所示:
# -1是密码加密的复杂度
echo "123456" | openssl passwd -1 -stdin
$1$v9/AfSPE$Ojk8HUwrbeEQ5jdtw9aYy0
ansible -i /etc/ansible/hosts all -m user -a 'name=xiaoming group=root uid=1009 shell=/usr/bin/bash comment="I am xiaoming,I am new." password="$1$v9/AfSPE$Ojk8HUwrbeEQ5jdtw9aYy0"'

# 删除 xiaoming 用户,家目录也一起删除
ansible -i /etc/ansible/hosts all -m user -a 'name=xiaoming state=absent remove=yes'

yum 模块

作用:yum 模块主要用于包管理,如安装、升级、卸载包等操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 更新 nginx,state 参数:present、installed 都可以表示安装,latest 表示更新、removed、absent 表示卸载
ansible -i /etc/ansible/hosts node -m yum -a 'name=nginx state=latest'

# 同时安装多个,使用道号隔开
ansible -i /etc/ansible/hosts node -m yum -a 'name=nginx,vsftpd state=present'

# 安装本地的包,首先需要把包上传到远程目标主机上才能安装
ansible -i /etc/ansible/hosts node -m copy -a 'src=/root/grafana-8.3.3-1.x86_64.rpm dest=/root/'

ansible -i /etc/ansible/hosts node -m yum -a 'name=/root/grafana-8.3.3-1.x86_64.rpm state=present'

# 卸载 nginx,同时卸载多个的话也要使用道号隔开
ansible -i /etc/ansible/hosts node -m yum -a 'name=nginx state=absent'

# 仅下载 nginx,不安装
ansible -i /etc/ansible/hosts node -m yum -a 'name=nginx download_only=true'

service 模块

作用:用于管理服务,包括启动服务,停止服务,设置服务开机自启等操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看 service 模块的帮助文档
ansible-doc service

# 启动 nginx 服务
# state 参数可选值:reloaded 重新加载, restarted 重启, started 启动, stopped 停止
ansible -i /etc/ansible/hosts all -m service -a 'name=nginx state=started'

# 停止服务,state=stopped 表示停止
ansible -i /etc/ansible/hosts all -m service -a 'name=nginx state=stopped'

# 设置服务开机自启
ansible -i /etc/ansible/hosts all -m service -a 'name=nginx enabled=yes'

# 启动 ntpd 服务,并设置服务开机自启
ansible -i /etc/ansible/hosts all -m service -a 'name=ntpd state=started enabled=yes'

setup 模块

作用:收集指定目标受控主机的基本信息

1
2
3
4
5
6
7
8
# 查看 setup 模块帮助文档
ansible-doc setup

# 查看基本信息,会输出所有信息
ansible -i /etc/ansible/hosts all -m setup

# 查看主机的总内存信息,通过使用 filter 参数过滤
ansible -i /etc/ansible/hosts all -m setup -a 'filter=ansible_memtotal_mb'

command 模块

作用:command 模块用于执行一些简单的命令,command 不能识别特殊字符,使用 shell 模块能识别特殊字符。

1
2
3
4
5
6
7
8
# 查看 command 模快帮助文档
ansible-doc command

# 查看主机名
ansible -i /etc/ansible/hosts node -m command -a 'hostname'

# 查看用户信息,但是由于有管道符,所以会报错,command 模块不能识别不了特殊字符
ansible all -m shell -a 'cat /etc/passwd | grep ssh'

shell 模块

作用:shell模块能实现平时Linux全部操作,即shell模块能实现上面所讲的各个模块全部功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看 shell 帮助文档
ansible-doc shell

# 查看 ntpd 服务状态
ansible -i /etc/ansible/hosts node -m shell -a 'systemctl status ntpd'

# 重启 ntpd 服务状态
ansible -i /etc/ansible/hosts node -m shell -a 'systemctl restart ntpd'

# 查看 Linux 版本和内核版本
ansible -i /etc/ansible/hosts node -m shell -a 'cat /etc/redhat-release ;uname -a'

# 查看系统启动时间和系统负载,以及登陆用户数
ansible -i /etc/ansible/hosts node -m shell -a 'uptime'

playbook 剧本

ansible-playbook 命令常用参数:

1
2
3
4
5
--list-hosts :列出剧本的主机
--list-tags :列出剧本的 tags
--syntax-check :语法检查,检查剧本的语法有无错误
-l SUBSET, --limit SUBSET :指定主机组里哪些主机执行剧本
-t TAGS, --tags TAGS:只执行指定 tags 的步骤

palybook 特性:

1
2
3
4
5
6
7
8
9
# 号表注释
--- 表示文件的开始
区别大小写
一个 name 只能写一个 task,不能一个 nginx 下写多个 task,不然只会应用最后的一个 task;
文件名后缀通常是 .yaml 或 .yml
hosts:执行的远程主机列表
tasks:任务集
template:模板
handlers: 与 notify 结合使用,有特定条件触发执行操作,满足条件执行,不满足不执行。

编写一个 playbook 剧本,剧本是以 yaml 格式语法进行编写的,并在 ansible 服务器上创建一个 /root/httpd.conf 配置文件,端口是 8000,然编写剧本,如下:

1
vim  install_httpd.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
---
# 指定主机
- hosts: node
# 任务
tasks:
# 名字,可自定义
- name: install httpd
# yum 模块,安装 httpd 服务
yum: name=httpd state=present
# 名字,可自定义
- name: copy apache conf file
# copy 模块,复制 httpd.conf 去替换远程主机的 httpd.conf
copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
# 名字,可自定义
- name: start apache running
# service 模块,启动 httpd 服务
service: name=httpd state=started enabled=yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 剧本语法检查,没有报错输出说明剧本语法 ok
[root@master ~]# ansible-playbook install_httpd.yaml --syntax-check
playbook: install_httpd.yaml

# 列出剧本要运行的主机
[root@master ~]# ansible-playbook install_httpd.yaml --list-hosts
playbook: install_httpd.yaml
play #1 (node): node TAGS: []
pattern: [u'node']
hosts (2):
192.168.118.132
192.168.118.133

# 执行剧本,没有报错,远程主机上已经运行起来了 httpd 服务
[root@master ~]# ansible-playbook install_httpd.yaml

# 在 node1 节点上查看,8000 端口起来了,说明我们的剧本 copy 模块复制式成功的
[root@node1 local]# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 53560 root 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53561 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53562 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53563 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53564 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53565 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)

我们修改本地的 /root/httpd.conf 文件端口为 8111。然后重新执行 ansible-playbook install_httpd.yaml,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 修改 /root/httpd.conf 文件端口为 8111,然后重新执行剧本
[root@master ~]# ansible-playbook install_httpd.yaml

# 查看远程受控主机上查看,还是之前的 8000 端口
[root@node1 local]# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 53560 root 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53561 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53562 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53563 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53564 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)
httpd 53565 apache 4u IPv6 1602043 0t0 TCP *:irdmi (LISTEN)

# 没有 8111 端口
[root@node1 local]# lsof -i:8111
[root@node1 local]# grep 8111 /etc/httpd/
conf/ conf.d/ conf.modules.d/ logs/ modules/ run/

# 查看配置文件,配置问价已经是 8111 端口了
[root@node1 local]# grep 8111 /etc/httpd/conf/httpd.conf
Listen 8111

handlers 的使用

细心的网友会发现问题所在,我们的剧本中,当文件发生改变了,copy 会重新复制 httpd.conf 文件到远程主机,但是 httpd 服务并没有重启,如果在剧本后面写上重启 httpd 视乎是可行的,但是每执行一次剧本都重启一次 httpd 服务,视乎有点不合理。此时,我们引入一个 handlers 来监听某个事件然后触发某种操作,如下所示:

1
vim install_httpd.yaml 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
---
- hosts: node
tasks:
- name: install httpd
yum: name=httpd state=present
- name: copy apache conf file
copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
# notify 定义当 copy 模块的文件发生了改变时去执行对应名字的 handlers,
# 注意,这里的 "restart httpd service" 要与 handlers 的 name 的内容一样,不然对应不上
notify: restart httpd service
- name: start apache running
service: name=httpd state=started enabled=yes
# 引入一个 handlers
handlers:
# 定义一个 name
- name: restart httpd service
# 操作是,使用 service 模块,重启 httpd 服务
service: name=httpd state=restarted
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改端口为 8222
[root@master ~]# vim httpd.conf

# 执行剧本
[root@master ~]# ansible-playbook install_httpd.yaml

# 查看受控主机,端口 8222 已经启动了
[root@node1 local]# lsof -i:8222
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 60105 root 4u IPv6 1621895 0t0 TCP *:8222 (LISTEN)
httpd 60106 apache 4u IPv6 1621895 0t0 TCP *:8222 (LISTEN)
httpd 60107 apache 4u IPv6 1621895 0t0 TCP *:8222 (LISTEN)
httpd 60108 apache 4u IPv6 1621895 0t0 TCP *:8222 (LISTEN)
httpd 60109 apache 4u IPv6 1621895 0t0 TCP *:8222 (LISTEN)
httpd 60110 apache 4u IPv6 1621895 0t0 TCP *:8222 (LISTEN)

tags 的使用

tags 其实相当于一个标签,在为某个 tasks 打上一个 tags,然后执行剧本时可以指定 tags 名字,这样就能单独执行 tags 那行的任务,如下所示:

1
vim install_httpd.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
- hosts: node
tasks:
- name: install httpd
yum: name=httpd state=present
- name: copy apache conf file
copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd service
- name: start apache running
service: name=httpd state=started enabled=yes
# 定义一个名叫start apache的tags
tags: start apache
handlers:
- name: restart httpd service
service: name=httpd state=restarted
1
2
3
4
5
6
7
8
# 列出剧本有哪些 tags
ansible-playbook install_httpd.yaml --list-tags

# 指定tags执行剧本(假设剧本已经执行过,现在要启动 nginx,那么可以指定 tags 来执行剧本)
ansible-playbook -t "start apache" install_httpd.yaml

# 注意:可以将一个 tags 放在不同的 task 下,这样执行剧本的时候就会执行多个 task;
# 同时,执行剧本时指定 tag 也可以指定多个 tags,使用道号间隔即可。

ansible-vault 加密 yaml 文件

ansible-vault 命令主要用于加密 yaml 文件,当我们的 yaml 文件有敏感信息时,可以使用使用 ansible-vault 命令加密 yaml 文件,加密过的 yaml 文件,直接 cat vim 看到的会是一串乱码,所以还是要使用 ansible-vault 命令进行编辑,查看,解密等操作。

注意:加密后的 yaml 文件,需要解密后才能正常执行。

常用参数:

1
2
3
4
5
6
7
8
9
encrypt :加密文件
{create,decrypt,edit,view,encrypt,encrypt_string,rekey}
create 创建一个加密的yaml文件
decrypt 解密一个加密文件
edit 编辑加密文件
view 查看加密文件
encrypt 加密一个yaml文件
encrypt_string 加密一个字符串
rekey Re-key a vault encrypted file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建一个秘文,创建的时候需要输入密码,然后 ansible 就直接打开文件可以写剧本了
ansible-vault create vault.yml

# 解密一个加密过的文件,需要输入正确密码才能解密
ansible-vault decrypt vault.yml

# 加密 install_httpd.yaml 文件,加密后的文件就变成了密文,vim 打开看到的是一串乱码
ansible-vault encrypt install_httpd.yaml

# rekey 更换口令密码
ansible-vault rekey install_httpd.yaml

# 解密加密install_httpd.yaml ,加密后的文件就变成了密文,vim打开看到的是一串乱码
ansible-vault encrypt install_httpd.yaml

# 查看加密后的文件,只能这样看,cat install_httpd.yaml 看还是乱码
ansible-vault view install_httpd.yaml

# 编辑加密文件,只能这样编辑,vim install_httpd.yaml 看的话会显示一串乱码
ansible-vault edit install_httpd.yaml

vars 的使用

剧本中可以定义变量,变量的定义使用 vars 定义,变量的引用使用 {{ variable }},中间有空格,如下所示:

1
cat install_soft.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
- hosts: node
# 定义变量,及其赋值
vars:
# 定义了一个 pkname1 变量,并赋值 httpd
- pkname1: httpd
# 定义了一个 pkname2 变量,并赋值 vsftpd
- pkname2: vsftpd
tasks:
- name: install httpd
# 定义一个 pkname1 变量
yum: name={{ pkname1 }} state=present
- name: install vsftpd
# 定义一个 pkname2 变量
yum: name={{ pkname2 }} state=present
- name: start httpd
service: name=httpd state=started enabled=yes
- name: start vsftpd
service: name=vsftpd state=started enabled=yes
1
2
# 如果基本里面没有定义变量,也没有给变量赋值,那么可以在命令行使用 -e 参数给变量赋值,如下:
ansible-playbook -e 'pkname1=httpd,pkname2=vsftpd' install_soft.yaml
Contents
  1. 1. Ansible 模块命令讲解、剧本
    1. 1.1. Ansible 的颜色
    2. 1.2. Ansible 语法
    3. 1.3. Ansible 的 Host-pattern
    4. 1.4. file 模块
    5. 1.5. copy 模块
    6. 1.6. fetch 模块
    7. 1.7. cron 模块
    8. 1.8. user 模块
    9. 1.9. yum 模块
    10. 1.10. service 模块
    11. 1.11. setup 模块
    12. 1.12. command 模块
    13. 1.13. shell 模块
    14. 1.14. playbook 剧本
    15. 1.15. handlers 的使用
    16. 1.16. tags 的使用
    17. 1.17. ansible-vault 加密 yaml 文件
    18. 1.18. vars 的使用
|