Ansible 模块

介绍就不多说了,教程都有
管理节点:172.16.50.200
被管理节点:172.16.50.210
在管理节点安装
yum install epel-release -y
yum install ansible -y
 
授信
将管理节点的公钥传输至被管理节点
管理节点生成密钥对(存在的话可以忽略)
ssh-keygen -t rsa
传输公钥至被管理节点(也可直接填入至被管理节点的authorized_keys)
ssh-copy-id root@172.16.50.210
 
在管理节点添加被管理节点的host并测试
vi /etc/ansible/hosts
172.16.50.210
ansible all -m ping或者ansible all -i 172.16.50.210, -m ping
# 注意 -i指定列表,如果列表里面只有一个数据,则还是需要加个逗号,因为它是python的list
172.16.50.210 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
 
发布
在管理节点创建一个文件,并将文件发布到被管理节点
touch test.conf
ansible all -i 172.16.50.210, -m copy -a "src=/root/test.conf dest=/tmp/test.conf"
选项参数解释
all:资产选择器,匹配指定的所有资产,是-i参数的一部分
-i:指定ansible的资产,也就是被管理的服务器,python list形式
-m:指定运行的模块,例如copy,ping
-a:指定模块的参数,copy指定了src和dest参数
ansible的默认配置文件为/etc/ansible/ansible.cfg
ansible资产
默认是在/etc/ansible/hosts,也可以自定义指定文件,还可以通过数据库读取等等
文件格式大概如下:
cat inventory.ini
1.1.1.1
2.2.2.2
# 支持正则表达式
3.3.3.[1:3]
test01.server.com
test02.server.com
test[03:08].server.com
# 支持[]分组
[web_servers]
192.168.1.1
192.168.1.2
[db_server]
192.168.2.1
192.168.2.2
# 支持大组里面嵌套小组
[all_servers]
[all_servers:children]
web_servers
db_servers

 

资产选择器
命令格式
ansible PATTERN -i inventory -m module -a argument
PATTERN:可以是-i参数里面的一条记录,或者是一个组,或者all等
inventory:资产,可以是list,也可以是文件,可以是从其他地方获取的东西
module:选择的模块
argument:模块的参数
Ansible ad-hoc命令
直接通过ansible执行命令,不保存,执行的命令
Ansible playbook命令
执行一些复杂的命令,例如需要逻辑判断
二者的关系类似于在命令行敲入shell命令和shell scripts两者之间的关系
 
ansible模块类型
三种:核心模块(core module)、附加模块(extra module)、用户自定义模块(consume module)
其中,核心模块是官方提供,附加模块是社区(openstack、docker等)提供,默认都已安装
 
查询某个模块的文档
ansible-doc module
例如 ansible-doc yum #查看yum模块的信息
ansible-doc -s yum # -s简洁查看
 
常用模块
1.command和shell模块
这两个命令都是在远程服务器(被管理节点)上执行命令
#输出被管理节点的IP,以下三个命令输出相同,不指定-m,默认使用command模块
ansible all -a "ip a"
ansible all -m shell -a "ip a"
ansible all -m command -a "ip a"
# 由于我打算使用默认的/etc/ansible/hosts,并在文件里仅添加了被控主机IP,所以我并没有使用-i 指定ansible资产
 
