command和shell
command和shell的区别
command模块的命令不启动shell, 直接通过ssh执行命令
command不支持bash的特性, 如管道和重定向等功能
shell模块会启动shell执行命令
不可以使用shell模块执行交互命令, 如vim,top等
shell模块支持判断(creates)
creates文件名: 文件存在, 不执行shell命令
[root@control ansible]# ansible test -m shell -a "ps aux | wc -l" #进程数量
[root@control ansible]# ansible test -m shell -a "who" #登陆信息
[root@control ansible]# ansible test -m shell -a "touch /tmp/txt.txt"
script模块
script允许在本地写脚本, 拷贝到被管理端并执行脚本
脚本不是shell脚本(如Python,perl脚本等), 可以没有-x
[root@control ansible]# vim /root/ansible/test.sh
#!/bin/bash
yum -y install httpd
systemctl start httpd
[root@control ansible]# ansible test -m script -a "./test.sh"
登录到被控主机验证结果
[root@node1 ~]# rpm -q httpd #查询httpd软件是否安装
user模块
user模块可以实现Linux系统账户管理
# 对test组中的所有主机创建系统账户tuser1
[root@control ansible]# ansible test -m user -a "name=tuser1"
# 对test组中的所有主机创建系统账户tuser2并设置对应的账户属性
[root@control ansible]# ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"
# 将test主机组中所有主机的tuser1用户密码修改为abc
[root@control ansible]# ansible test -m user \
-a "name=tuser1 password={{'abc'| password_hash('sha512')}}"
# 修改test主机组中所有主机的tuser1用户的附加组
[root@control ansible]# ansible test -m user -a "name=tuser1 groups=root,adm"
# 删除test主机组中所有主机的tuser1用户
[root@control ansible]# ansible test -m user -a "name=tuser1 state=absent"
# 删除test主机组中所有主机的tuser2用户,账户同时删除其家目录、邮箱
[root@control ansible]# ansible test -m user \
-a "name=tuser2 state=absent remove=true"
setup模块
ansible_facts用于采集被管理设备的系统信息
所有收集的信息都被保存在变量中
每次执行playbook默认第一个任务就是Gathering Facts
使用setup模块可以查看收集到的facts信息
找出下列facts信息(有父子关系时使用.分隔)
[root@control ansible]# ansible test -m setup
[root@control ansible]# ansible test -m setup
node10 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.4.10"
], 省略部分内容
file模块
file模块可以创建文件、目录、连接,修改权限与属性等
幂等性: 任意次执行所产生的影响与一次执行的影响相同
# 对test主机组中的主机新建文件/tmp/file.txt
[root@control ansible]# ansible test -m file -a "path=/tmp/file.txt state=touch"
# 对test主机组中的主机新建目录/tmp/mydir
[root@control ansible]# ansible test -m file -a "path=/tmp/mydir state=directory"
# 修改test主机组中的主机/tmp/file.txt文件归属关系及权限
[root@control ansible]# ansible test -m file \
-a "path=/tmp/file.txt owner=sshd group=adm mode=0777"
# 删除test主机组中主机的/tmp/mydir目录
[root@control ansible]# ansible test -m file -a "path=/tmp/mydir state=absent"
# 删除test主机组中主机的/tmp/file.txt目录
[root@control ansible]# ansible test -m file -a "path=/tmp/file.txt state=absent"
# test主机组中的主机给/etc/hosts文件创建一个链接文件/tmp/host.txt
[root@control ansible]# ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link"
copy模块
将文件拷贝到远程主机
backup=yes 如果目标主机有同名文件, 则先备份
control# 主机组准备素材文件
[root@control ansible]# echo AAA > ~/a3.txt #新建测试文件
[root@control ansible]# ansible test -m copy -a "src=~/a3.txt dest=/root/"
[root@control ansible]# ansible test -m copy -a "src=~/a3.txt dest=/root/3a.txt"
# 通过content可以直接提供文件内容,\n代表回车
[root@control ansible]# ansible test -m copy -a "content='hello the world\n' dest=/root/new.txt"
fetch模块
与copy类似, 但是作用相反
可以将其它主机的文件拷贝到本地
# 将远程主机的hostname文件下载到本地家目录
[root@control ansible]# ansible test -m fetch -a "src=/etc/hostname dest=~/"
[root@control ansible]# ls ~/
lineinfile|replace模块
在修改单个文件的单行内容时可以使用lineinfile模块
lineinfile会替换一整行, replace可以替换关键词
ineinfile模块
# 在/etc/issue文件中添加一行内容hello world,默认添加到最后
[root@control ansible]# ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
# 基于幂等原则,重复执行,不会创建多行内容
[root@control ansible]# ansible test -m lineinfile -a "path=/etc/issue line='helle world'"
[root@control ansible]# ansible test -a "tail -2 /etc/issue" 可以通过tail验证
replace模块
# 将/etc/issue文件全文所有的Kernel替换为Ocean
[root@control ansible]# ansible test -m replace \
-a "path=/etc/issue regexp=Kernel replace=Ocean"
[root@control ansible]# ansible test -a "cat /etc/issue" 可以通过cat验证
yum模块
使用yum模块可以安装, 卸载,升级软件包
staten: present(安装) |absent(卸载)|atest(升级)
安装unzip软件包
[root@control ansible]# ansible test -m yum -a "name=unzip state=present"
升级unzip软件包,软件名称可以是*,代表升级所有软件包
[root@control ansible]# ansible test -m yum -a "name=unzip state=latest"
卸载unzip软件包
[root@control ansible]# ansible test -m yum -a "name=unzip state=absent"
yum_repository模块
使用yum_reposition可以创建或修改yum源配置文件
使用yum_repository模块为test主机组中所有主机配置yum客户端文件
[root@control ansible]# ansible test -m yum_repository -a "name=myyum description=hello baseurl=http://192.168.4.254/centos gpgcheck=no"
结果如下
#新建一个yum源配置文件/etc/yum.repos.d/myyum.repo
#yum源文件名为myyum,该文件的内容如下:
[myyum]
baseurl = http://192.168.4.254/centos
gpgcheck = 0
name = hello
[root@control ansible]# ansible test -a "cat /etc/yum.repos.d/myyum.repo" #cat可以验证
删除test主机组中所有主机的yum客户端文件myyum.repo
[root@control ansible]# ansible test -m yum_repository -a "name=myyum state=absent"
service模块
service为服务管理模块(启动,关闭,重启服务等)
state:started|stopped|restarted
enabled:yes设置开机启动
[root@control ansible]# ansible test -m yum -a "name=httpd" #安装httpd软件包
[root@control ansible]# ansible test -m service -a "name=httpd state=started"
[root@control ansible]# ansible test -m service -a "name=httpd state=stopped"
[root@control ansible]# ansible test -m service -a "name=httpd state=restarted"
[root@control ansible]# ansible test -m service -a "name=httpd enabled=yes"
评论区