Ansible常用命令,用法:


文章目录

    • 一、ansible
    • 二、ansible-doc
    • 三、ansible-playbook
    • 四、ansible-galaxy
    • 五、ansible-vault
    • 六、ansible-console
    • 七、ansible-pull

ansible常用命令

ansible 命令集:

/usr/bin/ansible  			# Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   	# Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  	# 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  # Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull  	# Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault  	# Ansible 文件加密工具
/usr/bin/ansible-console  	# Ansible基于Linux Consoble界面可与用户交互的命令执行工具

比较常用的是/usr/bin/ansible/usr/bin/ansible-playbook

ansible配置公钥免密登录

配置管理节点可以基于ssh公钥免密登录被管理节点

# 生成ansible主控端主机的公钥
[root@ansible ~]# ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
# 将主控端公钥分发至被管理的主机,发送至同一被管理的主机的不同用户需要多次分发
[root@ansible ~]# sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no root@192.168.126.51 

一、ansible

自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

用法:

ansible HOST-PATTERNS [-f FORKS] [-m MOD_NAME] [-a MOD_ARGS]
即:ansible 被管理的主机(all) -m 模块名 参数

            HOST_PATTERNS:指明所管控主机,以模式形式表示或者直接给定IP,必须事先定义在文件中;all表示主机清单中的所有主机

            -f FORKS:表示一批处理几台主机,也就是当被管控主机很多时,ansible不是对所有主机同时发起管理操作,而是一批处理几台,然后再换一批,直到所有主机被处理完成,如果不指定,则默认是5台

            -m MOD_NAME:指明调用哪个模块执行操作,各个模块所能实现的功能不同,如果不指定,默认是用-m command模块

            -a MOD_ARGS:指明使用该模块的执行操作时的参数

在Ansible中,Patterns 是用来确定主控端管理哪些被控端主机(必须是在 /etc/ansible/hosts 文件中定义的);一个pattern通常可以关联到一台甚至以系列的组(主机的集合)

HOST-PATTERNS 写法:

ansible 192.168.126.50 -m ping
  1. all :表示匹配inventor中的所有主机
ansible all -m ping

  1. * :通配符
# 匹配inventor中的所有主机,相当于 all
ansible "*" -m ping
# 匹配inventor中的某个网段内的所有主机
ansible 192.168.126.* -m ping
# 以组名进行模糊匹配
ansible "*servers" -m ping

  1. 组名 : 表示匹配inventor中的指定组名的所有主机
[root@ansible ~]# cat /etc/ansible/hosts
[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
[root@ansible ~]# ansible webservers -m ping
  1. 逻辑或 :
# 表示匹配inventor中的组名为webservers和mysqlservers中的所有主机
ansible "webservers:mysqlservers" -m ping
# 以IP匹配多个主机
ansible "IP1:IP2":IP3 -m ping
  1. 逻辑与 :&
# 表示匹配inventor中的在组名为webservers并且同时在组名为mysqlservers中的所有主机
ansible "webservers:&mysqlservers" -m ping
  1. 逻辑非 :!
# 表示匹配inventor中的在组名为webservers并且同时不在组名为mysqlservers中的所有主机
ansible "webservers:!mysqlservers" -m ping
  1. 正则表达式
ansible "~(web|mysql).*\edu\.cn" -m ping

也可以灵活正确的使用以上方式进行综合匹配。

列出所有被管理的主机

ansible all --list

列出指定组下的所有主机

ansible 组名 --list

常用选项:

-a MODULE_ARGS   #指定使用模块的相关参数

-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 #后台运行超时时间

-C #模拟运行环境并进行预运行,可以进行查错测试

-c CONNECTION #连接类型使用

-f FORKS #并行任务数,默认为5

-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts

--list-hosts #查看有哪些主机组

-m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数

-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用

-S #用 su 命令

-R SU_USER #指定 su 的用户,默认为 root 用户

-s #用 sudo 命令

-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户

-T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改

-u REMOTE_USER #远程用户,默认为 root 用户

-v #查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

ansible命令执行后输出信息的颜色所代表的意义:

红色:表示执行过程出现异常;

黄色:表示执行成功后目标有状态变化;

绿色:表示执行成功且没有目标机器做修改;

二、ansible-doc

ansible-doc是查看ansible模块(插件)文档说明,针对每个模块都有详细的用法说明,功能和Linux的man命令类似

列出所有可用模块

-l, --list
          List available plugins
          
ansible-doc -l

查看指定插件的使用帮助

ansible-doc MOD_NAME

# 例
ansible-doc shell

查看指定插件支持的参数

-s, --snippet
          Show playbook snippet for specified plugin(s)

ansible-doc -s MOD_NAME

查看指定类型的插件(默认类型为module)

-t 'TYPE', --type 'TYPE'
          Choose  which plugin type (defaults to "module"). Available plugin types are : ('become', 'cache', 'callback', 'cliconf', 'connection', 'httpapi', 'inventory', 'lookup', 'net‐
          conf', 'shell', 'module', 'strategy', 'vars')


ansible-doc -t 插件类型 -l

说明:在Ansible的概念中,Plugin包含Module,Module只是Plugin的一个类别。

三、ansible-playbook

Playbook(剧本)是系统 Ansible 指令的集合,其利用 YAML 语言编写,自上而下按顺序一次执行。它可以实现一些 Ad-Hoc 指令无法实现的操作。

可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。playbooks相当于shell脚本(再或者理解为docker中的Dockerfile),可以把执行的任务写到文件中一次执行,方便调用。 但是它有自己的语法规范。

说明:

ansible的操作方式

Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc和playbook:

  • ad-hoc模式(点对点模式)
    使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一条简单的命令。

  • playbook模式(剧本模式)
    是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。


ad-hoc无法持久使用,playbook可以持久使用。

用法:

ansible-playbook [options] filename.yml

--check 只检测可能会发生的改变,但不真正执行操作
--syntax-check 对剧本进行语法的检查
--list-hosts 列出运行任务的主机
--list-task  检查tasks任务
--limit 主机列表 只针对主机列表中的主机执行
--start-at-task=''  指定从某个task开始运行
-v 显示过程 -vv -vvv 更详细
-k(–ask-pass) 用来交互输入ssh密码
-K(-ask-become-pass) 用来交互输入sudo密码
-u 指定用户

四、ansible-galaxy

ansible官方制定的一套规范被称之为”角色(Roles)”, 角色是一种解决问题的思想,也是一种通用的规范 。比如,我们可以把nginx的相关配置过程抽象成一个nginx角色,以便下次需要进行同样的配置时,调用这个角色, 无论是哪种角色,都是按照ansible官方规范好的目录结构进行创建的; 如果你的配置过程慢慢变得丰富,文件越来越多,结构越来越复杂,那么使用角色会是更好的选择,它能让你的文件结构符合统一的标准,让任何一个懂得这个标准的人快速的阅读你的代码,并且为以后的扩展留出很大的空间每个角色都是以特定的层级目录结构进行组织。

Galaxy是Ansible的官方社区中心,用于共享Ansible角色。一个角色是Ansible构建自动化内容的方式以及让它可复用。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。Ansible Galaxy指的是一个网站共享和下载 Ansible 角色,也可以是帮助 roles 更好的工作的命令行工具。

ansible-galaxy 有许多不同的子命令

安装角色

# 从 Ansible Galaxy 网站下载角色

ansible-galaxy install username.rolename

构建角色架构

# 也可以用于初始化一个新角色的基本文件结构,节省创建不同的目录和main.yml的时间

ansible-galaxy init rolename

从一个文件安装多个角色

# 想安装多个角色,ansible-galaxy 命令行可以通过一个 requirements 文件实现。各种版本的ansible都允许使用下面的语法从
Ansible galaxy 网站安装角色。

ansible-galaxy install -r requirements.txt

# requirements.txt 文件看起来就像这样

username1.foo_role username2.bar_role

# 想得到指定版本(tag)的role,使用下面的语法

username1.foo_role,version username2.bar_role,version

# 可用的版本在 Ansible Galaxy 网页上都有列出来。

五、ansible-vault

ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。

主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 --ask-vault-pass参数,同样需要输入密码后才能正常执行。

创建加密文件

ansible-vault create file

编辑加密文件

ansible-vault edit file

重置密码

ansible-vault rekey file

加密已有文件

ansible-vault encrypt file

解密文件

ansible-vault decrypt file

查看文件

ansible-vault view file

六、ansible-console

nsible-console是ansible为我们提供的一款交互式工具,类似于Windows中的cmd及Linux中的shell。可以在ansible-console虚拟出来的终端上像shell一样使用ansible内置的各种命令,这为习惯于shell交互方式的用户提供了良好的使用体验,所有的操作与shell类似,而且支持tab键补全。

[root@test ~]# egrep -v '^$|^#' /etc/ansible/hosts
[webserver]
192.168.126.97

[root@test ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (1)[f:5]$ cd webserver
root@webserver (1)[f:5]$ ip a 
192.168.126.97 | CHANGED | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9f:7f:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.126.97/24 brd 192.168.126.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9f:7fa3/64 scope link 
       valid_lft forever preferred_lft forever
root@webserver (1)[f:5]$ exit

七、ansible-pull

该指令使用需要谈到Ansible的另一种工作模式:pull模式(Ansible默认使用push模式)。

前面的学习使用都是基于Ansible 的push 模式来工作,即不要在远程主机做任何操作只需要在控制机编排playbook,push 到远程主机即可完成任务,另外一个工作模式就是pull这和通常使用的push模式工作机理刚好相反,其适用于以下场景:

Ansible 基于pull 模式的工作流程:

将Ansible设置为从节点pull而不是push,是有一些缺点,例如要求在节点上安装软件,但是也存在一些优点:

  • 不需要中央管理服务器(取决于repository的类型)
  • 分散存储库是可能的。(再次:取决于repository的类型。)
  • 连接可以由节点启动(如果不允许您更改防火墙策略,则可能很重要)
  • 增加并行度
  • 节点可用时可以pull。(在基于push的模型中,如果节点不可用,则无法对其进行配置。)
  • 非常快,因为避免了每个任务的SSH连接开销。

相关内容