专栏首页木二天空003.Ansible基础使用

003.Ansible基础使用

一 Ansible命令用法

Ansible命令行执行方式有:Ad-Hoc、Ansible-playbook两种,Web方式其官方提供付费产品Tower。Ad-Hoc主要用于临时命令的执行,Ansible-playbook相当于Ad-Hoc的集合,通过一定的规则编排在一起执行。

1.1 免密钥

  1 [root@manage ~]# ssh-keygen -t rsa -P ''
  1 [root@localhost ~]# mkdir .ssh
  2 [root@manage ~]# scp -p /root/.ssh/id_rsa.pub root@172.24.8.31:/root/.ssh/authorized_keys
  3 [root@manage ~]# scp -p /root/.ssh/id_rsa.pub root@172.24.8.32:/root/.ssh/authorized_keys
  4 [root@manage ~]# scp -p /root/.ssh/id_rsa.pub root@172.24.8.33:/root/.ssh/authorized_keys

提示:也可使用以下命令复制到相应的主机:

  1 [root@manage ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.24.8.31

1.2 Ad-Hoc基础命令

基本语法:

  1 ansible <host-pattern> [options]

<host-pattern>:指Inventory中定义的主机或主机组,可以为ip、hostname、Inventory中的group组名等。同时支持具有“.”、“*”或“:”等特殊字符的匹配型字符串。

提示:<>表示该选项为必选,[]表述是该选项中的参数任选其一或多个。

  1 [options]:
  2 -v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息;
  3 -i PATH,--inventory=PATH:指定inventory信息,默认/etc/ansible/hosts;
  4 -f NUM,--forks=NUM:并发线程数,默认5个线程;
  5 --private-key=PRIVATE_KEY_FILE:指定秘钥文件;
  6 -m NAME,--module-name=NAME:指定执行使用的模块;

提示:-m指定模块名称, 默认情况下是指command模块, 可以省略不写。

  1 -M DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible;
  2 -a 'ARGUMENTS',--args=‘ARGUMENTS’"模块参数;
  3 -k,--ask-pass SSH:认证密码;
  4 -K,ask-sudo=pass sudo:用户的密码(--sudo时使用);
  5 -o,--one-line:标准输出至一行;
  6 -s,--sudo:相当于Linux系统下的sudo命令;
  7 -t DIRECTORY,--tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机命名;
  8 -T SECONDS,--timeout=SECONDS:指定连接远程主机的最大超时,单位是秒;
  9 -B NUM,--background=NUM:后台执行命令,超NUM秒后中止正在执行的任务;
 10 -P NUM,--poll=NUM:定期返回后台任务进度;
 11 -u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令;
 12 -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相当于Linux系统下的sudo命令;
 13 -c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts;
 14 -l SUBSET,--limit=SUBSET:指定运行主机;
 15 -l ~REGEX,--limit=~REGEX:指定运行主机(正则);
 16 --list-hosts:列出符合条件的主机列表,不执行任何命令。

1.3 playbook基础命令

基本语法:

  1 ansible-playbook <PLAYBOOKNAME>
  1 --ask-vault-pass:加密playbook文件时提示输入密码;
  2 -D,--diff:显示文件更新的不同的地方;
  3 -e EXTRA_VARS,--extra-vars=EXTRA_VARS:在playbook中引入外部变量;
  4 --flush-cache:将fact清除到的远程主机缓存;
  5 --force-handlers:强制运行handlers任务,即使在任务失败的情况下;
  6 -i INVENTORY:指定要读取的Inventory文件;
  7 --list-tags:列出所有可用的tags;
  8 --list-tasks:列出所有即将被执行的任务;
  9 --skip-tags=SKIP_TAGS:跳过指定的tags任务;
 10 --start-at-task=START_AT_TASK:从第几条任务开始执行;
 11 --step:逐步执行playbook定义的任务,并经人工确认后继续执行下一个任务;
 12 --syntax-check:检查playbook中的语法书写;
 13 -t TAGS,--tags=TAGS:指定执行tags的任务。

二 Ansible系列命令介绍

2.1 ansible

ansible是Ansible基础命令之一,起主要在如下场景使用:

  • 非固化需求;
  • 临时性操作;

二次开发接口调用。

2.2 ansible-galaxy

ansible-galaxy类似GitHub或PIP功能,通过ansible-galaxy命令可查找和安装优秀的Roles。

基本语法:

  1 ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help]
  2 [options]
  3 info:列出指定Role详细信息;
  4 install:下载并安装galaxy指定的Roles到本地;
  5 list:列出本地已下载的Roles;
  6 remove:删除本地已下载的Roles。

2.3 ansible-pull

Ansible默认使用push模式,使用ansible-pull命令可使用Ansible另一种工作模式,pull模式。通常适应于以下场景:

大量机器需要配置,即使使用高并发线程依旧要花费很长时间;

在没有网络的机器上运行Ansible。

基本语法:

  1 ansible-pull -U <repository> [options] [<playbook.yml>]

提示:通过ansible-pull结合Git和crontab可实现通过crontab定期拉取指定的Git版本到本地,并以指定模式自动运行预先制订的指令。

2.4 ansible-doc

ansible-doc是Ansible模块文档说明,针对每个模块都有详细的用法及应用案例介绍,类似Linux的man。

基本语法:

  1 ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]

示例:

  1 [root@manage ~]# ansible-doc -l		#列出支持的模块
  2 [root@manage ~]# ansible-doc ping	        #查看模块功能说明

2.5 ansible-playbook

ansible-playbook是日常使用频率最高的命令,通过读取预先编写好的playbook文件实现批量管理。Playbook具有编写简单、可定制性高、灵活方便,以及可固化日常所有操作的特点。

基本语法:

  1 ansible-playbook [options] playbook.yml [playbook2 ...]

2.6 ansible-vault

ansible-vault主要用于配置文件加密,如编写的Playbook配置文件中包含敏感信息,可使用ansible-vault加密/解密此配置文件。

基本语法:

  1 ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]

加密示例:

  1 ansible-vault encrypt test.yml

解密示例:

  1 ansible-vault decrypt test.yml

2.7 ansible-console

ansible-console是Ansible提供的交互式工具,用户可以在ansible-console虚拟出的终端上类似Shell使用Ansible内置命令。

三 Inventory配置及详解

Inventory是Ansible管理主机信息的配置文件,默认存放于:/etc/ansible/hosts,命令使用Inventory分组格式如下:ansible -i /etc/ansible/hosts myhost -m ping

3.1 定义主机和组

  1 [root@manage ~]# vi /etc/ansible/hosts
  2 172.24.8.31		#可直接定义IP地址
  3 client02		#可定义主机名
  4 client03:2345	#可指定非标准22端口
  5 [myhost]		#定义一个名为myhost的分组
  6 172.24.8.31
  7 172.24.8.3[2:4]	#代表172.24.8.32/172.24.8.33/172.24.8.34也属于此分组

提示:支持同一个主机属于多个分组。

3.2 定义主机变量

  1 172.24.8.31 ntp_server=ntp1.aliyun.com

3.3 定义组变量

  1 [myhost:vars]
  2 ntp_server=ntp1.aliyun.com	#定义myhost组中所有主机的ntp_server值

3.4 定义组嵌套及组变量

  1 [myhost1]
  2 172.24.8.31
  3 [myhost2]
  4 172.24.8.32
  5 172.24.8.33:2345
  6 [myhost:children]
  7 myhost1
  8 myhost2
  9 [myhost:vars]
 10 ntp_server=ntp1.aliyun.com

3.5 多重变量定义

变量除了可以定义在Inventory中,也可以独立于Inventory文件之外,通常以.yml、.yaml、.json为后缀或者无后缀。器读取顺序如下:

  1. Inventory配置文件(默认/etc/ansible/hosts)
  2. Playbook中的vars定义的区域
  3. Roles中的vars目录下的文件
  4. Roles同级目录group_vars和hosts_vars目录下的文件

四 Ansible与正则

4.1 全量匹配

  1 [root@manage ~]# ansible "*" -m ping
  2 [root@manage ~]# ansible all -m ping
  3 [root@manage ~]# ansible 172.24.8.* -m ping

4.2 逻辑或(or)匹配

  1 [root@manage ~]# ansible myhost1:myhost2 -m ping

4.3 逻辑非(!)匹配

  1 [root@manage ~]# ansible myhost:\!myhost2 -m ping

提示:所有在myhost组里但不在myhost2组的主机。

去掉!特殊意义,可采用\。

4.4 逻辑与(&)匹配

  1 [root@manage ~]# ansible myhost:\&myhost2 -m ping		#myhost组和myhost2组同时存在的主机

4.5 多条件组合

  1 [root@manage ~]# ansible myhost1:myhost2:\&myhost3:\!myhost4 -m ping
  2 #myhost1组和myhost2组所有主机在myhost3中存在的,且不属于myhost4的主机。

4.6 模糊匹配

  1 [root@manage ~]# ansible 172* -m ping		#所有以172开头的主机

4.7 域切割

  1 [root@manage ~]# ansible myhost2[0] -m ping
  2 [root@manage ~]# ansible myhost2[0:1] -m ping

提示:Ansible底层基于Python,Ansible也支持获取数组相应值。如:

  1 [myhost2]
  2 172.24.8.32
  3 172.24.8.33:2345
  4 myhost2[0]:第一个值,172.24.8.32;
  5 myhost2[-1]:最后一个值,172.24.8.33;
  6 myhost2[0:1]:第一个值和第二个值;
  7 myhost2[1:]:第一个值导最后一个值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 004.Ansible Ad-Hoc命令集

    <host-pattern>:指Inventory中定义的主机或主机组,可以为ip、hostname、Inventory中的group组名等。同时支持具有“.”...

    木二
  • 017.Kubernetes二进制集群扩容worker

    为了更方便远程分发文件和执行命令,本实验配置master节点到其它节点的 ssh 信任关系。

    木二
  • 011.Kubernetes二进制部署kube-scheduler

    本实验部署一个三实例 kube-scheduler 的集群,启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可...

    木二
  • 你有一份Redis运维秘籍,请查收!

    先给大家讲一个基本知识点:数据库分类大致分为两类,关系型数据库和非关系型数据库。如果详细区分的话,还可以继续分下去。

    迅达集团
  • Kerberos安全工件概述

    Cloudera 集群如何使用Kerberos工件,例如principal、keytab和委派令牌。

    大数据杂货铺
  • 用python解析pdf中的文本与表格【pdfplumber的安装与使用】

    我们接触到的很多文档资料都是以pdf格式存在的,比如:论文,技术文档,标准文件,书籍等。pdf格式使得用机器从中提取信息格外困难。

    blmoistawinde
  • python测试开发django-1.开始hello world!

    当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架。django框架有丰富的文档和学习资料,也是非常成...

    上海-悠悠
  • Maven 常用配置

    我需要让整个项目统一字符集编码,就需要设定<project.build.sourceEncoding>UTF-8</project.build.sourceEn...

    Java编程指南
  • CentOS 7部署OpenStack(

    [root@controller ~]# mysql -u root -p -e "CREATE DATABASEglance;"

    py3study
  • Eric Raymond:UNIX 编程艺术 (扫描版)

    本书主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S. Raymond倾力多年...

    用户3157710

扫码关注云+社区

领取腾讯云代金券