Ansible 使用和模块化深入解析| 学习笔记

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习 Ansible 使用和模块化深入解析

开发者学堂课程【自动化运维工具 Ansible 实战Ansible 使用和模块化深入解析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/577/detail/7975


Ansible 使用和模块化深入解析


内容介绍

一、ansible 配置文件

二、ansible 系列命令

三、ansible 命令用法

四、ansible 的 Host-pattern(主机模式)

五、ansible 命令执行过程

六、执行状态

七、ansible 使用示例

八、ansible 常用模块


一、ansible 配置文件

Ansible 配置文件 /etc/ansible/ansible. cfg (一般保持默认) ,输入:vim /etc/ansible/ansible.cfg 这就是 ansible 的主配置文件,由许多”[]”分成许多语句,最主要的

[defaults] #inventory=/etc/ansible/hosts# 主机列表配置文件

#library=/usr/share/my _ modules/# 库文件存放目录

#remote _ tmp=$HOME/. ansible/tmp# 临时 ρy 命令文件存放在远程主机目录(最后会删除)#local _ tmp=$HOME/. ansible/tmp# 本机的临时命令执行目录

#forks=5# 默认并发数(如现在是5,那就会一次执行5个,然后再执行5个)

#sudo _ user=root#默认 sudo 用户

#ask _ sudo _ pass=True#每次执行 ansible 命令是否询问 ssh 密码

#ask _ pass=True

#remote _ port=22(远程主机端口号)

#host _ key _ checking=False# 检查对应服务器的 host _ key(检查主机时是否验证对方公钥,当与一台新主机连接时需要用命令连接),建议取消注释(取消后就不再需要密钥检查,无需一个个密钥连接)。

#log _ path=/var/log/ansible. log# 日志文件(建议启用,可记录 ansible 的操作)


二、ansible 系列命令

1、Ansible 系列命令

ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull

2、ansible-doc:显示模块帮助

ansible-doc[options][module...]

-a  显示所有模块的文档

-l,--list 列出当前模块列表有哪些,显示时需手动翻页

-s,--snippet 显示指定模块的 playbook 片段

示例:

ansible-doc-I 列出所有模块(加上 |wc-1可以统计出目前有1653个模块)

ansible-doc ping 查看指定模块帮助用法

[root@centos7,ssh]#ansible-doc ping

PING(/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py)

A trivial test module, this module always returns“pong'on  successful  contact. It does not make sense in playbooks, but it is useful from'/usr/bin/ansible'to verify the ability to login and that a usable Python is  configured . This is NOT LCMP ping, this is just a trivial test module that requires Python on the remote-node. For wingdows targets, use the[wrin ping]module instead, For Network targets, use the[net _ ping]module instead.

OPTIONS(=is mandatory):

-data

Data to return for the ‘ping.'return value.

If this parameter is set to‘crash', the module will cause an exception.

[Default:pong]

NOTES:

*For windows targets, use the[win _ ping]module instead.

*For Network targets, use the[net _ ping]module instead.

AUTHOR:

Ansible Core Team, Michael DeHaan

METADATA:

status:

- stableinterface

supported _ by:core

EXAMPLES:

#Test we can logon to' webservers 'and execute python with json lib.

#ansible webservers-m ping

#Example from an Ansible Playbook

-ping:

#Induce an exception to see what happens

-ping:

data:crash

RETURN VALUES :

ping:  description ;value provided with the data parameter

returned:success

type:string

sample:pong

(END)

ansible-doc-s ping查看指定模块帮助用法(此格式会简单明了)


三、ansible 命令用法

1、ansible

通过 ssh 实现配置管理、应用部署、任务执行等功能,建议配置 ansisble 端能基于密钥认证的方式联系各被管理节点。

2、ansible(此为主机清单)[-m module _ name](模块名)[-a args](加模块的参数)

--version 显示版本

-m modul 指定模块,默认为 command

-v 详细过程  -vv  -vvv 更详细

--list-hosts 显示主机列表,可简写 list

-k,--ask-pass 提示输入ssh连接密码,默认 Key 验证

-K,--ask-become-pass 提示输入 sudo 时的口令

-C,--check 检查,并不执行

-T,--timeout=TIMEOUT 执行命令的超时时间,默认10s

