ansible常见模块及使用方法

目录

1、查看支持的模块

2、获取模块的帮助

3、3个远程命令模块的区别

3.1、command模块

3.2、shell模块

3.3、script模块

 4、copy模块

4.1、 copy模块应用案例

5、file模块

5.1、file模块应用案例

6、ping模块

7、yum模块

7.1、yum模块应用案例

 8、service模块

8.1、service模块案例

8.2、查看httpd状态

 9、user模块

9.1、user模块案例

 10、fetch模块

 11、group模块

11.1、group模块案例


1、查看支持的模块

	[root@cong11 ~]# ansible-doc -l    
	[root@cong11 ~]# ansible-doc -l | wc -l  #查看支持的模块个数
	[root@cong11 ~]# ansible --version      #查看我们的ansible版本号

2、获取模块的帮助

    ansible-doc 模块名 或者ansible-doc -s 模块名  #获取指定模块帮助信息说明
    这里我们使用ansible-doc获取下command模块的使用方式。
 

	[root@cong11 ~]# ansible-doc command
	[root@cong11 ~]# ansible-doc -s command

3、3个远程命令模块的区别

3.1、command模块

command 模块可以帮助我们在远程主机上执行命令。

注意:使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的 shell 模块。

3.2、shell模块

shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理,shell模块支持管道与重定向等符号;所以,我们在终端输入的各种命令方式,都可以使用。

注:但是我们自己定义在/etc/profile或~/.bash_profile中的环境变量,shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句

3.3、script模块

script只能执行脚本,不能调用其他指令,但是script执行的是存放在ansbile管理端上的脚本。script模块跟上面类似,但执行脚本只要两步
第一个步骤:编写一个脚本
第二个步骤:运行ansible命令执行脚本
使用script模块可以在本地写一个脚本,在远程服务器上执行:
在ansible管理端编写一个脚本,这里还是使用上面的test.sh脚本为例:
    总结:script和shell的区别是一个执行控制端的脚本,一个执行远程端的脚本。

 4、copy模块

    实现主控端向目标主机拷贝文件或目录,类似scp功能
    copy模块常用选项:
    backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no 
    content:用于替代"src",可以直接设定指定文件的值 
    dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录 
    directory_mode:递归的设定目录的权限,默认为系统默认权限
    force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
    src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

4.1、 copy模块应用案例

例1:使用src,把ansible主机上的/etc/hosts文件复制到主机组中机器的/tmp目录下

[root@cong11 ~]# ansible web_servers -m copy -a 'src=/etc/hosts dest=/tmp/ owner=root group=root mode=640 backup=yes'

说明:    

    #src 主控端文件位置(源文件地址)
    #dest 被控端目标位置(目标地址)
    #owner 文件复制过去后的所有者
    #group 文件复制过去后的所属组

    #content 将指定内容覆盖写入到目标主机文件中
    #force=no 当主控端拷贝的文件名和目标名一致,但是内容不一致,放弃拷贝
    #force=yes 当主控端拷贝的文件名和目标名一致,但是内容不一致,则进行覆盖
    #mode 文件的权限设定
    #backup=yes 如果目标位置存在同名的文件,在覆盖之前将原文件备份

ansible常见模块及使用方法_第1张图片

 192.168.121.13 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true,  #是否对目标主机信息进行改变
    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
    "dest": "/tmp/hosts",  #显示目标路径信息
    "gid": 0,    #复制后的文件gid信息
    "group": "root",   #显示复制后文件属组信息
    "md5sum": "54fb6627dbaa37721048e4549db3224d",  #hosts文件的md5值
    "mode": "0640",   #显示复制后文件的权限信息
    "owner": "root",   #显示复制后文件的属主信息
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 158,    #显示复制后文件的大小信息
    "src": "/root/.ansible/tmp/ansible-tmp-1571668045.65-135407232805638/source", 
    "state": "file",   #显示当前操作的是一个文件
    "uid": 0   #显示复制后文件uid信息
}
192.168.121.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
    "dest": "/tmp/hosts", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "54fb6627dbaa37721048e4549db3224d", 
    "mode": "0640", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 158, 
    "src": "/root/.ansible/tmp/ansible-tmp-1571668045.63-176379773679750/source", 
    "state": "file", 
    "uid": 0
}

 查看目标主机是否复制成功

