YAML的语法规则:
- 第一行'---',表示YAML文件
- 大小写敏感
- 与Python一样,使用缩进表示层级关系
- 不允许使用tab键,只能使用空格,且数目不重要。
- '#'表示注释一行
- 对象:键值对组合称为映射,类似python的字典
- 数组:类似python的列表
- 纯量:单个、不可再分的值
第三方模块PyYAML可用于将YAML文件内容解析成python对象
pip install PyYAML
Ansible模块
工作原理
- 将模块拷贝到远程服务器
- 执行模块定义的操作
- 删除远程服务器模块
模块列表与帮助信息
# 查看ansible模块列表
ansible-doc -l
# 查看模块的的帮助信息
ansible-docl -l <模块名>
Ansible常用模块
- ping
测试现有的ssh参数能否顺利连接hosts列表远程服务器
ansible test -m ping
- 远程命令模块
- command - 远程服务器执行Linux命令,不支持管道
ansible test -m command -a "hostname"
- raw - 远程服务器执行Linux命令,支持管道
ansible test -m raw -a "cat /etc/passwd | wc -l"
- script - 可以在主控节点编写脚本,然后在远程服务器执行
ansible test -m script -a "test.sh"
- shell - 执行远程服务器shell脚本文件
ansible test -m shell -a "/root/test.sh"
- file
主要用于对远程服务器的文件进行操作,主要包括修改文件权限、修改所有者、创建文件、删除文件等。
重要选项:
- path:指定文件或目录的路径
- recurse:递归设置子目录
- group:定义文件/目录的组属性
- mode:定义文件/目录的权限
- owner:定义文件/目录的所有者
- src:要被链接的源文件路径,只应用于state为link的情况
- dest:被链接到的路径,只应用于state为link的情况
- force:在两种情况下会强制创建软链接,一种是源文件不存在但之后会建立的情况;另一种是目标软链接已存在,需要先取消之前的软链接,然后创建新的软链接,默认取值为no
示例:
# 创建一个目录
ansible test -m file -a 'path=/tmp/dd state=directory mode=0755'
# 修改文件权限
ansible test -m file -a 'path=/tmpdd state=touch mode="u=rw,g=r,o=r"'
# 创建一个软链接
ansible test -m file -a 'src=/tmp/dd dest=/tmp/ddl owner=root group=root state=link'
# 修改文件的所有者
ansible test -m file -a 'path=/tmp/dd owner=root group=root mode=0644 -become'
- copy
将主控点的文件或目录拷贝到远程服务器上,同时还可以设置拷贝完成后的文件或目录在远程服务器上的权限和所有者
重要选项:
- src - 源文件或目录所在路径,目录递归复制,如果以'/'结尾,则只复制目录里的内容,如果不以'/'结尾,则连目录本身也复制
- dest - 文件复制目的地,必须是绝对路径
- force - 是否强制覆盖同名文件或目录,默认值yes
- backup - 是否备份将被覆盖的同名文件或目录,默认值no
- directory_mode - 递归设置目录权限,默认为系统默认权限
- others - file模块的选项都可以在这里使用
示例:
# 拷贝文件到远程服务器
ansible test -m copy -a 'src=test.sh dest=/tmp/test.sh'
# 拷贝文件如果存在则备份
ansible test -m copy -a 'src=test.sh dest=/tmp/test.sh backup=yes force=yes'
# 拷贝文件并修改权限
ansible test -m copy -a 'src=test.sh dest=/tmp/test.sh owner=root group=root mode=644 force=yes' -become
- user/group
user模块请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel,groupmod三个指令。
重要选项:
- name - 待操作用户名
- comment - 描述
- createhome - 创建用户是是否创建目录
- home - 与createhome配合,指定用户的HOME目录
- groups - 用户属组
- uid - 用户uid
- gid - 用户gid
- password - 设定密码
- state - 取值present(创建用户)或absent(删除用户)
- expires - 用户失效时间
- shell - 指定shell环境
示例:
# 创建一个用户
ansible test -m user -a 'name=John comment="John Doe" uid=1329 group=root' -become
# 删除一个用户
ansible test -m user -a 'name=John state=absent' -become
#
- apt
apt模块用来在Debian/Ubuntu系统中安装软件、删除软件。 - get_url
从互联网下载数据到本地,作用类似于Linux下的curl命令。 - unarchive
unarchive模块用于解压文件,其作用类似于Linux下的tar命令。 - git
git模块非常好理解,就是在远程服务器执行git相关的操作。 - stat
stat模块用于获取远程服务器上的文件信息,其作用类似于Linux下的stat命令。 - cron
cron是管理Linux下计划任务的模块。 - service
service模块的作用类似于Linux下的service命令,用来启动、停止、重启服务。 - sysctl
该模块的作用与Linux下的sysctl命令相似,用于控制Linux的内核参数。 - mount
在远程服务器上挂载磁盘,当进行挂盘操作时,如果挂载点指定的路径不存在,将创建该路径。 - synchronize
synchronize模块是对rsync命令的封装,以便对常见的rsync任务进行处理。
模块返回值
常见模块返回值如下: