- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章linux 自动化运维工具ansible的使用详细教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、ansible简介 。
1.ansible 。
ansible是新出现的自动化运维工具,基于Python研发。糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。仅需在管理工作站上安装ansible程序配置被管控主机的IP信息,被管控的主机无客户端。ansible应用程序存在于epel(第三方社区)源,依赖于很多python组件。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信; 。
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机; 。
(3)、各种模块核心模块、command模块、自定义模块; 。
(4)、借助于插件完成记录日志邮件等功能; 。
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务.
参考站点:http://www.ansible.com.cn 。
2.ansible特性 。
模块化设计,调用特定的模块来完成特定任务,本身是核心组件,短小精悍; 。
基于Python语言实现,由Paramiko(python的一个可并发连接ssh主机功能库), PyYAML和Jinja2(模板化)三个关键模块实现; 。
部署简单,agentless无客户端工具; 。
主从模式工作; 。
支持自定义模块功能; 。
支持playbook剧本,连续任务按先后设置顺序完成; 。
期望每个命令具有幂等性:
3.ansible架构 。
ansible core:ansible自身核心模块 host inventory:主机库,定义可管控的主机列表 connection plugins:连接插件,一般默认基于ssh协议连接 modules:core modules(自带模块)、custom modules(自定义模块) playbooks:剧本,按照所设定编排的顺序执行完成安排任务 。
4.配置文件:
(1)ansible应用程序的主配置文件:/etc/ansible/ansible.cfg (2) Host Inventory定义管控主机:/etc/ansible/hosts 。
遵循INI风格;中括号中的字符是组名;一个主机可同时属于多个组; 。
示例:
。
。
注意:默认是以root用户执行,但是基于ssh连接操作要多次输入密码,为方便可以使用基于ssh密钥方式进行认证 。
2、ansible应用程序命令 。
1.ansible-doc命令:获取模块列表,及模块使用格式; 。
。
。
2.ansible命令格式 。
。
。
。
<host-pattern> 。 |
指明管控主机,以模式形式表示或者直接给定IP,必须事先定义在文件中;all设置所有 。 |
[-f forks] 。 |
指明每批管控多少主机,默认为5个主机一批次 。 |
[-m module_name] 。 |
使用何种模块管理操作,所有的操作都需要通过模块来指定 。 |
[-a args] 。 |
指明模块专用参数;args一般为key=value格式 。 注意:command模块的参数非为kv格式,而是直接给出要执行的命令即可; 。 |
。
注意:command模块的参数非为kv格式,而是直接给出要执行的命令即可; 。
注意:<host-pattern>默认读取/etc/ansible/hosts,也可以指明自定义文件路径 。
-iPATH, --inventory=PATH:指明使用的host inventory文件路径; 。
常用模块(module_name):
1)command:默认模块,可省略。在远程主机上进行操作命令 。
-a 'COMMAND' 。
注意:comand模块的参数非key=value格式,直接给出要执行的命令 。
[root@localhost ~]# ansible all -m command -a 'ifconfig' 。
2)user: -a 'name= state={present(创建)|absent(删除)} force=(是否强制操作删除家目录) system= uid= shell= home=' [root@localhost ~]# ansible all -m user -a 'name=ansible state=present' 。
3)group: -a 'name= state={present|absent} gid= system=(系统组)' [root@localhost ~]# ansible all -m group -a 'name=mygroup state=presentsystem=true' 。
4)cron: -a 'name= state= minute= hour= day= month= weekday= job=' [root@localhost ~]# ansible all -m cron -a 'name='Time' state=presentminute='*/5' job='/usr/sbin/ntpdate 172.168.0.1 &> /dev/null'' 。
5)ping:
无参数 。
[root@localhost ~]# ansible all -m ping 。
6)file:文件管理 -a 'path= mode= owner= group= state={file|directory|link|hard|touch|absent} src=(link,链接至何处)' [root@localhost ~]# ansible all -m file -a 'path=/tmp/testdirstate=directory' [root@localhost ~]# ansible all -m file -a 'path=/tmp/test.txt state=touchmod=600 owner=user1' 。
7)copy:
-a 'dest=(远程主机上路径) src=(本地主机路径) content=(直接指明内容) owner= group= mode=' [root@localhosttmp]# ansible web -m copy -a 'src=/etc/yum.repos.d/aliyun.repodest=/etc/yum.repos.d/' 。
8)template 。
-a 'dest= src=\'#\'" content= owner= group= mode=' 。
9)yum:
-a 'name= conf_file=(指明配置文件) state={present|latest|absent} enablerepo= disablerepo=' [root@localhost ~]# ansible all -m yum 'name=httpd state=present' 。
10)service:
-a 'name= state={started|stopped|restarted} enabled=(是否开机自动启动) runlevel=' [root@localhost ~]# ansible all -m service -a 'name=httpd state=started' 。
11)shell:
-a 'COMMAND' 运行shell命令 [root@localhost ~]# ansible all -m shell -a echo "123456789" |passwd --stdin user1' 。
12)script:
-a '/PATH/TO/SCRIPT'运行脚本 [root@localhost ~]# ansible all -m script -a '/tmp/a.sh' 。
13)setup:获取指定主机的facts变量; 。
3、Playbooks剧本 。
1.playbook组织格式:YAML语言格式 。
playbooks是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行 。
(1)YAML简介 。
YAML:YAML Ain't Markup Language; Yet Another Markup Language,
类似于半结构化数据,声明式配置;可读性较高的用来表达资料序列的格式,易于与脚本语言交互 官方站点:http://www.yaml.org 。
(2)语法格式 。
1)任何书记结构都用缩进来标识,可以嵌套 2)每一行是一个键值数据key:value,冒号隔开。若想在一行标识需要用{ }和,分隔格式 3)列表用 - 标识 。
2.inventory参数:主机库ssh参数设置 。
ansible基于ssh连接inventory中指定的远程主机时,将以此处的参数指定的属性进行; 。
。
。
实例:
[websrvs] 。
192.168.0.101 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=xuding 192.168.0.102 。
注意:在/etc/ansible/hosts中直接定义连接时候的密码不安全,一般建议基于ssh的密钥认证方式实现 。
3.playbooks 。
(1)核心元素 。
Tasks任务、Variables变量、Templates模板、Handlers处理器、Roles角色 。
(2)playbooks中定义任务:
- name: task description 注释描述信息 module_name: module_args 声明模块:定义ansible模块参数 。
(3)ansible-playbook执行命令:
ansible-playbook <filename.yml> ... [options] 。
4.playbook--- 变量 。
(1)变量命名:字母、数字和下划线组成,仅能以字母开头; 。
(2)变量种类:
1)facts:由远程主机发回的主机特有的属性信息,这些信息被保存在ansible变量中;无须声明,可直接调用; 。
2)自定义变量: 通过命令行传递:ansible-playbook test.yml --extra-vars "host=www user=test" 通过roles传递 。
3)主机变量:定义在inventory中的主机之后的变量;直接传递给单个主机的变量 。
实例:
。
。
4)组变量:定义在inventory中的组上的变量(例如在默认的文件/etc/ansible/hosts上编辑) 。
。
。
。
注意:组名要事先存在,实例如下:
。
。
。
变量使用示例:
。
。
注释:
1) {{ }} 调用变量 2) #ansible-playbook /PATH/TO/SOME_YAML_FILE { -eVARS|--extra-vars=VARS} 变量的重新赋值调用方法 。
。
。
。
5.playbook--- tasks 。
(1)条件测试:
在某task后面添加when子句即可实现条件测试功能;when语句支持Jinja2语法; 实例:当时RedHat系列系统时候调用yum安装 。
tasks
。
。
。
(2)迭代:item 。
在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表; 。
tasks
。
。
。
注意:迭代中,列表中的每个元素可以为字典格式; 。
实例:
。
。
。
6.playbook--- handlers:处理器;触发器 。
只有其关注的条件满足时,才会被触发执行的任务; 实例:配置文件发生改变触发重启服务 。
。
。
。
7.playbook模板 。
templates: 用于生成文本文件(配置文件);模板文件中可使用jinja2表达式,表达式要定义在{{}},也可以简单地仅执行变量替换; 。
roles:
。
。
ansible与saltstack对比 。
前一段时间用了saltstack,免不得要谈一下他们的优缺点。两者都是安装和使用都非常方便的批量管理软件.
1、salt要安装agent;ansible不需要,通过ssh连接,省掉装agent的事.
2、salt在server端要启进程;ansible不需要,但这都无所谓差不多.
3、salt与ansible都有模块,可使用任意语言开发模块.
4、salt与ansible都使用yaml语言格式编写剧本.
ansible由于走的是ssh,所以它有认证的过程,以及加密码的过程,这使得ansible非常慢,不适用于大规模环境(指上千台).
为什么我放弃salt呢,首先服务器不多(百台左右),其次,salt的master端与minion端TCP连接经常断开,导致有时执行命令时会漏机器,这简直让我忍无可忍。听说最新版的salt好了很多,但由于公司系统是定制的,安装软件特别麻烦(15M的系统,解决依赖就是个大问题),我还是选择了ansible.
以上所述是小编给大家介绍的自动化运维工具ansible的使用详细教程,希望对大家有所帮助.
最后此篇关于linux 自动化运维工具ansible的使用详细教程的文章就讲到这里了,如果你想了解更多关于linux 自动化运维工具ansible的使用详细教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在做一个关于代码学院的教程,我在这里收到一个错误,说“看起来你的函数没有返回‘唉,你没有资格获得信用卡。资本主义就是这样残酷。’”当收入参数为 75 时。”但是该字符串在控制台中返回(由于某种原因
我正在阅读 Go 的官方教程,但很难理解 Channel 和 Buffered Channels 之间的区别。教程的链接是 https://tour.golang.org/concurrency/2和
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
作为 iOS 新手,有大量书籍可以满足学习基础知识的需求。现在,我想转向一些高级阅读,例如 OAuth 和 SQLite 以及动态 API 派生的 TableView 等。您可以推荐任何资源吗? 最佳
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
前言 很多同学都知道,我们常见的CTF赛事除了解题赛之外,还有一种赛制叫AWD赛制。在这种赛制下,我们战队会拿到一个或多个服务器。服务器的连接方式通常是SSH链接,并且可能一个战队可能会同时有
Memcached是一个自由开源的,高性能,分布式内存键值对缓存系统 Memcached 是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象),这些数据可以是数据库调用、A
Perl 又名实用报表提取语言, 是 Practical Extraction and Report Language 的缩写 Perl 是由 拉里·沃尔(Larry Wall)于19
WSDL 是 Web Services Description Language 的缩写,翻译成中文就是网络服务描述语言 WSDL 是一门基于 XML 的语言,用于描述 Web Services 以
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我正在寻找解释在 WPF 中创建自定义用户控件的教程。 我想要一个控件,它结合了一个文本 block 、一个文本框和一个启动通用文件打开对话框的按钮。我已经完成了布局,一切都连接好了。它有效,但它是三
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我接近 fourth page of the Django tutorial 的开始看着vote查看,最后是这样的: # Always return an HttpResponseRedirect a
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
是否有任何好的 Qt QSS 教程,或者在某个地方我可以看到样式小部件的示例?如果某处可用,我想要一些完整的引用。除了有关如何设置按钮或某些选项卡样式的小教程外,我找不到任何其他内容。 最佳答案 Qt
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!