Ansible官方提供了非常多的模块,还有若干第三方模块,我们也可以自己编写模块。
Ansible对远程服务器的操作实际是通过模块完成的,先将模块拷贝到远程服务器,完成操作后,然后在远程服务器上删除该模块。
查看模块帮助信息:
查看模块列表:
ansible-doc -l
查看具体模块帮助信息,以file为例
ansible-doc file
ping模块
测试现有的SSH参数能否连远程服务器。
ansible webservers -m ping
远程命令模块
commond 不能使用管道,参数chdir可以切换到指定目录,再执行命令。
raw 可以使用管道,相当于使用SSH直接执行Linux命令。
shell shell模块可以执行远程服务器上的脚本,脚本文件要使用绝对路径
script 可以在远程服务器上执行主控节点上的脚本文件。
ansible webservers -m script -a 'test.sh'
file模块
file模块用于对远程服务器上的文件(包块链接和目录)进行操作,包括修改权限,修改属主,创建删除文件。
重要选项:
- path: 指定文件/目录的路径
- recurse: 递归设置目录属性
- group: 定义组
- mode: 定义权限
- src: 要被链接的源文件路径
- dest: 被链接到的路径
- owner 定义文件所属主
- state: 取值为directory是,目录不存在时,创建目录,file时,即使文件不存在,文件也不会被创建,link和hard时,创建软硬链接,tocuh时,同Linux,absent,删除文件或者目录或者链接。
#创建一个目录
ansible webservers -m file -a 'path=/tmp/dd state=directory mode=0755'
#修改文件权限
ansible webservers -m file -a 'path=/tmp/dd state=touch mode=0411'
#创建一个软链接
ansible webservers -m file -a 'src=/tmp/dd dest=/tmp/ddl state=link'
#修改所有者
ansible webservers -m file -a 'path=/tmp/dd owner=scott group=scott' -become
#删除文件
ansible webservers -m file -a 'path=/tmp/ddl state=absent'
copy模块
类似于scp,将本地文件拷贝到远程服务器,但是它更加强大,它还可以修改文件的权限和所属。
- src: 文件地址,可以是相对路径也可以是绝对路径,以“/”结尾,复制目录里面的内容,如果没使用“/”结尾则复制整个目录。
- dest : 文件复制目的地,要使用绝对路径
- force: 默认值是yes,表示目标主机包含该文件,内容不同时会强制覆盖,如果为no,只有文件不存在时才会复制。
- backup: 默认是no,如果为yes,覆盖前会将文件备份
- directory_mode: 递归设置目录权限
- othes: 所有file的模块选项都可以在这使用。
#复制文件并修改所属主,如果文件已经存在,则进行备份。
ansible webservers -m copy -a 'src=/tmp/data.txt dest=/tmp/data.txt owner=root backup=yes' -become
user/group
对用户和组的操作。
# 创建一个用户,并生成密钥对。
ansible webservers -m user -a 'name=dev1 comment="dev" group=root uid=1099 generate_ssh_key=yes ssh_key_bits=2048' -become
# 删除用户
ansible webservers -m user -a 'name=dev1 state=absent' -become
yum/apt
安装和删除软件
#安装软件
ansible webservers -m yum -a 'name=git state=present' -become
#删除软件
ansible webservers -m yum -a 'name=git state=absent' -become