-u,--user=REMOTE_USER 执行远程执行的用户

-b,--become 代替旧版的 sudo 切换

[root@centos7,ssh]#ansible dbsrvs-u wang-k-m command -a’ls/root’此时以 wang 无法查看,但

[root@centos7,ssh]#ansible dbsrvs-root-k -m command -a’ls/root’ 此时就可以连接,若还用 wang 连接就要用到 sudo,现在用 -b。

[root@centos7,ssh]#ansibledbsrvs-m command -a’ls/root‘-u wang -k -b-k此时就可以实现 wang 的连接。(需要 visudo)


四、ansible 的 Host-pattern(主机模式)

1、ansible 的 Host-pattern

匹配主机的列表

(1)、All:表示所有 Inventory 中的所有主机‘

ansible all-m ping

(2)、*:通配符

ansible" * "-m ping

ansible 192. 168.1.*−mping

ansible"*srvs"ping

(3)、: 表示或关系

ansible“websrvs:appsrvs"-m ping ansible“192. 168.1. 10:192. 168.1. 20”--mping

 2、逻辑

ansible"websrvls&bsrvs"ping(需注意&需加“”或’’都可以)

在 websrvs 组并且在 dbsrvs 组中的主机

3、逻辑非

ansible'websrvs:!dbsrvs'-m ping

在 websrvs 组,但不在 dbsrvs 组中的主机

注意:此处需为单引号’

 4、综合逻辑

ansible'websrvs:dbsrvs:&appsrvs:lftpsrvs'-m ping

5、正则表达式

ansible"websrvs:dbsrvs"

ansible"~(web/db).*\. magedu\. com"-m ping


五、ansible 命令执行过程

1、加载自己的配置文件默认

/etc/ansible/ansible. cfg

2、加载自己对应的模块文件

如 command

3、通过 ansible

将模块或命令生成对应的临时 ργ 文件,并将该文件传输至远程服务器的对应执行用户

$HOME/. ansible/ttp/ansible-tmp-  数字 /XXX.PY 文件

4、给文件 +x 执行

5、执行并返回结果

6、删除临时 py 文件,sleep 0退出

[root@ansible ~]#ansible all -m ping -vvv

来显示详细过程,会看到有复制文件的过程,文件传过去的过程都会展现出来。


六、执行状态:

绿色:执行成功并且不需要做改变的操作

黄色:执行成功并且对目标主机做变更

红色:执行失败

当然颜色是可以更改的。

绿色:成功并且对系统目标系统没有做任何修改。

黄色:成功并且对远程主机做过更新更改了,比如在目标的主机上删了一个文件或者重启服务或者是把某一个配置文件改了内容了这都会变成黄色。

红色:执行失败,红色代表基本上全是错误相关。

如下:

[colors]

#highlight=white

#verbose=blue

#warn=bright purple

#error=red

#debug=dark gray

#deprecate=purple

#skip=cyan

# unreachable =red

#ok=green

#changed=yellow

#diff _ add=green

#diff _ remove=red

#diff _ lines=cyan


七、ansible 使用示例

1、以 wang 用户执行 ping 存活检测

ansible all −m ping−u wang−k

2、以 wang sudo 至 root 执行 ping 存活检测

ansible all-m ping-u wang-b-k

3、以 wang sudo 至 mage 用户执行 ping 存活检测

ansible all-m ping-uwang-b-k-become-user mage

4、以 wang sudo 至 root 用户执行 Is

ansible all-m command-uwang-become-user=root-a'ls/root'-b-k-K

 

八、ansible 常用模块

1、Command:在远程主机执行命令,默认模块,可忽略 -m 选项

ansible srvs-m command -a'service vsftpd start'

ansible srvs-m command-a'echo-magedu[passwd--stdin wang' 不成功

可用 doc 来查看 command 的详细解释,可以看到 chdir(执行命令前切换文件夹),creates(如果一个文件或模式对应的文件已存在,将不执行之后的操作)与removes(如果不存在将不执行)两者相反(是关于条件的两种操作)。

此命令不支持$VARNAME< > | ; &等,所以用 shell 模块实现

2、Shell:和 command 相似,用 shell 执行命令

ansible srv-m shell-a'echo magedu | passwd-stdin wang'

