Linux部署并配置ansible及相关模块介绍

安装与配置Ansible都是极为简单的,在Linux系统中直接yum安装即可,其Hosts和cfg配置文件都有模板,只不过被“#”号注释了。Ansible的模块也不多,本文对每个模块都进行简单的讲解或举例。

安装与配置

安装并配置Ansible

yum -y install ansible

修改配置/etc/ansible/ansible.cfg,具体参数请参照官方文档,举个例子:

forks = 5
host_key_checking = False
inventory = /etc/ansible/hosts
library = /usr/share/ansible
log_path = /var/log/ansible.log
remote_port = 22
sudo_user = root
timeout = 60

修改配置/etc/ansible/hosts,在配置文件中有各种配置案例,直接“照猫画虎”即可。

配置免密登录

以管控主机192.168.1.69为例,命令如下:

# 以下命令在服务端执行
ssh-keygen -t rsa
ssh-copy-id root@192.168.1.69

Ansible命令介绍

ansible命令集

名称 说明
/usr/bin/ansible 临时命令执行
/usr/bin/ansible-doc 模块功能查看工具
/usr/bin/ansible-galaxy 用于查找、下载、评论各种社区开发的 Ansible 角色
/usr/bin/ansible-playbook 定制自动化的任务集编排工具
/usr/bin/ansible-pull 远程执行命令,拉取配置
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 与用户交互的命令执行工具

最常用的ansible-doc命令,用于查看所支持的模块的文件信息,支持shell,可以通过h获取帮助。

参数 说明
-h, --help 帮助
-l, --list 列出可用的模块
-M <PATH>, --module-path=<PATH> 指定模块的路径
-s, --snippet 查看playbook制定模块的用法
--version 查看ansible-doc的版本号

Ansible模块介绍

script模块

在客户机运行服务端的脚本。

ansible testhosts -m script -a '/data/scripts/test.sh'

yum模块

参数 说明
conf_file 设定yum安装时所依赖的配置文件
disable_gpg_check 是否禁止GPG检验,仅针对“present”或“latest”
disablerepo 临时禁止使用yum源
enablerepo 使用临时yum源
name 软件名称
state=present|latest|absent 安装|安装最新|卸载
update_cache 强制更新yum缓存
ansible testhosts -m yum -a 'name=ntpdate state=present'

service模块

参数 说明
arguments 命令行提供额外的参数
enabled=true|false 是否开机启动
name 服务名称
runlevel 开机启动级别
sleep 重启服务时,stop后是否等待x秒后再start
state=started|stopped|restarted|reloaded 启动服务|停止服务|重启服务|重载配置
ansible testnginxs -m service -a 'name=nginx state=stopped enabled=true'

ping模块

ansible all -m ping

command模块

在客户端执行命令,不支持管道命令,比如:“|、<、>、;、&、`、$”等。

参数 说明
chdir 切换到该目录后再执行命令
creates 创建文件,如果文件存在则不执行
executable 执行shell脚本,必须使用绝对路径
free_form 执行linux命令,一般使用ansible的-a参数代替
removes 删除文件,如果文件不存在则不执行
ansible all -m command -a 'executable=/opt/scripts/sample.sh'
ansible all -m command -a 'chdir=/opt/scripts ll'
ansible all -m command -a 'removes=/data/scripts/test.sh'

shell模块

在客户机上执行shell命令,支持所有shell。

ansible testhosts -m shell -a 'cat /var/logs/mysql.log | grep "root"'

cron模块

参数 说明
backup=yes|no 创建crontab备份
cron_file 指定使用cron.d中的其他配置文件
minute
hour
day
month
weekday
name 定时任务名称
job 所执行的命令
special_time=
reboot|annually|monthly|weekly|daily|hourly
重启时|每年|每月|每周|每日|每时
state=present|absent 添加|删除
user 执行任务的用户
ansible testhosts -m cron -a 'name="ntpdate4time" hour="*/2" job="ntpdate 192.168.1.2" '

copy模块

参数 说明
backup 如果目标文件已经存在,则覆盖前进行文件备份(含时间信息)
content 目标文件的内容
dest 目标文件的绝对路径,若源是目录,则目标也必须是目录
directory_mode 设定目录权限,不指定时为系统默认权限
force 强制覆盖已经存在的目标文件,默认为yes
others 可以使用所有file模块里的选项
src 被复制到远程主机的本地文件或目录
ansible testhosts -m copy -a "src=/data/src/testa.txt dest=/data/dest/"
ansible testhosts -m copy -a 'content="Hello,\nLiuZhilin!" dest=/data/dest/liuzhilin.sh mode=666'

file模块

参数 说明
force 强制创建软链接
group 设定文件或目录的group
owner 设定文件或目录的user
mode 设定文件或目录的权限
path 设定文件或目录的路径
recurse 设置目录中的文件的属性
src 被链接的源文件的路径,只针对于state=link
dest 链接文件的路径,只针对于state=link

state参数说明:

参数 说明
absent 删除文件、目录、链接文件
directory 如果目录不存在,则创建目录
file 即使文件不存在,也不会被创建
hard 创建硬链接
link 创建软链接
touch 创建文件,如果文件或目录已经存在,则只更新其最后修改时间
ansible all -m file -a 'path=/opt/project state=directory'

ansible testhosts -m file -a 'path=/data/autobackup.sh state=touch'
ansible testhosts -m file -a "path=/opt/testlinked src=/data/autobackup.sh state=link"
ansible testhosts -m file -a "path=/opt/testlinked state=absent"

fetch模块

参数 说明
dest 目标文件夹,用于存放从客户机获取的文件
src 从客户机获取的文件,只能是文件,不能是目录
ansible testhosts -m fetch -a 'src=/var/log/mysql.log dest=/data/logs'

hostname模块

ansible 192.168.1.69 -m hostname -a "name=test69"

user模块

参数 说明
comment 用户描述
createhome 是否创建家目录
force 当state=absent时,效果与userdel-force相同
group 指定基本组
groups 指定附加组,使用“groups=”删除所有组
home 指定用户家目录
move_home 移动用户家目录
name 指定用户账号
non_unique 允许改变非唯一的用户ID
password 指定用户密码
remove 当state=absent时,效果与与userdel-remove相同
shell 指定默认shell
state 默认为创建用户,使用“=absent”删除用户
system 创建系统用户,不能将已有用户设置为系统用户
uid 指定用户uid
update_password 更新用户密码
ansible testhosts -m user -a 'name=liuzhilin comment="My name is liuzhilin" uid=1001 shell=/bin/newshell home=/home/newhome'

group模块

参数 说明
gid 设置组GID
name 设置组名称
state 默认为创建组,使用“=absent”删除组
system 当“=yes”创建系统组
ansible testhosts -m group -a 'name=andy state=present'

setup模块

# 查看主机信息
ansible 192.168.1.69 -m setup
# 查看主机内存信息
ansible 192.168.1.69 -m setup -a 'filter=ansible*mb'
# 查看地接口为eth0-2的网卡信息
ansible 192.168.1.68 -m setup -a 'filter=ansible_ens3[2-3]'
# 将所有主机的信息保存到/data/hosts目录下,同时录入ansible/hosts中
ansible all -m setup --tree /data/hosts

原创文章禁止转载:技术学堂 » Linux部署并配置ansible及相关模块介绍

精彩评论

2+7=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