【command】
command module 是个可以在远端上执行指令的指令模组 (Commands Modules),刚入门 Ansible 会用 module 不多?只要 Linux Shell 会通的指令都可以透过它使用。但它不支持变数 (variables) 和 <, >, |, ; 和 & 等运算,若有这类需求请改用 shell module。

实例:
1.当文件不存在是,才执行create命令,如果存在则不执行
- name: create .ssh directory
command: mkdir .ssh creates=.ssh/
2.先切换目录,再执行命令
- name: cat /etc/passwd
command: cat passwd
args:
chdir: /etc // 切换到/etc目录
【copy】
模块是从本地复制档案到远端的档案模组 (Files Modules),与fetch模块相反的操作。
实例:
1.复制文件到远端服务器(被文件/app/file1.txt复制到远端服务器/home/testuser/上,并改用户属组为gelcw:testuser 权限为0644,并把原有的文件备份)
- name: copy file to remote node
copy:
src: /app/file1.txt
dest: /home/testuser/
ower: testuser
group: testuser
mode: 0644
backup: yes //只有内容变化才会备份
2.复制文件到远端服务器(被文件/app/file1.txt复制到远端服务器/home/testuser/上,并改用户属组为 gelcw:testuser 权限为chmod u=rw,g=r,o=r)
- name: copy file to remote node
copy:
src: /app/file1.txt
dest: /home/testuser/
ower: testuser
group: testuser
mode: “u=rw,g=r,o=r”
【file】
module 是在远端建立和删除档案 (file)、目录 (directory)、软连结 (symlinks) 的档案模组 (Files Modules)。其类似的 Linux 指令为 chown, chown, ln, mkdir 和 touch。
实例:
1.创建文件,并设定权限为644
- name:touch a file
file:
path: /app/test
state: touch
mode: “u=rw,g=r,o=r”
2.创建目录 并设置用户属组和权限
- name: mkdir file
file:
path: /app/test/dir1
state: directory
owner: testuser
mode: “0700”
3.创建软连接
- name: create a symlink
file:
src: /app/test
dest: /home/testuser/test
state: link
【lineinfile】
是一个可用正则表达式对文件进行插入或取代文字的档案模组 (Files Modules)。其类似的 Linux 指令为 sed
参数:
path参数 :必须参数,指定文件的路径。
line参数 : 使用此参数指定休修改的文本内容。
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
state参数:当想要删除对应的文本时,需要将state参数的值设置为absent,absent为缺席之意,表示删除,state的默认值为present。
backrefs参数:当设置为yes时,如果正则表达没有匹配成功,则不会追加到文件末尾,反之,默认在没有匹配成功时直接追加
insertafter参数:一般用于在指定行之后插入内容
insertbefore参数:一般用于在指定行之前插入内容
backup参数:是否在修改文件之前对文件进行备份。
create参数 :当要操作的文件并不存在时,是否创建对应的文件
实例:
1.替换指定开头的行,把以a 开头的这一整行替换为change line
- name: lineinfile-model test
hosts: 10.163.89.201
tasks:
- name: change
lineinfile:
dest: /root/ansible-test/lineinfile.txt
regexp: ‘^a=’ //匹配以a开头的行,并整行替换为 change line
line: ‘change line’
- name: insertafter<br /> lineinfile:<br /> dest: /root/ansible-test/lineinfile.txt<br /> insertafter: '^c=3' //匹配以c=3开头的行,并在该行的下一行加入hhhhhh<br /> line: 'hhhhhh'- name: insertbefore<br /> lineinfile:<br /> dest: /root/ansible-test/lineinfile.txt<br /> insertbefore: '^b=2' //匹配以b=2开头的行,并在该行的上一行加入eeeeee<br /> line: 'eeeeee'- name: delete line<br /> lineinfile:<br /> dest: /root/ansible-test/lineinfile.txt<br /> state: absent //删除,<br /> regexp: '^d=4' //匹配到开头为d=4的行
【services】
用来管理远端系统服务的系统模组 (System Modules)。其类似的 Linux 指令为 service。
参数
arguments:给命令行提供一些选项 2
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别6 sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟7 state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
实例:启动mysql
- name: start mysql
hosts: 10.163.89.201
tasks:
- name: start mysql service
service:
name: mysqld //mysqld 必须是服务名,此外这里的name是必选项
state: started //可以选择started,stopped,restarted,reloaded
【shell】
可以在远端用 /bin/sh 执行指令的指令模组 (Commands Modules),支持变数 (variables) 和 <, >, |, ; 和 & 等运算
参数:
free_form参数 :必须参数,指定需要远程执行的命令,但是并没有具体的一个参数名叫free_form,具体解释参考 command 模块。
chdir参数 : 此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中。
creates参数 :使用此参数指定一个文件,当指定的文件存在时,就不执行对应命令,可参考command 模块中的解释。
removes参数 :使用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令,可参考 command 模块中的解释。
executable参数:默认情况下,shell 模块会调用远程主机中的 /bin/sh 去执行对应的命令,通常情况下,远程主机中的默认 shell 都是 bash。如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的 shell 去执行对应的命令。指定 shell 文件时,
实例:
—-
- name: shell model test —channel
hosts: 10.163.89.201
tasks:
- name: print test to file
shell: echo $date >> //root/ansible-test/shell-2.txt
【stat】
用来检查档案状态的档案模组 (Files Modules)。其类似的 Linux 指令为 stat
实例
—-
- name: stat model test
hosts: 10.163.89.201
tasks:
- name: stat test
stat:
path: /root/ansible-test/file-mode.txt
【user】
管理用户的模块
参数:
name参数:必须参数,用于指定要操作的用户名称,可以使用别名 user。
group参数:用于指定用户所在的基本组。
gourps参数:此参数用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。
append参数:如果用户原本就存在多个附加组,默认值 no 表示会覆盖原来的组,如果需要追加且不覆盖,则需设置为yes
shell参数:此参数用于指定用户的默认 shell。
uid参数:此参数用于指定用户的 uid 号。
password参数:此参数用于指定用户的密码(密文)。相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串
import crypt; crypt.crypt(‘666666’)
expires参数:此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列,比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 “date -d 2018-12-31 +%s” 获取到的时间戳为1546185600,所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
comment参数:此参数用于指定用户的注释信息。
state参数:此参数用于指定用户是否存在于远程主机中,可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
remove参数:当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel —remove” 命令。
实例1:
- name: user model test
hosts: 10.163.89.201
tasks:
- name: create group
group: //模块:组
name: test //组名 test
gid: 1005 //组ID
- name: create user
user:
name: test
group: test
uid: 1005
password: ‘$6$jExJiv4I.gKnM1O5$kAmlaH6229dLMh4FfVcNkiEZzPMfQ.fo5zS1QnS
n5sanD9gTaK.Jbi9KC8jflhQV./EVBmTVAsFO.cxxm1E6/1’ //密码 密文
state: present /状态 present是新增 absent 是删除
system: yes //yes 代表是普通用户
