• 青蛙学Linux—Ansible的ad-hoc模式和常用模块(一)


    )在上一篇文章中介绍过,Ansible通过调用特定的模块来执行特定的任务,所以模块对于Ansible来说是非常重要的。这里我们通过Ansible的ad-hoc模式来介绍Ansible的常用模块。

    1、ad-hoc模式

    Ansible主要通过ad-hoc和playbook两种模式来执行任务。ad-hoc通过Ansible提供的ansible命令一次执行一个任务。

    ad-hoc的常用选项如下:

    • -m:指定执行任务要调用的模块,如果不指定默认使用command模块
    • -a:指定调用模块的对应参数,模块对应的参数及用法可以使用ansible-doc –s 模块名来查看
    • -u:使用被管理主机的指定用户执行任务
    • -k:提示输入SSH登录密码而不是基于密钥的验证
    • -b:提升权限
    • --become-method:指定提升权限的方法,常用的有sudo和su,默认为sudo
    • --become-user:指定执行sudo或su命令时切换的用户,默认为root用户
    • -K:提示输入提升权限时需要的密码
    • -B:后台运行的超时时间
    • -C:测试一下会改变什么内容,不会真正执行
    • -f:设置线程数
    • -i:指定主机清单文件的路径,默认为/etc/absible/hosts

    ad-hoc的语法如下:

    ansible 主机或主机组 -m 模块 -a '模块参数' 其他ad-hoc选项

    注意:主机或主机组是在主机清单中定义的部分,比如在/etc/absible/hosts中定义的主机和主机组。

    2、一个例子:使用ad-hoc在远程主机上执行date命令

    实验环境

    在Ansible系列文章中,都使用如下的实验环境及配置。

    实验环境中有以下四台运行CentOS的主机,分别为:

    • 主机A:IP地址192.168.0.110,操作系统为CentOS 7.6.1810
    • 主机B:IP地址192.168.0.88,操作系统为CentOS 7.6.1810
    • 主机C:IP地址192.168.0.106,操作系统为CentOS 6.10
    • 主机D:IP地址192.168.0.61,操作系统为CentOS 6.10

    其中主机A通过YUM安装ansible做为主控端,主机B分组为centos7,主机C和主机D分组为centos6。主机清单的配置如下:

    [centos7]
    192.168.0.88
    
    [centos6]
    192.168.0.106
    192.168.0.61

    通过ad-hoc模式在centos6分组的两台主机上执行date命令

    输入以下命令:

    [root@localhost ~]# ansible centos6 -m command -a 'date' -k

    执行后将提示输入centos6组中两台主机的密码(注意:两台主机的密码必须相同),然后观察返回的结果:

    1

    提示我们需要进行SSH的首次登录验证,此时只要在/etc/ansible/ansible.cfg中取消host_key_checking字段的注释即可。

    取消注释后我们在运行上面的命令,观察返回的结果:

    2

    命令在centos6主机组的两台主机上执行成功。

    3、command模块

    上面的例子中,我们通过command模块在centos6组的两台主机上执行了date命令。command这个模块的功能就是用于在被管理的主机上执行命令。该模块依赖Python环境,且当命令中包含类似‘$HOME’和特殊符号“<”、“>”、“|”、“;”、“&”、“*”时无法执行。

    比如我们在centos7组的主机中通过command模块执行ps –ef|grep ssh命令,查看结果:

    3

    执行报错,因为命令中存在特殊字符“|”。

    command模块有以下选项(选项使用方法:选项=参数):

    • argv:允许以一个列表的形式而不是字符串形式提供命令。但是列表和字符串不能混用,一次只能使用一个
    • chdir:在执行命令前先切换到指定的目录
    • creates:当指定的文件存在时,命令不执行,反之则命令执行
    • removes:当指定的文件存在时,命令执行,反之则命令不执行
    • stdin:command模块默认从标准输入中接收命令,使用该选项可以从指定的位置接收命令

    一个例子:在centos7组的主机中执行pwd命令,在执行该命令前先将目录切换到/etc

    输入以下命令:

    [root@localhost ~]# ansible centos7 -m command -a 'chdir=/etc pwd' -k

    返回的结果:

    4

    4、shell模块

    该模块也是用于在被管理主机上执行命令。但该模块在执行命令时使用的是/bin/sh,所以使用该模块可以执行任何命令。该模块也依赖Python环境。

    我们在centos7组的主机上执行刚才使用command模块无法执行的命令ps –ef|grep ssh,查看执行结果:

    5

    命令成功执行。

    shell模块新增了以下选项,无argv选项,其他选项同command模块:

    • executable:更改执行命令时使用的shell,参数为可执行文件的绝对路径

    5、raw模块

    raw模块的功能与command和shell完全相同,但是它不依赖于Python环境。所以raw模块很适合在没有安装Python环境的远程主机或者是无法安装Python环境的交换机路由器上执行命令。

    raw模块仅有executable,功能同shell的executable选项。

    6、script模块

    script模块的功能时将主控端指定的shell脚本拷贝到被管理主机上执行。该模块的执行也不依赖Python环境。

    script模块的选项同shell,仅多出以下选项:

    • decrypt:自动解码源文件

    7、ping模块

    ping模块用于测试远程主机是否存活。

    注意:该模块使用SSH连接测试主机是否存活,而不是仅通过网络是否连通进行判断。

    实验环境中,主控端没有和centos7组中的主机设置SSH公钥私钥登录,必须使用密码才能SSH登录。此时执行以下命令:

    [root@localhost ~]# ansible centos7 -m ping

    返回结果:

    1

    此时为上面的命令加上-k选项以在执行时输入密码:

    2

    8、file模块

    file模块用于在被管理主机上进行文件操作。

    模块常用选项:

    • path:必须使用,用于指定文件的路径
    • state:用于指定文件的类型。可能的值有, directory - 代表目录,如果目录不存在则创建;file - 代表文件,如果该文件不存在则不会被创建,该选项为默认值;link - 创建符号链接;hard - 创建硬链接;touch - 如果文件不存在,则创建一个空白文件。如果文件或目录已存在,则更新它的最后修改时间;absent - 删除目录、文件或取消链接文件的指向
    • owner:定义文件的属主
    • group:定义文件的属组
    • mode:定义文件的权限
    • recurse:文件的权限是否递归,仅对目录有效,值为yes|no
    • src:建立链接时指定源文件,当state=link或state=hard时使用
    • dest:链接文件路径,当state=link或state=hard时使用
    • force:在两种情况下使用以强制创建符号链接,一种是源文件不存在但之后会建立;另一种是目标符号链接已存在但需要更新。该选项的值为yes|no

    一个例子:在centos7组的主机上的/root目录下建立一个名为test的文件,文件的属主和属组为root,权限为764

    在主控端输入如下命令:

    [root@localhost ~]# ansible centos7 -m file -a 'path=/root/test owner=root group=root mode=764 state=touch' -k

    命令执行返回结果:

    3

  • 相关阅读:
    jmeter压测学习42-逻辑控制器之交替控制器
    jmeter压测学习41-逻辑控制器之吞吐量控制器
    jmeter压测学习40-逻辑控制器之事务控制器
    jmeter压测学习39-获取post请求x-www-form-urlencoded格式的数据
    jmeter压测学习38-通过Jython调用Python脚本
    对微信小程序的生命周期进行扩展 – Typescript 篇
    在微信小程序开发中使用Typescript
    TCP长连接和短连接 Python代码
    jQuery Ajax编程
    Django 网页中文显示u开头的乱码
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10163702.html
Copyright © 2020-2023  润新知