安装与配置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及相关模块介绍