两个模块的差异
shell模块可以执行shell的内置命令和特性(如管道符)
commend模块不可以执行shell的内置命令和特性
2.script模块
此模块可以将管理节点上的脚本传递到被管理节点(远程服务器)上面执行。
# 创建一个脚本 echo "touch /tmp/hello.txt" >/tmp/hello.sh ansible all -m script -a "/tmp/hello.sh"
# 验证
ansible all -m shell -a "ls /tmp/hello.txt"
172.16.50.210 | CHANGED | rc=0 >> /tmp/hello.txt
3.copy模块
copy模块主要用于管理节点和被管理节点之间的文件拷贝
参数:
src 指定拷贝文件的源地址
dest 指定拷贝文件的目标地址
backup 拷贝文件之前,若被管理节点原始文件发生变化,则对目标文件进行备份
woner 指定新拷贝文件的所有者
group 指定新拷贝文件的所属组
mode 指定新拷贝文件的权限
# -a指定多个参数写法如下
ansible all -m copy -a "src=/tmp/test dest=/tmp/test owner=mysql group=mysql mode=755 backup=yes"
4.yum_repository
添加 yum仓库
参数:
name 仓库名称,就是仓库文件中第一行中括号之中的名称,是必须的参数
description 仓库描述信息,添加时必须的参数
baseurl yum存储库repodata目录所在的url,也可以是多个url的列表,必须的参数
file 仓库文件保存到被管理服务器的文件名,不包含.repo 默认是name的值
state preset确认添加仓库文件,absent确认删除仓库文件
gpgcheck 是否检查GPG yes|no,没有默认值,使用/etc/yum.conf中的配置
5.yum模块
等同于Linux的yum
参数
name 要安装的软件名,多个软件包用,隔开
state 对当前指定的软件安装、移除操作
支持的参数
-present 确认已经安装,但不升级
-installed 确认已经安装
-latest 确保安装,且升级为最新
-absent和remove 确认已移除
6.systemd模块
centos6之前使用service模块
管理被控节点上的systemd服务
参数
daemon_reload 重新载入systemd,扫描新的或有变动的单元
enable 是否开机自启 yes|no
name 必选,服务名称
state 对当前服务执行启动,停止,重启,重新加载等操作(started,stopped,restarted,reloaded)
7.group模块
在被管理节点上,对组进行管理
参数
name 组名称,必选
system 是否为系统组,yes|no,默认为no
state 删除或者创建 present|absent 默认是present
ansible all -m group -a "name=mysql"
8.user模块
在被管理节点上,对用户进行管理
参数
name 用户名称,必选
password 设置用户的密码,默认没有,这里接受的是一个加密的值,因为会直接存到shadow
update_password 假如设置的密码和原密码不同,就会更新为新密码
home 指定用户的家目录
shell 设定用户的shell
comment 用户的描述信息
create_home 在创建用户时,是否创建其家目录,默认创建,假如不创建,设置为no
group 设置用户的主组
groups 将用户加入到多个其他组中,多个用逗号隔开
默认会把用户从其他已经加入的组中删除
append yes|no 和groups配合使用,yes时不会将用户和其它已经加入的组中删除
system 设置为yes时,将会创建一个系统账号
expires 设置用户的过期时间 值为时间戳
generate_ssh_key 设置为yes将为用户生成密钥,这不会覆盖原来的密钥
ssh_key_type 指定用户的密钥类型,默认为rsa
start 添加或删除用户 present|absent 默认为present
remove 当与start=absent一起使用时,删除一个用户及关联的目录,如家目录,邮箱目录,可选值yes|no
ansible all -m user -a "name=mysql create_home=no group=mysql"
9.file模块
参数
owner 定义文件/目录的属主
group 定义文件/目录的属组
mode 定义文件/目录的权限
path 必选,定义路径
recurse 递归设置目录的属性
src 要被(软/硬)链接的源文件的路径,只应用于state=link的情况
dest 要被链接的路径,只应用于state=link的情况
state
directory 如果目录不存在,创建目录
file 文件不存在,不创建文件,存在则返回文件里的信息,常用于检查文件是否存在
link 创建软链接
hard 创建硬链接
touch 文件不存在,则新建,存在,则更新最后修改时间
absent 删除文件,目录或者取消链接
10.cron
管理远程节点的cron服务,等同于linux中的计划任务
(注意:使用ansible创建的计划任务不能使用本地crontab -e进行编辑,否则ansible无法再次操作)
参数
name 指定一个cron job的名字,一定要指定,方便删除
minute 分钟,默认是* 每分钟,可以设置为(0-59,*,*/2)等格式
hour 小时,默认是* 每小时,可以设置为(0-23,*,*/2)等格式
day 天,默认是* 每天,可以设置为(1-31,*,*/2)等格式
month 月,默认是* 每月,可以设置为(1-12,*,*/2)等格式
weekday 周,默认是* 每周,可以设置为(0-6,*)等格式
job 指定要执行的内容,通常为一个脚本,或者一段内容
state 指定这个job的状态,可以是新增present或者删除absent,默认为新增
11.debug模块
debug模块主要用于调试时使用,通常的作用是讲一个变量的值打印出来
参数
var 打印一个指定的变量值
msg 打印一段可以格式化的字符串
ansible all -m debug -a "var=role" -e "role=web"
172.16.50.210 | SUCCESS => { "role": "web" }
ansible all -m debug -a "msg='role is {{role}}'" -e "role=web"
172.16.50.210 | SUCCESS => { "msg": "role is web" }
 
12.template模块
template模块使用了jinjia2格式作为文件模板,可以进行文档内变量的替换
他的每次使用都会被ansible标记为“changed”,文件以.j2结尾
参数:
src 指定控制端的文件路径
dest 指定被控端的文件路径
owner 指定文件的属主
group 指定文件的属组
mode 指定文件的权限
backup 创建一个包含时间戳信息的备份文件,yes/no 方便回滚
用法与copy模块基本一致,强大之处在于使用变量替换,就是可以把传递给ansible变量的值替换到模板文件之中
13.lininfile模块
在被管理节点,用正则匹配的方式对目标文件的一行内容修改删除等操作
如果是在一个文件中把所有匹配到的多行都进行统一处理,使用replace模块
如果想一次性对文件中的多行进行添加/更新/删除等操作,使用blockinfile模块
参数
path 目标文件路径,必须
state 可选值present替换(默认),absent删除
regexp 在文件的每一行中查找的正则表达式,对于state=present,仅找到的最后一行进行替换
line 要在文件中插入/替换的行,需要state=present
create 文件不存在时,是否要创建文件并添加内容。yes/no
 
 

posted @ 2020-12-01 16:46  菠菜不要香菜  阅读(112)  评论(0编辑  收藏  举报