Ansible常用模块使用

时间:2021-02-08 14:41:59

     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