ansible之路——第五章:ansible的几个命令(代码片段)

wangwei1 wangwei1     2022-12-04     675

关键词:

安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、 ansible-doc、ansible-galaxy、ansible-console、ansible-playbook、ansible-pull、ansible-vault。

下面简单介绍一下这几个命令的用法。相应命令的详细用法可以通过man来查询。

 

5.1 ansible

Ansible是指令核心部分,其主要用于执行ad-hoc命令。 Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令。

一个ad-hoc命令的执行,需要按以下格式进行执行:

ansible  主机或组  -m  模块名  -a "模块参数"  ansible参数

其中:

  • 主机和组,是在/etc/ansible/hosts 里进行指定的部分,当然动态Inventory 使用的是脚本从外部应用里获取的主机;
  • 模块名,可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改;
  • 模块参数,可以通过 “ansible-doc 模块名” 查看具体的用法及后面的参数;
  • ansible参数,可以通过ansible命令的帮忙信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。

 

5.2 ansible-doc

技术图片

  

该指令用于查看模块信息,常用参数有-l ,具体如下:

//列出所有已安装的模块

ansible-doc -l

//查看某个模块的具体用法

ansible-doc <module>

 

5.3 ansible-galaxy

技术图片

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。

 

5.4 ansible-console

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

如:

技术图片

  

5.5 ansible-playbook

该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作。

 

5.6 ansible-pull

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

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

1)   被控节点在配置时不可用,比如自动伸缩的服务池

2)   被控节点较多,控制机资源有限无法满足高线程和低时间的运行效率

 

技术图片

 

 

 

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

1)    每台被控端需要安装Ansible 和git(svn)

2)    所有的配置及playbooks 都存放在git 仓库

3)    被控端的ansible-pull 计划任务会定期检查给定的git 的tag 或者分支

4)    ansible-pull 执行特定的playbooks 即local.yml 或者hostname.yml

5)    每次更改playbooks 只需要提交到git 即可

 

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

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

5.6.1测试:

在GitHub上创建一个新的库:pull-test

本地将这个库下载下来,并提交ansible脚本:

# git clone git@10.152.35.204:root/pull-test.git
# cd pull-test/
# vim main.yml
# git add main.yml
# git commit -m "show route info"
# git push -u origin master

这里的main.yml只是打印了本地的路由信息,实际上可以执行任何操作:

技术图片

编辑host inventory:

127.0.0.1 ansible_ssh_pass=root123

 

开始测试:

技术图片

 

注意,ansible-pull的本地主机清单里面的ip地址必须是127.0.0.1,否则会报错:

ERROR! Specified hosts and/or --limit does not match any hosts

如果不提供任何主机清单(/etc/ansible/hosts里面也为空),那么仓库中的ansible脚本里面需要使用127.0.0.1或者localhost作为hosts。

5.6.2 周期执行

在实际应用中,ansible-pull一般与linux下的crontab协作,用于定期检查仓库中的配置或者脚本是否更新:

# -C 分支 -d 目的地  -i  主机路径  -e 添加参数 -o 只有git仓库发生改变才执行playbook

如:

*/5 * * * * ansible-pull  -C master -d /root/test -i /opt/ansible-pull-test/hosts -U <github仓库> -e "role=db" shenchan.yml -o

 

5.7 ansible-vault

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

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

5.7.1 用法:

技术图片 

5.7.2 加密:

技术图片

5.7.3 解密:

技术图片

5.7.4 加密时编辑(输入密码后可以看到加密前的实际内容):

技术图片

5.7.5 加密时运行:

技术图片

 

5.7.6 还可以将加密的密码存在文件中,这样在运行的时候就不需要输入密码了:

技术图片

 注:从ansible2.4开始,官方就不再推荐使用--vault-password-file选项了,开始推荐使用--vault-id来代替--vault-password-file指定密码文件。

5.7.7 创建加密文件,编辑退出后自动对文件进行加密:

技术图片

5.7.8 查看加密文件原内容:

技术图片

技术图片

5.7.9 修改加密文件的密码:

技术图片

技术图片

 

同样的,在更新密码的时候,推荐使用--new-vault-id来代替--new-vault-password-file指定新的密码文件。

5.7.10 加密字符串:encrtpt_string

前面的命令都是对整个文件进行加密,但是通常我们并不需要加密整个文件,因为这样反而会对我们的阅读造成困扰,有时我们只是想把“密码”等敏感信息隐藏起来而已。

从ansible2.3开始,使用encrypt_string命令,可以加密字符串,通过加密字符串的功能,能够有效的隐藏敏感信息的值。

比如,有如下的playbook:

技术图片

我们觉得password这个密码变量以明文的方式存储在playbook中不太安全,因为所有有权限查看该playbook的人都能看到密码,我们需要对密码字符串的值进行加密,以保证它不会明文出现在这里。操作如下:

先对字符串进行加密,加密时,会提示输入密码:

技术图片

 这一长串文本就是1234加密后的文本。现在,复制这串文本,用这串文本替换playbook中的密码,如:

技术图片

这里的密码已经被替换为了加密后的字符串了,下面来运行这个playbook:

技术图片

 

5.8 ansible-lint

除了上述几个命令之外,还有ansible-lint这个命令,不过需要安装ansible-lint的软件包

ansible-lint 是一个对playbook的语法进行检查的工具。

技术图片

 

如果没有安装ansible-lint,也可以使用 ansible-playbook --syntax-check对剧本进行语法的检查。

ansible-playbook --syntax-check + 剧本名
(对剧本语法进行检查但不执行)

 

1ansible模块使用

ansible默认提供了很多模块来供我们使用。在 Linux 中,我们可以通过ansible-doc -l命令查看到当前ansible都支持哪些模块,通过 ansible-doc  -s  模块名 又可以查看该模块有哪些参数可以使用。  ... 查看详情