[root@cong11 ~]# ansible web_servers -m shell -a "ls -l /tmp/hosts"

 例2:使用content将内容写入文件

[root@cong11 ~]# ansible web_servers -m copy -a 'content="Hello ansible\nyou are clever!\n" dest=/tmp/ansible.txt'

ansible常见模块及使用方法_第2张图片

 目标主机结果如下图:

注:如果目标主机没有该文件则会新建

5、file模块

file模块主要用于远程主机上的文件操作,如修改文件属性(权限、属主、属组)和创建文件、目录、符号链接等,file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no 
group:定义文件/目录的属组 
mode:定义文件/目录的权限 
owner:定义文件/目录的属主 
path:必选项,定义文件/目录的路径 
recurse:递归的设置文件的属性,只对目录有效 
src:要被链接的源文件的路径,只应用于state=link的情况 
dest:被链接到的路径,只应用于state=link的情况 
state: 
   directory:如果目录不存在,创建目录 
   file:不是用于创建文件,而是检查文件是否存在,主要用于检查文件是否存在的应用场景。
   link:创建软链接 
   hard:创建硬链接 
   touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 
   absent:删除目录、文件或者取消链接文件

5.1、file模块应用案例

例1:修改12,13上/tmp/hosts文件权限为777

[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/hosts mode=777"

ansible常见模块及使用方法_第3张图片

 查看文件权限

[root@cong12 ~]# ll /tmp/hosts

 例2:将12,13上的/tmp/hosts文件创建符号链接到/opt目录下

[root@cong11 ~]# ansible web_servers -m file -a "src=/tmp/hosts dest=/opt/hosts state=link"

ansible常见模块及使用方法_第4张图片

 查看创建的符号链接

[root@cong12 ~]# ll /opt/hosts

 删除链接文件

[root@cong11 ~]# ansible web_servers -m file -a "path=/opt/hosts state=absent"

例3:创建文件或目录

创建目录,如果它不存在

[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/dir1 state=directory"

touch创建空文件

[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/testfile1 state=touch"

6、ping模块

测试连接可通性,没有参数。通的话返回pong。

[root@cong11 ~]# ansible web_servers -m ping

7、yum模块

yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包。

    常用参数:

  •     name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
  •     state参数:用于指定软件包的状态 ,默认值为present,表示确保软件包已经安装,除了present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
  •     disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。
  •     update_cache参数:是否更新缓存,默认值时no
  •     enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
  •     disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。
  •     enablerepo 参数和 disablerepo 参数可以同时使用。

7.1、yum模块应用案例

    12,13两台主机安装httpd软件(12,13主机需要配置repo文件,指向yum源):

[root@cong11 ~]# ansible web_servers -m yum -a "name=httpd state=latest"

ansible常见模块及使用方法_第5张图片

 前往目标主机验证

[root@cong12 ~]# rpm -q httpd

 8、service模块

    Ansible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等。
    service模块详解:

  •     name参数:此参数用于指定需要操作的服务名称,比如 nginx,httpd。 
  •     state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的httpd,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted(重启)、reloaded。 
  •     enabled参数:此参数用于指定是否将服务设置为开机启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。
  •     runlevel参数:服务启动级别
  •     arguments参数:服务命令行参数传递

    注:想使用service模块启动服务,被启动的服务,必须可以使用service 命令启动或关闭

8.1、service模块案例

启动httpd服务并设置为开机自启

[root@cong11 ~]# ansible web_servers -m service -a "enabled=yes name=httpd state=started"

重启httpd服务

[root@cong11 ~]# ansible web_servers -m service -a "name=httpd state=restarted"

8.2、查看httpd状态

[root@cong11 ~]# ansible web_servers -m shell -a "ps -ef | grep httpd | grep -v 'grep'"

ansible常见模块及使用方法_第6张图片

 9、user模块

    user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
    常用参数

  •     name参数:必须参数,用于指定要操作的用户名称。
  •     group参数:此参数用于指定用户所在的基本组。
  •     gourps参数:此参数用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。
  •     append参数:如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合append参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no。
  •     shell参数:此参数用于指定用户的默认 shell。
  •     uid参数:此参数用于指定用户的 uid 号。
  •     expires参数:此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列,比如,你想要设置用户的过期日期为2020年12月31日,那么你首先要获取到2020年12月31日的 unix 时间戳,使用命令 “date -d 2020-12-31 +%s” 获取到的时间戳为1609344000,所以,当设置 expires= 1609344000 时,表示用户的过期时间为2020年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成18627(表示1970年1月1日到2020年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
  •     comment参数:此参数用于指定用户的注释信息。
  •     state参数:此参数用于指定用户是否存在于远程主机中,可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
  •     remove参数:当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel -r” 命令。
  •     password参数:此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串。

ansible常见模块及使用方法_第7张图片

     输入上述命令后,即可得到明文密码123456对应的加密字符串
    update_password参数:此参数有两个值可选,always 和 on_create,当此参数的值设置为always 时表示,如果 password 参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为 always,但是当此参数设置为 on_create 时,on_create只为新用户设置密码。
    generate_ssh_key参数:此参数默认值为 no,如果设置为 yes,表示为对应的用户生成 ssh 密钥对,默认在用户家目录的 ./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果同名的密钥已经存在与对应的目录中,原同名密钥并不会被覆盖(不做任何操作)。

9.1、user模块案例

例1:创建用户berry,登录shell为/sbin/nologin

[root@cong11 ~]# ansible web_servers -m user -a "name=berry shell=/sbin/nologin state=present"
[root@cong11 ~]# ansible web_servers -m shell -a 'grep "\" /etc/passwd'

 例2:删除刚才创建的用户berry及其宿主目录

[root@cong11 ~]# ansible web_servers -m user -a "name=berry remove=yes state=absent"
[root@cong11 ~]# ansible web_servers -m shell -a 'grep "\" /etc/passwd'

     注:注意该用户下不能有任何进程,否则会报错如下红色部分

 例3:创建一个用户,指定用户密码

使用python命令行生成密码的加密字符串

ansible常见模块及使用方法_第8张图片

 复制生成的加密字符串作为password的值

ansible web_servers -m user -a 'name=testops password="$6$Uwz.LOIcCbgZipq0$.P7EFqXKFvBdr.Rky4qOsRjTl1uMKZSVfYChLzL2kM5i78TpozD7jxwjyMhaInDxQ7iEOUL1lwfD0tiec6FDN/"'

ansible常见模块及使用方法_第9张图片

 10、fetch模块

从远程主机拉取文件到本地

示例:从192.168.121.12主机上拉取文件/etc/hosts到ansible本地的/tmp目录

[root@cong11 ~]# ansible 192.168.121.12 -m fetch -a 'src=/etc/hosts dest=/tmp'

ansible常见模块及使用方法_第10张图片

说明:fetch使用很简单,src和dest,dest只要指定一个接收目录,默认会在后面加上远程主机及src的路径。

 11、group模块

    group 模块可以帮助我们管理远程主机上的组。
    常用参数

  •     name参数:必须参数,用于指定要操作的组名称。
  •     state参数:用于指定组的状态,两个值可选,present,absent,默认为 present,设置为        absent 表示删除组。
  •     gid参数:用于指定组的gid。

11.1、group模块案例

例1:.在12,13主机中创建名为testgroup的组

[root@cong11 ~]# ansible web_servers -m group -a "name=testgroup"

例2:删除 12,13主机中存在名为 testgroup的组

[root@cong11 ~]# ansible web_servers -m group -a 'name=testgroup state=absent'

删除成功的前提是不能有用户把被删除的组当成基本组。会报如下错误:

你可能感兴趣的:(Ansible,运维,服务器)