Ansible基础使用
原文转自:https://www.cnblogs.com/itzgr/p/10233932.html
作者:木二
目录
一 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为后缀或者无后缀。器读取顺序如下:
- Inventory配置文件(默认/etc/ansible/hosts)
- Playbook中的vars定义的区域
- Roles中的vars目录下的文件
- 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:]:第一个值导最后一个值。
Ansible基础使用的更多相关文章
- ansible基础-安装与配置
一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...
- ansible基础-优化
简介 当管理集群达到一定规模时,ansible达到性能瓶颈是难以避免的,此时我们可以通过一定手段提高ansible的执行效率和性能. 笔者虽未管理过超大规模服务器,但也通过查找资料和咨询大神了解了一些 ...
- ansible基础-Jinja2模版 | 过滤器
Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...
- ansible基础-理解篇
1. 介绍 要说现在的部署工具,ansible可以说家喻户晓了. ansible是一个开源软件,用于软件供应.配置管理.应用部署.ansible可以通过SSH.remote PowerShell.其他 ...
- ansible基础-roles
一 简介 注:本文demo使用ansible2.7稳定版 在我看来,role是task文件.变量文件.handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性. 实践中,通常我们以 ...
- ansible基础-playbooks
1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...
- ansible基础-ansible角色的使用
ansible基础-ansible角色的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
- 003.Ansible基础使用
一 Ansible命令用法 Ansible命令行执行方式有:Ad-Hoc.Ansible-playbook两种,Web方式其官方提供付费产品Tower.Ad-Hoc主要用于临时命令的执行,Ansibl ...
- 自动化运维工具-Ansible基础
目录 自动化运维工具-Ansible基础 什么是Ansible 同类型软件对比 Ansible的功能及优点 Ansible的架构 Ansible的执行流程 安装Ansible ansible配置文件 ...
随机推荐
- [考试总结]noip模拟9
因为某些原因,咕掉了一段时间 所以现在才更新 T1 斐波那契 一看就是规律 然而我选择了暴力 其实完全可以打表去找规律. 然后就可以发现父亲的顺序也是斐波那契. 就这 #include<bits ...
- VM12升级VM15
之前一直用的12,现在想要升级为15.主要是为了解决kali操作系统版本兼容问题 打开VM12,点击[帮助]-->[软件更新]--> [检查更新] 发现有VM15,点击[了解详情] VM1 ...
- 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...
- jsp-->js-->jsp之间的关系
jsp和js通过form.submit();发送request请求createdIdSave.jsp 在CreatedIdSave.jsp中进行BL的增删改查操作,在jsp中将值保存到页面的scrip ...
- Go语言基础知识总结(持续中)
Go基础知识总结 变量声明 Go语言中的变量需要声明以后才可以使用(需要提前定义变量)并且声明后必须使用(不适用会报错) 标准声明 var 变量名 变量类型 example: var name str ...
- phpunit 远程代码执行漏洞(CVE-2017-9841)
影响版本 4.8.19 ~ 4.8.27 5.0.10 ~ 5.6.2 访问进行抓包 http://192.168.49.2:8080/vendor/phpunit/phpunit/src/Util/ ...
- Docker安装Kong API Gateway并使用
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 Kong不是一个简单的产品,本文讲的Kong主要指的是Kong API Gateway,即 ...
- QML用Instantiator动态创建顶级窗口
关键点 使用Model驱动Instantiator QML里面的hashmap: QQmlPropertyMap 上一次说到用 QQmlApplicationEngine 多次load的方式创建多个一 ...
- QT-可拖拽可编辑的多控件ListView
目标 结合前面的2篇文章, 继续升级QML版本的ListView: 又要拖拽, 又要可编辑, 还得支持多个控件. 循序渐进 本文基于前一篇的基础: Qt-可编辑的ListView 要循序渐进的学习. ...
- TestNG注释@BeforeGroups与@AfterGroups不执行的处理
在学习TestNG框架注解时发现在执行以下的代码 package com.groups; import org.testng.annotations.AfterGroups; import org.t ...