Ansible基础快速入门
# Ansible基础知识与架构
# 什么是Ansible
Ansible
是一个IT自动化的配置管理工具,自动化主要体现在Ansible
集成了丰富模块,以及强大的功能组件,可以通过一个命令行完成一系列的操作。进而能减少我们重复性的工作,以提高工作的效率。
# Ansible主要功能
- 批量执行远程命令,可以对N多台主机同时进行命令的执行。
- 批量配置软件服务,可以进行自动化的方式配置和管理服务。
- 实现软件开发功能,
jumpserver
底层使用ansible
来实现的自动化管理。 - 编排高级的IT任务,
Ansible
的Playbook
是一门编程语言,可以用来描绘一套IT架构。
# Ansible的特点
- 容易学习:无代理,不像
salt
既要学客户端与服务端,还需要学习客户端与服务端中间通讯协议; - 操作灵活:
Ansible
有较多的模块,提供了丰富的功能、playbook
则提供类似于编程语言的复杂功能; - 简单易用:体现在
Ansible
一个命令可以完成很多事情; - 安全可靠:因为
Ansible
使用了SSH
协议进行通讯,既稳定也安全; - 移植性高:可以将写好的
playbook
拷贝至任意机器进行执行; - 幂等性:一个任务执行1遍和执行n遍效果一样,不会因为重复执行带来意外情况;
# Ansible基础架构
Ansible
架构中的控制节点、被控制节点、inventroy
、ad-hoc
、playbook
、Connection Protocol
是什么?
# Ansible安装与配置
# Ansible安装方式
# rpm安装
[root@manager ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@manager ~]# yum install ansible -y
2
# pip安装
[root@manager ~]# yum install python3 python3-devel python3-pip -y
[root@manager ~]# pip3 install --upgrade pip -i https://pypi.douban.com/simple/
[root@manager ~]# pip3 install ansible -i https://pypi.douban.com/simple/
[root@manager ~]# /usr/local/bin/ansible --version
2
3
4
# 确认安装
方式一、检查
Ansible
版本[root@manager ~]# ansible --version ansible 2.9.27 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
1
2
3
4
5
6
7方式二、测试
Ansible
是否可用[root@manager ~]# ansible localhost -m ping localhost | SUCCESS => { "changed": false, "ping": "pong" }
1
2
3
4
5
# Ansible相关文件
# Ansible配置文件
/etc/ansible/ansible.cfg
:主配置文件,配置Ansible
工作特性/etc/ansible/hosts
:配置主机清单文件/etc/ansible/roles/
:存放Ansible
角色的目录
# Ansible主配置文件
Ansible
的主配置文件存在/etc/anible/ansible.cfg
,其中大部分的配置内容无需进行修改;
[root@manager ~]# cat /etc/ansible/ansible.cfg
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = ~/.ansible/tmp # 临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp # 本机的临时执行目录
#forks = 5 # 默认并发数
#sudo_user = root # 默认sudo用户
#ask_sudo_pass = True # 每次执行是否询问sudo的ssh密码
#ask_pass = True # 每次执行是否询问ssh密码
#remote_port = 22 # 远程主机端口
host_key_checking = False # 检查对应服务器的host_key,建议取消
log_path = /var/log/ansible.log # ansible日志,建议启用
[privilege_escalation] # 如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Ansible配置优先级
Ansible
的配置文件可以存放在任何位置,但配置文件有读取顺序,查找顺序如下:- 最先查找
$ANSIBLE_CONFIG
变量 - 其次查找当前项目目录下
ansible.cfg
- 然后查找用户家目录下的
.ansible.cfg
- 最后查找
/etc/ansible/ansible.cfg
- 最先查找
- 通过命令行操作演示,验证结论;
# Ansible Inventory
# Inventory是什么
Inventory
文件主要用来填写被管理主机以及主机组信息;(逻辑上定义);
默认Inventory
文件为/etc/ansible/hosts
;
当然也可以自定义一个文件,当执行Ansible
命令时使用-i
选项指定Inventory
文件位置;
# Inventory-密码连接方式
指定主机IP,指定主机端口,指定主机用户名、密码;
# 详细清单文件; [webservers] 10.0.0.12 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456' 10.0.0.13 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456' # 通过域名的简写方式; [webservers] web[1:2].bi.com ansible_ssh_pass='123456'
1
2
3
4
5
6
7
8通过变量方式定义密码;
[webservers] web[1:2].bi.com [webservers:vars] ansible_ssh_pass='123456'
1
2
3
4
# Inventory-秘钥连接方式
创建秘钥对,然后下发秘钥;
[root@manager ~]# ssh-keygen -t rsa [root@manager ~]# ssh-copy-id root@10.0.0.12
1
2
3配置
Inventory
主机清单;[webservers] 10.0.0.12 10.0.0.13
1
2
3
# 使用普通用户管理被控端
场景说明:Ansible
使用bi
普通用户统一管理所有的被控端节点;
首先控制端,被控端,都需要有
bi
用户;[root@manager ~]# useradd bi [root@manager ~]# echo "123" | passwd --stdin bi
1
2将控制端
bi
用户的公钥推送到被控端bi
用户下,使普通用户能进行免密码登录;[root@manager ~]# su - bi [bi@manager ~]$ ssh-keygen -t rsa [bi@manager ~]$ ssh-copy-id bi@IP
1
2
3所有主机的
bi
用户都必须添加sudo
权限。[root@manager ~]# visudo bi ALL=(ALL) NOPASSWD: ALL
1
2修改控制端
/etc/ansible/ansible.cfg
主配置文件,配置普通用户提权;[root@manager ~]# vim /etc/ansible/ansible.cfg [privilege_escalation] become=True become_method=sudo become_user=root become_ask_pass=False
1
2
3
4
5
6使用
bi
用户测试是否能执行任务;[bi@manager ~]$ ansible webservers -m shell -a "touch 123.txt" [WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. 10.0.0.12 | CHANGED | rc=0 >> 10.0.0.13 | CHANGED | rc=0 >>
1
2
3
4
5
6
7
8
# Ansible相关工具
# ansible
此工具通过ssh
协议,实现对远程主机的配置管理,应用部署、任务执行等功能;
Ansible
命令使用格式;ansible <host-pattern> [-m module_name] [-a args]
1Ansible
的host-pattern
使用;# 指定操作所有的组 ansible all -m ping # 通配符; ansible "*" -m ping ansible 10.0.0.* -m ping # 与:在webservers组;并且在dbservers中的主机; ansible "webservers:&dbservers" -m ping # 或:在webservers组,或者在appservers中的主机; ansible "webservers:appservers" -m ping # 非:在webservers组,但不在apps组中的主机 ansible 'webservers:!apps' -m ping # 正则表达式; ansible "~(web|db).*\.bi\.com" -m ping
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Ansible
命令常用选项说明;--version # ansible版本信息 -v # 显示详细信息 -i # 主机清单文件路径,默认是在/etc/ansible/hosts -m # 使用的模块名称,默认使用command模块 -a # 使用的模块参数,模块的具体动作 -k # 提示输入ssh密码,而不使用基于ssh的密钥认证 -C # 模拟执行测试,但不会真的执行 -T # 执行命令的超时 --become-user # 指定sudo时的用户名称,默认为root
1
2
3
4
5
6
7
8
9
# ansible-doc
查看所有的模块
[root@manager ~]# ansible-doc -l
1查看模块的详细文档
[root@manager ~]# ansible-doc copy
1查看模块的所有方法
[root@manager ~]# ansible-doc -s copy
1
# Ansible ad-hoc与常用模块
# ad-hoc基本介绍
# ad-hoc是什么
ad-hoc
简而言之就是“临时命令”,执行完即结束,并不会保存;
- 应用场景1:查看多台节点的进程是否存在;
- 应用场景2:拷贝指定的文件至本地;
# ad-hoc命令使用
命令示例:ansible 'groups' -m command -a 'df -h'
,含义如下图所示;
# ad-hoc执行过程
加载自己的配置文件,默认
/etc/ansible/ansible.cfg
;查找对应的主机配置文件,找到要执行的主机或者组;
加载自己对应的模块文件,如
command
;通过
Ansible
将模块或命令生成对应的临时py
文件,并将该文件传输至远程服务器;执行用户家目录的
.ansible/tmp/ansible-tmp-number/XXX.py
文件;给文件
+x
执行;执行并返回结果;
删除临时
py
文件,sleep0
退出;
# ad-hoc执行状态
使用ad-hoc
执行一次远程命令,注意观察返回结果的颜色;
- 绿色:代表被管理端主机没有被修改
- 黄色:代表被管理端主机发现变更
- 红色:代表出现了故障,注意查看提示
# Ansible常用模块
Ansible
有着诸多的模块,虽然模块众多,但最为常用的模块也就20-30
个左右;
# command模块
功能:在远程主机执行Shell
命令;此为默认模块,可忽略-m
选项;
注意:不支持管道命令|
参数 | 选项 | 含义 |
---|---|---|
chdir | chdir /opt | 执行ansible时,切换到指定的目录 |
creates | creates /data/file | 如果文件存在,则跳过执行 |
removes | removes /data/file | 如果文件存在,则执行 |
范例1:
chdir
,切换目录执行Shell
命令;[root@manager ~]# ansible localhost -m command -a 'chdir=/etc pwd' localhost | CHANGED | rc=0 >> /etc
1
2
3范例2:
creates
,如果/data/file
文件存在,则跳过执行;[root@manager ~]# ansible localhost -m command -a 'creates=/data/file ifconfig ens33' localhost | SUCCESS | rc=0 >> skipped, since /data/file exists
1
2
3范例3:
removes
,如果/data/file
文件存在,则执行;[root@manager ~]# ansible localhost -m command -a 'removes=/data/file ifconfig ens33' localhost | CHANGED | rc=0 >> ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.11 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::250:56ff:fe38:9dec prefixlen 64 scopeid 0x20<link> ether 00:50:56:38:9d:ec txqueuelen 1000 (Ethernet) RX packets 26697 bytes 32693213 (31.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12939 bytes 1574916 (1.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1
2
3
4
5
6
7
8
9
10
11
# shell模块
功能:在远程主机执行Shell
命令,执行管道等特殊符号的操作;
参数 | 选项 | 含义 |
---|---|---|
chdir | chdir /opt | 执行ansible时,切换到指定的目录 |
creates | creates /data/file | 如果文件存在,则跳过执行 |
removes | removes /data/file | 如果文件存在,则执行 |
范例:使用
Shell
命令过滤被控端主机的IP
地址;[root@manager ~]# ansible localhost -m shell -a "ifconfig ens33|awk 'NR==2' " localhost | CHANGED | rc=0 >> inet 10.0.0.11 netmask 255.255.255.0 broadcast 10.0.0.255
1
2
3
# script模块
功能:在被控节点,运行Ansible
主机的脚本;
范例:在
Ansible
主机上编写脚本,然后推送至被控端运行;# 在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行 [root@manager ~]# ansible webservers -m script -a "/data/yum.sh"
1
2
# yum模块
功能:管理各个操作系统的软件包;
参数 | 选项 | 含义 |
---|---|---|
name | httpd、nginx、... | 指定安装软件包名或软件包URL |
state | present(Defaults)、absent、latest | 指定yum对应的方法 |
enablerepo | epel、base、... | 允许从哪些仓库获取软件 |
disablerepo | epel、base、... | 禁止从哪些仓库获取软件 |
exclude | kernel、... | 排除某些软件包 |
download_only | yes、no | 仅下载软件包,不安装 |
范例1:安装当前最新的
Apache
软件,如果存在则不安装[root@manager ~]# ansible webservers -m yum -a "name=httpd state=present"
1范例2:安装当前最新的
Apache
软件,通过epel
仓库安装[root@manager ~]# ansible webservers -m yum -a "name=httpd state=present enablerepo=epel"
1范例3:通过公网
URL
安装rpm
软件[root@manager ~]# ansible webservers -m yum -a "name=https://xx.rpm state=present"
1范例4:安装最新版本的
Apache
软件,如果存在则更新Apache
[root@manager ~]# ansible webservers -m yum -a "name=httpd state=latest"
1范例5:更新所有的软件包,但排除和
kernel
相关的[root@manager ~]# ansible webservers -m yum -a "name=* state=latest exclude=kernel"
1范例6:删除
Apache
软件[root@manager ~]# ansible webservers -m yum -a "name=httpd state=absent"
1
# copy模块
功能:从Ansible
服务端主控端复制文件到远程主机;
参数 | 选项 | 含义 |
---|---|---|
src | 复制本地目录下的文件至远程服务器 | |
dest | 文件复制到远程的绝对路径 | |
owner | root(Defaults) | 文件复制到远程并设定属主 |
group | root(Defaults) | 文件复制到远程并设定属组 |
mode | file=644,directory=755 | 文件复制到远程并设定权限 |
backup | yes | 备份被修改前的配置文件 |
content | 新建文件并给文件添加内容 |
范例1:将本地的
httpd.conf
文件Listen端口修改为8080
,推送至远程服务器[root@manager ~]# ansible webservers -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"
1范例2:将本地的
httpd.conf
文件Listen端口修改为9090
,推送至远程服务器,然后检查远端是否存在上一次的备份文件[root@manager ~]# ansible webservers -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes"
1范例3:往远程的主机文件中写入内容,如果文件不存在则创建
[root@manager ~]# ansible webservers -m copy -a "content="Http_Server" dest=/var/www/html/index.html"
1
# file模块
功能:为被控端创建文件或目录,设定权限属性;
参数 | 选项 | 含义 |
---|---|---|
path | 指定远程服务器的路径 | |
recurse | 递归方式(可以是递归授权) | |
state | touch、directory、link、absent | 文件复制到远程的状态 |
owner | root(Defaults) | 文件复制到远程并设定属组 |
group | root(Defaults) | 备份被修改前的配置文件 |
mode | file=644,directory=755 | 文件复制到远程并设定权限 |
范例1:创建文件,并设定属主、属组、权限
[root@manager ~]# ansible webservers -m file -a "path=/tmp/foo.conf state=touch mode=666"
1范例2:创建目录,并设定属主、属组、权限
[root@manager ~]# ansible webservers -m file -a "path=/tmp/foo state=directory mode=777"
1范例3:递归授权目录
[root@manager ~]# ansible webservers -m file -a "path=/tmp/foo state=directory owner=root group=root mode=777 recurse=yes"
1
# lineinfile模块
功能:修改或删除文件内容,与系统中的sed
命令类似;
参数 | 选项 | 含义 |
---|---|---|
path | 指定要操作的文件 | |
regexp | 使用正则表达式匹配对应的行 | |
line | 修改为新的内容 | |
insertafter | 将文本插入到“指定的行”之后 | |
insertbefore | 将文本插入到“指定的行”之前 | |
state | absent、present(Defaults) | 删除对应的文本时,需要state=absent |
backrefs | yes、no | 1.支持后向引用、2.当未匹配到内容则不操作文件 |
backup | 是否在修改文件之前对文件进行备份 | |
create | 当要操作的文件并不存在时,是否创建对应的文件 |
范例1:将SELINUX修改为disabled状态;
[root@manager ~]# ansible localhost -m lineinfile -a 'path=/etc/selinux/config regexp='^SELINUX=' line=SELINUX=disabled'
1范例2:删除
/etc/sudoers
文件中%wheel
开头的行;[root@manager ~]# ansible localhost -m lineinfile -a 'path=/etc/sudoers regexp='^%wheel' state=absent'
1范例3:替换
/etc/hosts
文件中以12.0.0.1
开头的行为127.0.0.1 ansible.bi.com
[root@manager ~]# ansible localhost -m lineinfile -a 'path=/etc/hosts regex='^127\.0\.0\.1' line="127.0.0.1 ansible.bi.com"'
1范例4:修改默认
Apache
的端口为8080
,使用insertafter
;ansible localhost -m lineinfile -a 'path=/etc/httpd/conf/httpd.conf regexp='^Listen' line="Listen 8080" insertafter='^#Listen''
1
# get_url模块
功能:通过互联网下载软件至被控端本地;
参数 | 选项 | 含义 |
---|---|---|
url | HTTP, HTTPS... | 资源文件在互联网上的具体位置 |
dest | 文件下载位置的绝对路径 | |
mode | 文件下载后的权限 | |
checksum | md5、sha256 | 对下载的资源进行校验 |
timeout | 10(Default) | URL请求超时时间 |
范例1:下载互联网的软件至本地
[root@manager ~]# ansible webservers -m get_url -a "url=https://mirrors.aliyun.com/xx.rpm dest=/tmp"
1范例2:下载互联网文件并进行md5校验
[root@manager ~]# ansible webservers -m get_url -a "url=http,https dest=/opt checksum=md5:76eb3af80ffd"
1
# systemd模块
功能:管理服务启动与停止,与service模块用法一致;
参数 | 选项 | 含义 |
---|---|---|
name | httpd、nginx、... | 定义要启动服务的名称 |
state | started、stopped、restarted、reloaded | 指定服务状态 |
enabled | yes、no | 允许服务开机自启或禁止服务开机自启 |
范例1:启动
Httpd
服务[root@manager ~]# ansible webservers -m service -a "name=httpd state=started"
1范例2:重载
Httpd
服务[root@manager ~]# ansible webservers -m service -a "name=httpd state=reloaded"
1范例3:重启
Httpd
服务[root@manager ~]# ansible webservers -m service -a "name=httpd state=restarted"
1范例4:停止
Httpd
服务[root@manager ~]# ansible webservers -m service -a "name=httpd state=stopped"
1范例5:启动
Httpd
服务,并加入开机自启[root@manager ~]# ansible webservers -m service -a "name=httpd state=started enabled=yes"
1
# group模块
功能:管理被控端用户组;
参数 | 选项 | 含义 |
---|---|---|
name | 指定创建的组名 | |
gid | 为组设置可选gid | |
state | present(Default)、absent | 是否将组创建在远程主机上 |
system | yes、no(Default) | 是否创建系统组 |
范例1:创建
news
基本组,指定gid
为9999
[root@manager ~]# ansible webservers -m group -a "name=news gid=9999 state=present"
1范例2:创建
http
系统组,指定gid
为8888
[root@manager ~]# ansible webservers -m group -a "name=http gid=8888 system=true state=present"
1范例3:删除
news
基本组[root@manager ~]# ansible webservers -m group -a "name=news state=absent"
1
# user模块
功能:管理被控端用户;
参数 | 选项 | 含义 |
---|---|---|
name | 创建或删除的用户名 | |
uid | 为用户设置可选uid | |
group | 为用户设置主要的组 | |
groups | 为用户设置附加的组 | |
shell | present(Default)、absent | 为用户设置登陆时的Shell |
create_home | yes(Default)、no | 为用户创建主目录 |
state | present(Default)、absent | 用户是否应该存在 |
remove | yes、no(Default) | 删除与用户关联的目录,只有当state=absent时生效 |
generate_ssh_key | yes、no(Default) | 为相关用户生成ssh密钥。不会覆盖现有的ssh密钥 |
ssh_key_bits | 2048 | 创建用户ssh密钥中位数 |
ssh_key_file | .ssh/id_rsa(Default) | 可以实现ssh密钥改名,或变更存放ssh密钥位置 |
范例1:创建
joh
用户,uid
是1040
,主要的组是adm
[root@manager ~]# ansible webservers -m user -a "name=joh uid=1040 group=adm"
1范例2:创建
joh
用户,登录shell
是/sbin/nologin
,追加bin、sys
两个组[root@manager ~]# ansible webservers -m user -a "name=joh shell=/sbin/nologin groups=bin,sys"
1范例3:创建
jsm
用户,为其添加123
作为登录密码,并且创建家目录[root@manager ~]# ansible localhost -m debug -a "msg={{ '123' | password_hash('sha512', 'sal1t') }}" $6$salt$jkH [root@manager ~]# ansible webservers -m user -a 'name=jsm password="$6$salt$jkH" create_home=yes'
1
2
3范例4:示例四、移除
joh
用户[root@manager ~]# ansible webservers -m user -a "name=joh remove=yes state=absent"
1范例5:创建
http
用户,并为该用户创建2048
字节的私钥,存放在~/http/.ssh/id_rsa
[root@manager ~]# ansible webservers -m user -a "name=http uid=8888 group=8888 generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"
1
# cron模块
功能:管理被控端计划任务;
参数 | 选项 | 含义 |
---|---|---|
name | 定时任务基本描述 | |
job | 定时任务要执行的命令 | |
minute | (Default)、0-59 | 分 |
hour | (Default)、0-23 | 时 |
day | (Default)、1-31 | 日 |
month | (Default)、1-12 | 月 |
weekday | (Default)、0-6 | 周 |
范例1:添加定时任务,每分钟执行一次ls,
* * * * * ls >/dev/null
[root@manager ~]# ansible webservers -m cron -a "name='cron01' job='ls >/dev/null'"
1范例2:添加定时任务,每天的凌晨2点和凌晨5点执行一次ls,
0 2,5 * * * ls >/dev/null
[root@manager ~]# ansible webserver -m cron -a "name='cron02' minute=0 hour=2,5 job='ls >/dev/null'"
1范例3:关闭定时任务,使定时任务失效
[root@manager ~]# ansible webservers -m cron -a "name='cron02' minute=0 hour=2,5 job='ls >/dev/null' disabled=yes"
1
# mount模块
功能:管理被控端设备挂载;
参数 | 选项 | 含义 |
---|---|---|
src | 本地或远程设备的路径 | |
path | 设备挂载至本地的路径 | |
fstype | xfs、nfs... | 文件系统类型 |
opts | defaults、ro... | 挂载的参数 |
state | absent、mounted、unmounted | 挂载的状态 |
环境准备:将Ansible
作为nfs
服务端,10.0.0.12、10.0.0.13
作为nfs
客户端挂载;
```sh
[root@manager ~]# ansible localhost -m yum -a 'name=nfs-utils state=present'
[root@manager ~]# ansible localhost -m file -a 'path=/ops state=directory onwer=nfsnobody group=nfsnobody'
[root@manager ~]# ansible localhost -m copy -a 'content="/ops 10.0.0.0/24(rw,sync)" dest=/etc/exports'
[root@manager ~]# ansible localhost -m service -a "name=nfs state=restarted"
```
范例1:挂载
nfs
至本地的/opt
目录,并实现开机自动挂载[root@manager ~]# ansible webservers -m mount -a "src=10.0.0.11:/ops path=/opt fstype=nfs opts=defaults state=mounted"
1范例2:临时卸载
nfs
的挂载,但不清理/etc/fstab
[root@manager ~]# ansible webservers -m mount -a "src=10.0.0.11:/ops path=/opt fstype=nfs opts=defaults state=unmounted"
1范例3:永久卸载
nfs
挂载,同时清理/etc/fstab
[root@manager ~]# ansible webservers -m mount -a "src=10.0.0.11:/ops path=/opt fstype=nfs opts=defaults state=absent"
1
# hostname模块
功能:管理被控端主机名称;
范例:设置主机名称为
ansible-hostname
[root@manager ~]# ansible localhost -m hostname -a 'name=ansible-hostname'
1
# archive模块
功能:在被控端打包与压缩;
参数 | 选项 | 含义 |
---|---|---|
path | 要压缩的文件或目录 | |
dest | 压缩后的文件 | |
format | bz2、gz、tar、xz、zip | 指定打包压缩的类型 |
范例:将
/var/log
目录压缩为tar
格式,并存储至/opt
目录下;[root@manager ~]# ansible localhost -m archive -a 'path=/var/log dest=/opt/log.tar.gz format=gz'
1
# unarchive模块
功能:解包与解压缩;
参数 | 选项 | 含义 |
---|---|---|
src | 要解压的软件包路径 | |
dest | 解压到目标位置 | |
remote_src | yes、no(default) | yes:要解压的包在被控端、no:要解压的包在控制端 |
范例:解压控制端的包;
# 被控; [root@manager ~]# ansible webservers -m copy -a 'src=php.zip dest=/root/' [root@manager ~]# ansible webservers -m unarchive -a 'src=/root/php.zip dest=/tmp/ remote_src=yes' # 控制(*): [root@manager ~]# ansible webservers -m unarchive -a 'src=/root/php.zip dest=/tmp/'
1
2
3
4
5
6
# selinux模块
功能:管理SELINUX防火墙;
参数 | 选项 | 含义 |
---|---|---|
state | enforcing、permissive、disabled | Selinux模式 |
范例1:设置
selinux
为enforcing
[root@manager ~]# ansible webservers -m selinux -a "state=enforcing"
1范例2:设置
selinux
为disabled
[root@manager ~]# ansible webservers -m selinux -a "state=disabled"
1