[root@ansible ~]#ansible 192.168.30.* -m shell -a’echo magedu passwd –stdin tesel’就完成了无需 command 繁琐的过程。

调用 bash 执行命令类似

cat/ttp/stanley. md | awk-F'|'{print$1,$2}'&>/tmp/example. txt这些复杂命令,即使使用 shell 也可能会失败,解决办法:写到脚本时,copy 到远程,执行,再把需要的结果拉回执行命令的机器。

3、Script:运行脚本

-a"/PATH/TO/SCRIPT_FILE"

snsible websrvs-m script-af1. sh

它不需要脚本,在 ansible 中编译好脚本就可推送到各个主机

[root@ansible ~]#chmod +x host.sh

[root@ansible~]#ansibleall-mscript -a’/root/ansible/host.sh’

这就把脚本推了过去,从 doc 看出 script 用法与 command 和 shell 类似。

 4、Copy:从服务器复制文件到客户端

ansible srv-m copy-a“src=/root/f1. sh dest=/tmp/f2. sh owner=wang mode=600 backup=yes"如目标存在,默认覆盖,此处指定先备份

ansiblesrν-m copy-a“content='test content\n'dest=/tmp/f1. txt"利用内容,直接生成目标文件。

[root@ansible ~]#ansible all -a ‘ls -l/etc/selinux/confing’

之后:[root@ansible~]#ansibleall-mcopy a’src=/root/ansible/selinux/config backup=yes’  这里做好备份,然后覆盖过去。[root@ansible~]#ansibleall-mshell-a’rm -f/etc/selinux/config’此时就把备份删除了。

5、Fetch:

从客户端取文件至服务器端,copy 相反,目录先 tar。

ansible’srv-m fetch-a‘src=/root/a. sh dest=/data/scripts'

6、File:设置文件属性

ansible srv-m file-a"path=/root/a. sh owner=wang mode=755“

ansibleweb-mfile-a'src=/app/testfile dest=/app/testfile-link state=link'

相关文章
|
4月前
|
资源调度 前端开发 JavaScript
构建高效前端项目:现代包管理器与模块化的深度解析
【2月更文挑战第21天】 在当今快速演变的前端开发领域,高效的项目管理和代码组织已成为成功交付复杂Web应用的关键。本文将深入探讨现代前端包管理器如npm, yarn和pnpm的工作原理,以及它们如何与模块化编程实践(例如CommonJS、ES6模块)协同工作以优化开发流程。我们将剖析这些工具的内部机制,了解它们如何解决依赖冲突,提高安装速度,并保证项目的健壮性。同时,本文还将介绍模块化编程的最佳实践,包括代码拆分、重用和版本控制,帮助开发者构建可维护且性能卓越的前端项目。
|
13天前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
40 3
|
4月前
|
XML Java 数据库
【后台开发】TinyWebser学习笔记(3)HTTP连接与解析
【后台开发】TinyWebser学习笔记(3)HTTP连接与解析
72 4
|
4月前
|
编解码 Android开发 开发者
安卓碎片(Fragments)深度解析:模块化您的应用
【4月更文挑战第13天】Android开发中,碎片(Fragments)用于应对多屏幕尺寸挑战,实现代码重用和模块化。碎片可嵌套在活动中,适应不同屏幕,简化多屏适配、导航和视图管理。通过`FragmentTransaction`动态操作,实现状态保存及回退栈管理。注意避免内存泄漏,考虑性能开销,确保跨设备测试。碎片增强应用灵活性,但也增加复杂性,未来有望有更高级工具优化开发。
80 7
|
4月前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
53 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染4
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染4
49 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染2
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染2
43 0
|
前端开发
前端学习笔记202305学习笔记第二十四天-http解析和请求发送1
前端学习笔记202305学习笔记第二十四天-http解析和请求发送1
54 0
|
4月前
|
存储 网络协议 Linux
Linux C/C++ 开发(学习笔记九 ):DNS协议与请求的实现
Linux C/C++ 开发(学习笔记九 ):DNS协议与请求的实现
158 0
|
11月前
|
Go 自然语言处理 编译器
Go 学习笔记-Go 词法解析
Go 学习笔记-Go 词法解析
68 0
Go 学习笔记-Go 词法解析

推荐镜像

更多