Ansible之模块参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible之模块参数相关的知识,希望对你有一定的参考价值。

为了运行Ansible的第一个命令,我们前期做了大量的配置工作, 在controller主机和各个node主机上。为什么这么做,就是为了能够直接使用ansible,远程指挥一堆一堆的服务器,copy文件,安装软件包,更新软件,更改配置文件等等等等。。。

如果你查看了ansible官方文档,人家也是要让你从最最基础的命令开始,就像你学任何编程语言,第一个例子永远都是打印一句:hello world!

对于ansible而言,我查了一些教程,也听同事介绍过,那第一条命令就是ping。要想使用任何工具,那第一个动作就是要查看一下help,就是看看使用说明书,以确保你的打开姿势是正确的。

输入:ansible --help,就会出来很多信息,主要看Usage这一行,其实这个usage个人觉得写的不是太好,如果有个实例就更完美了。

技术图片

针对ansible的参数,简单的说明一下 吧,也参考了网上的说明

ansible -h 参数解析
Usage: ansible <host-pattern> [options]

Options:
**  -a MODULE_ARGS, --args=MODULE_ARGS    下面-m模块的参数,这个参数很重要,这个参数很重要,这个参数很重要!重要的事情说三遍。如果执行默认COMMAND的模块,即是命令参数,如:“date”,"pwd"等等**
  -k, --ask-pass        ask for SSH password  登录密码,提示输入SSH密码而不是假设基于密钥的验证
  --ask-su-pass         ask for su password    su切换密码
  -K, --ask-sudo-pass   ask for sudo password  提示密码使用sudo,sudo表示提权操作
  --ask-vault-pass      ask for vault password
  -B SECONDS, --background=SECONDS     后台运行超时时间
                        run asynchronously, failing after X seconds
                        (default=N/A)
  -C, --check           don‘t make any changes; instead, try to predict some    
              只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
                        of the changes that may occur
  -c CONNECTION, --connection=CONNECTION   连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
                        connection type to use (default=smart)
  -f FORKS, --forks=FORKS   并行任务数。NUM被指定为一个整数,默认是5
                        specify number of parallel processes to use
                        (default=5)
  -h, --help            show this help message and exit   打开帮助文档API
  -i INVENTORY, --inventory-file=INVENTORY    指定库存主机文件的路径,默认为/etc/ansible/hosts
                        specify inventory host file
                        (default=/etc/ansible/hosts)
  -l SUBSET, --limit=SUBSET    进一步限制所选主机/组模式  --limit=192.168.91.135 只对这个ip执行
                        further limit selected hosts to an additional pattern
  --list-hosts          outputs a list of matching hosts; does not execute
                        anything else
**  -m MODULE_NAME, --module-name=MODULE_NAME   执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数。这个参数很重要,这个参数很重要!重要的事情说三遍。**
                        module name to execute (default=command)
  -M MODULE_PATH, --module-path=MODULE_PATH    要执行的模块的路径,默认为/usr/share/ansible/
                        specify path(s) to module library
                        (default=/usr/share/ansible/)
  -o, --one-line        condense output      压缩输出,摘要输出.尝试一切都在一行上输出。
  -P POLL_INTERVAL, --poll=POLL_INTERVAL    调查背景工作每隔数秒。需要- b
                        set the poll interval if using -B (default=15)
  --private-key=PRIVATE_KEY_FILE    私钥路径,使用这个文件来验证连接
                        use this file to authenticate the connection
  -S, --su              run operations with su    用 su 命令
  -R SU_USER, --su-user=SU_USER      指定SU的用户,默认是root用户
                        run operations with su as this user (default=root)
  -s, --sudo            run operations with sudo (nopasswd)    
  -U SUDO_USER, --sudo-user=SUDO_USER    sudo到哪个用户,默认为 root  
                        desired sudo user (default=root)
  -T TIMEOUT, --timeout=TIMEOUT    指定SSH默认超时时间,  默认是10S
                        override the SSH timeout in seconds (default=10)
  -t TREE, --tree=TREE  log output to this directory     将日志内容保存在该输出目录,结果保存在一个文件中在每台主机上。
  -u REMOTE_USER, --user=REMOTE_USER    远程用户, 默认是root用户
                        connect as this user (default=root)
  --vault-password-file=VAULT_PASSWORD_FILE  
                        vault password file
  -v, --verbose         verbose mode (-vvv for more, -vvvv to enable    如果命令执行成功,输出详细的结果。输出执行过程的详细信息:-v<-vv<-vvv<-vvvv,单间的说就是v越多,输出的信息就越详细。
                        connection debugging)(
-
vv –vvv 
-
vvvv)

  --version             show program‘s version number and exit   输出ansible的版本

