前面我们安装并大体了解了 Ansible 的使用,接下来在我们开始学习 Playbook 以及其他好玩的内容之前,先来瞧瞧 这个命令。
什么是 ad-hoc
命令和 Python 的 shell 命令差不多,用来快速执行验证一些命令。后面编写的 Playbook 就好像是 Python 的 文件,通过 就像使用 一样能帮助我们更好地学习 Playbook。
之前我们用到的 就是一个 命令。
分身数
在上一篇讲到可以在“清单”文件中定义主机组,一个组里面可能有几个主机,也可能有十几个、几十个。我们执行 命令的时候 Ansible 能在同一时间同时操作几台主机,在 Ansible 的配置文件中默认定义为 5 个,我们也可以在执行 命令的时候通过 参数手动指定:
模块
就如 Python 拥有许多内置包一样,Ansible 也有许多内置模块。
前面我们一直使用的 就是其中的一个模块,下面再介绍几个常用的模块。
使用 可以查看到 Ansible 有哪些内置的模块,以及这些模块的简介。
我们在想要实现一个功能的时候可以通过 来快速搜索。
找到对应的模块名字之后,我们可以使用 来查看详细关于模块的使用方法(示例为查看 ping 模块的具体使用方法)。
shell
上面调用 模块,并通过 参数传入执行 shell 命令时候的参数。
在传入参数的时候需要注意单引号和双引号的区别:上面使用的单引号里面的 是远程主机的环境变量,如果换成双引号则 使用的是当前执行 Ansible 命令的主机的环境变量。
还记得我们之前说的,Ansible 具有“幂等性”的特征吗。到目前为止,我们一直在使用简单的命令。但是大多数的 Ansible 模块并不是简单的执行命令,它们能在执行命令前计算出最终的状态,然后判断到底需不需要执行我们传进来的命令。
文件传输copy
我们先通过 看看有哪些常用操作:
src:本地需要复制到远程主机的文件或目录,可以是绝对路径,也可以是相对路径。
指定的路径是文件:没话说,直接复制该文件
指定的路径是文件夹:如果不是以“/”结尾,那就是把该文件夹整个复制,如果是以“/”结尾,则是把文件夹里面的内容复制到远程主机。
dest:复制到远程主机的哪个路径。
如果“src”是一个文件夹,“dest”也必须是个文件夹。
如果指定的“src”路径不存在并且“dest”以“/”结尾或者“src”是个文件夹,“dest”会以 `mkdir -p` 的形式创建。
如果“src”和“dest”都是文件,那么“dest”路径不存在则会执行失败。
force:默认“yes”。当文件名一样,但是内容不一样时,是否强制替换。
backup:当强制替换文件的时候,是否需要备份原文件。
mode:修改文件或文件夹的权限。对于习惯使用 的人来说,如果指定数字,则必须使用八进制(如 0644 或 01777 这样的),如果指定字符串,则使用引号(如 '644' 或 '1777' 这样的)。Ansible 1.8版本之后可以使用符号模式(如 u+rwx 或 u=rw,g=r,o=r 这样的)。
直接把文件复制到远程主机:
file
path:需要管理的文件对象
state:
directory:类似 `mkdir -p`
file:创建文件
link:创建软链接
hard:创建硬链接
absent:删除文件或文件夹,解除软硬链接
touch:如果 path 不存在,则创建一个空文件。如果 path 存在,则更新该文件的权限或者修改时间
src:当 state=link/hard 的时候我们需要指定链接的源文件
绝对路径
相对路径:相对要被创建链接的文件的路径
空路径
force:作用于创建链接的时候
源文件不存在(之后会有)
目标链接已存在(则会先解除原来的链接,再创建当前新的链接)
mode:和 模块的 mode 一致
recurse:当操作的目标为文件夹的时候,recurse=yes,可以递归地修改文件夹中文件的属性
修改权限
创建文件夹
删除文件
git
当我们部署 webapp 的时候如果是从 git 拉取代码的话,可以使用 git 模块:
repo:git 仓库地址(必填)
accept_hostkey:设为 yes,能帮我们自动把 git 服务器添加到 中。
clone:如果目标路径不存在,则不会 clone 远程仓库(默认 yes)
dest:把远程仓库 clone 到哪里(除非上面 clone=no,不然必填)
force:如果设为 yes,会丢掉本地仓库的任何变动
version:checkout 到哪个分支(也可以是 HEAD,分支名,tag 名,SHA-1 值)
Ansible 拥有众多模块,暂且不展开讲述了,等用到的时候查下基本就知道怎么用了,多实践才能熟练。
领取专属 10元无门槛券
私享最新 技术干货