ansible常用命令大全

ansible默认提供了很多模块来供我们使用。在Linux中,我们可以通过ansible-doc -l命令查看到当前ansible都支持哪些模块,通过 ansible-doc  -s  模块名 又可以查看该模块有哪些参数可以使用。我们常用的几个模... 查看详情

如何使用ansible自动化部署docker镜像

参考技术Aansible默认提供了很多模块来供我们使用。在Linux中,我们可以通过ansible-doc-l命令查看到当前ansible都支持哪些模块,通过ansible-doc-s模块名又可以查看该模块有哪些参数可以使用。下面介绍比较常用的几个模 查看详情

ansible自动化部署之路笔记(代码片段)

使用ansible编写自动化部署playbook,解放运维手工操作模块使用笔记changed_when判断条件,用于重发发布,检测服务是否已经启用1-hosts:redis2gather_facts:no3tasks:4#判断是否已经发布5-name:redisalreadydeploy?6shell:./etc/profile&&./etc/bashrc&... 查看详情

第一天,ansible源码学习

ansible用过一段时间,都是停留在用的阶段,好奇它内部是如何执行,所以准备从源码分析。分析一个程序,先了解它的执行流程会对学习很有帮助(ps:图片是使用网络的)。从图片中可以知道,ansible执行的步骤就6步,其中前面... 查看详情

我的学习之路_第五章_data,正则

Date类(时间类)所属包:java.util.Date构造方法:publicDate()返回的是当前时间也就是1970-1-1到电脑目前的时间值,用毫秒来表示 publicDate(long毫秒值)返回指定毫秒值的时间方法: 返回值longgetTime()返回当前时间的毫秒值 没有返回值setTime(lon... 查看详情

ansible的file模块(代码片段)

创建、修改、删除文件或者目录:file模块file模块常用的几个参数:state、path、src、dest、mode、owner、group、namestate后面跟的参数:   touch :创建文件  directory:创建目录  absent:删除文件或者目录或者链接文件 ... 查看详情

ansible-h报错

Traceback(mostrecentcalllast):File"/usr/bin/ansible",line44,in<module>fromansible.errorsimportAnsibleError,AnsibleOptionsError,AnsibleParserErrorImportError:cannotimportnameAnsibleOptionsError哪位大神能帮忙解答一下谢谢。网上找了好多感觉跟python有关系,但... 查看详情

ansilbe额外模块

Ansible常用的模块路人皆知:copycommand raw shellyum…..,但这些模块仅仅只是Ansbile众多模块中的几个核心模块而已,除此之外,Ansible涵盖了更为庞大的额外模块,涉及到网络、监控、服务器硬件、云产品、存储设备等等,甚... 查看详情

linux编程的几个重要知识点

...到NFS系统、nginx负载均衡、keepalived高可用等。第七阶段:Ansible自动化运维与Zabbix监控Ansible自动化运维与Zabbix监控包括:SSH服务秘钥认证、ansi 查看详情

第五章:节点重要性与相似性

第五章节点的重要性与相似性关键节点是网络科学的重要研究内容之一本章要重点详细介绍无向网络中节点重要性排序的几个常用指标:度值,介数,接近数,k-壳值和特征向量5.2无向网络节点重要性指标5.2.1度中心性一个节点... 查看详情

ansible剧本(代码片段)

第一章使用ansible模块实现安装rsync服务01.服务端操作第一步:安装软件ansible172.16.1.41-myum-a"name=rsyncstate=installed"第二步:编写文件ansible172.16.1.41-mcopy-a"src=/server/scripts/rsyncd.confdest=/etc/"第三步:创建用户组和用户ansibl... 查看详情

第1天:ansible安装部署

Ansible介绍Ansible是一个简单的自动化引擎,可完成配置管理、应用部署、服务编排以及各种IT需求。它是一款使用Python语言开发实现的开源软件,其依赖Jinjia2、paramiko和PyYAML这几个python库。Ansible安装部署简单,只需要再主控端部... 查看详情

ansible8:playbook循环

  在使用ansible做自动化运维的时候,免不了的要重复执行某些操作,如:添加几个用户,创建几个MySQL用户并为之赋予权限,操作某个目录下所有文件等等。好在playbook支持循环语句,可以使得某些需求很容易而且很规范... 查看详情

ansible8:playbook循环

在使用ansible做自动化运维的时候,免不了的要重复执行某些操作,如:添加几个用户,创建几个MySQL用户并为之赋予权限,操作某个目录下所有文件等等。好在playbook支持循环语句,可以使得某些需求很容易而且很规范的实现。1... 查看详情

覆盖 Ansible 模块选项默认值

】覆盖Ansible模块选项默认值【英文标题】:OverridingAnsiblemoduleoptionsdefaults【发布时间】:2015-05-2207:54:03【问题描述】:我正在努力找出如何在不使用变量手动滚动的情况下。如果有一种方法可以仅针对一部分主机覆盖模块选项默... 查看详情

playbook

七种武器1.第一种武器ansible命令,用于执行临时性的工作,必须掌握2.第二种武器ansible-doc是ansible模块的文档说明,针对每个模块都有详细的说明及应用案例介绍,功能和linux系统man命令类似类似,必须掌握3.第三种武器ansible-console是ansi... 查看详情

ansible-awx(代码片段)

...速上手1、安装:官方安装文档:安装文档https://github.com/ansible/awx/blob/devel/INSTALL.md官方安装方式分三种:openshift,kubernetes或者DockerCompose一开始肯定有单机的方式,后面再扩展集群。最后再弄几个实例单机测试暂时用DockerCompose软件... 查看详情