首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ansible 系列(三)

前面我们安装并大体了解了 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 拥有众多模块,暂且不展开讲述了,等用到的时候查下基本就知道怎么用了,多实践才能熟练。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181016G0IVST00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券