好了,上面的帮助信息,看看就好,知道大概怎么用了,但是还不够具体。要想运行ansible命令,还有一个前提条件,就是要把受控的主机,加到ansible的hosts文件里,这样ansible才知道它受控的主机有哪些。hosts文件路径在:/etc/ansible/hosts下。我们来cat一下,看看里面的内容:

技术图片

如上图所示,这个hosts文件里已经给出了3个例子,怎么写受控主机你应该知道了吧。
第一种:简单粗暴,直接写受控主机的hostname或者IP地址。
第二种和第三种:类似,都是以分组的方式——[组名],这个组名就是可以跟在ansible命令行后的。所以,可以这么理解:

  1. ansible命令后面必须要跟目标主机
  2. 这个目标主机的写法有多种,可以是目标主机的hostname,也可以是IP,也可以是你定义在ansible hosts文件里的组名。
  3. 但是无论是什么名字,那都要加入到ansible的hosts文件里,否则是没用的,ansible是不识别的。所以这个hosts文件,是ansile的仓库,你让ansible做什么事情,它得先找到目标,那它每次都是先去这个仓库里找目标,然后再下手。

所以我现在先用简单第一种简单粗暴的方式,把node1,node2和node3都加进去,而且只加他们的主机名,更改之后保存,退出。

由于我们没有分组,所以直接执行下面的命令:

ansible node1 -m ping

ansible:命令关键字,必须要有
node1:就是你要远程控制的主机名称,这里也可以使用IP地址,效果相同
-m:这个就是指你想用ansible的哪个模块,后面跟上就行,现在这个 例子是用ping的模块。注意这个是Linux上面的ping模块,如果目前主机是Windows,是有一个Win_ping对应的模块。最好带上吧!如果不带这个-m参数,默认是使用command这个模块。

技术图片

以上就是一个最简单的ansible ad-hoc命令了。

下面我们在执行ansible命令时,把node1这个主机名称,换成IP地址看看:

技术图片

从上图可以看到,是不行滴。为什么呢?回顾一下ansible执行的过程,它会先去仓库里找目标啊,很显然,我们没有 把这个IP地址加入到hosts这个仓库里,它当然就找不到了。那我们现在把这个IP地址加入进去,然后再运行一下:ansible 192.168.137.101 -m ping,看看会不会报错。

加入IP地址到ansible hosts文件中:
技术图片
再运行命令:ansible 192.168.137.101 -m ping
技术图片

完美,你发起了ping,它给你个pong。没毛病。

那现在我们用第二、第三种方法,把不同的server,分成不同的组。

假如node1和node2是web服务器,那我就把这两台主机放到[webservers]组,那node3就当做database服务器吧,放到[dbservers]
调整ansible的hosts文件如下:

技术图片

注意一下,我在[dbservers]这个组下,放了node3主机名和node1的IP地址。

让我们来ansible一下,对象是我们新建的组,先来webservers组吧:
技术图片

两个ping,连个pong,都显示SUCCESS,没毛病。

那我们再来看看dbservers这个组,因为这个组里包含了主机名和主机IP地址两种格式:
技术图片
如上图所示,两个ping,连个pong,都显示SUCCESS,没毛病。

好了,这个就先扯到这里吧!下篇再加个参数,你猜是哪个?

以上是关于Ansible之模块参数的主要内容,如果未能解决你的问题,请参考以下文章

ansible常用模块之synchronize模块

Ansible命令应用之常用模块(持续更新中)

运维自动化神器ansible之user模块

Ansible 常用模块之ping

ansible-基本使用-2

Ansible学习- 常用文件操作模块之copy模块