Linux中级之ansible概念及hoc命令行调用模式
一、Ansible简介
ansible是新出现的开源的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、connection plugins:连接插件,Ansible和Host通信使用,负责和被监控端实现通信;
(2)、host inventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载;指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbooks:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
(6)、Ansible:Ansible的核心程序
ansible的特点:
(一)批量管理工具
(二)模块
(三)python
(四)无终端,是基于ssh实现管理的
(五)也支持主从模式
(六)也支持playbook
Ansible的优点:
(1)Stupied Simple ,上手简单,学习曲线平滑
(2)SSH by default ,安全,无需安装客户端
(3)配置简单、功能强大、扩展性强
(4)支持API(应用程序接口)及自定义模块,可通过Python轻松扩展
(5)通过Playbooks来定制强大的配置、状态管理
(6)提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台(收费产品,一般很少用)
(7)幂等性:一种操作重复多次结果相同
二、ansible的安装
1、安装
yum install epel-release #需要安装epel源
yum install ansible -y
2、查看ansible的版本信息
ansible --version
3、查看ansible配置文件
[root@ren5 ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
4、调用模块(python)
paramiko #模拟ssh协议批量管理主机
jinja2 #模板语言,主要用来传递变量
yaml #相当于是一种编程语言
5、控制方式:
(1)免密钥:key-gen
server: ssh-keygen
scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys
(2)用户密码:
参数形式:ansible_ssh_user=root; ansible_ssh_pass=root ansible_ssh_port=22
host inventory:记录着客户端的ip信息
[root@ren5 ~]# vim /etc/ansible/hosts
在文件最后添加:
[test_ren1]
192.168.11.4 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22
192.168.11.6 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22
注意:/root/.ssh/known_hosts需在此文件中有ssh连接的记录才可
或者取消/etc/ansible/ansible.cfg文件中#host_key_checking = False的注释
如果用了密钥登录,则密码登录无效;也就是说这两种方式无法混合使用
6、调用ansible的三种模式:
hoc:命令行
playbooks:剧本|脚本
roles:角色
三、Ansible使用基本格式
1、使用格式
[root@ren5 ~]# ansible
Usage: ansible <host-pattern> [options]
2、参数:
-m:(--module-name=MODULE_NAME)指定模块名称
-a:(--args=MODULE_ARGS)指定模块的具体参数
-s:以sudo的方式运行操作
-i:(--inventory=INVENTORY)指定被管理节点的主机列表
-f:(--forks=FORKS)一批连接几个主机进行操作(默认是5个主机,最高255)控制并发数
线程是最小的调度单位,进程是最小的管理单元
ansible-doc -l #查看所支持的模块
ansible-doc -s MODEL_NAME #模块的具体用法和参数
ansible all --list-hosts #查看所有主机
四、ansible管理节点的三种方法
1、指定主机组名
[root@ren5 ~]# ansible test_ren1 -a "ip a" #默认调用command模块
2、指定一个特定IP
[root@ren5 ~]# ansible 192.168.11.4 -a "ls"
3、使用all
[root@ren5 ~]# ansible all -a "date"
五、配置文件
ansible配置文件:(/etc/ansible/ansible.cfg)
14#inventory = /etc/ansible/hosts 主机管理资产清单
15#library = /usr/share/my_modules/ ansible操作的动作,无论是本地或者远程,都使用一小段代码来执行,这小段代码称之为模块,这个library就是用来存放这些模块的路径
16#module_utils = /usr/share/my_module_utils/
17#remote_tmp = ~/.ansible/tmp
18#local_tmp = ~/.ansible/tmp
20#forks = 5 ansible默认操作主机的并发数
21#poll_interval = 15
22#sudo_user = root 这是默认的执行命令的用户,也可以在playbook中重新设置这个参数
23#ask_sudo_pass = True 用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no
24#ask_pass = True Ansible 剧本playbook 是否会自动默认弹出弹出密码.默认为no
25#transport = smart
26#remote_port = 22 这个指定连接被管理节点的端口,默认是22,除非设置了特殊的ssh端口
27#module_lang = C 默认模块和系统之间通信的计算机语言,默认为’C’语言
28#module_set_locale = False
61#host_key_checking = False 这是设置是否检查ssh秘钥,可以设置为False和True
103#timeout = 10 ssh连接超时时间
111#log_path = /var/log/ansible.log ansible默认是不记录日志的,如果想把ansible系统输出的日志存放到文件中可以开启这个选项
136#private_key_file = /path/to/file 使用ssh公钥私钥登录系统的时候,使用的秘钥路径
.......
还有更多的配置项,大家可以参考官方文档,如下: http://docs.ansible.com/ansible/latest/intro_configuration.html#private-key-file
六、常用模块
1、ping模块:指定ansible server跟client的连通性,测试成功会返回“pong”
[root@ren5 ~]# ansible all -m ping
2、command模块:命令模块,默认模块,用于在远程执行命令(不支持正则和管道符)
[root@ren5 ~]# ansible test_ren1 -m command -a "date '+%F %T'"
3、cron模块:管理定时任务
state:(prsent:安装;absent:移除)
day、env、hour、job、minute、month、name、state、user、weekday
[root@ren5 ~]# ansible test_ren1 -m cron -a "minute=*/5 job='echo HELLO' state=present name=cron_test1"
[root@ren5 ~]# ansible test_ren1 -a "crontab -l"
[root@ren5 ~]# ansible test_ren1 -a "crontab -r"
4、user模块:管理用户账户
name=:指明创建的用户的名字
remove=USERNAME(state=absent)
state=present #创建用户 shell=:指定用户shell类型
#ansible testhosts -m user -a 'name=user1 uid=250 group=group250'
5、group模块:添加或者删除用户组
#ansible testhosts -m group -a 'name=group250 gid=250'
6、copy模块:复制本地文件到远程主机
src=:定义本地源文件路径
dest=:定义远程目标文件路径
[root@ren5 ~]# ansible test_ren1 -m copy -a "src=/root/a.txt dest=/root/a.txt"
content=:取代src,表示直接用此处指定的信息生成为目标的内容
#ansible all -m copy -a 'content=nihao dest=/root/a.txt'
7、service模块:管理程序服务,指定运行状态
[root@ren5 ~]# ansible all -m service -a "name=httpd state=restarted"
[root@ren5 ~]# ansible all -m shell -a "ss -tnl |grep 80"
enabled=:是否开机自动启动,取值为true或者false
name=:服务名称
state=:状态,取值有started,stopped,restarted
8、shell模块:和command模块类似,在远程主机上运行命令,支持变量等符号,尤其是在用到管道符等功能的复杂命令
[root@ren5 ~]# ansible all -m shell -a "ls /tmp |wc -l"
9、script模块:将本地脚本复制到远程主机并运行(无需加多余参数,只需要在-a后面加上本地脚本路径即可)
ansible testhosts -m script -a '/root/a.sh'
10、yum模块:安装程序包
[root@ren5 ~]# ansible all -m yum -a "name=httpd state=present"
[root@ren5 ~]# ansible all -m yum -a "list=httpd"
name=:指定要安装的程序包,可以带上版本号
state=:present,latest,installed表示安装,absent,removed表示卸载
list=:查看安装的程序包
11、setup模块:收集远程主机的facts
每个被管理的节点在接受并运行管理命令之前,会将自己主机相关信息,如操作系统版本,ip地址等报告给远程ansible主机
[root@ren5 ~]# ansible all -m setup
12、file模块:设置文件属性
[root@ren5 ~]# ansible all -m file -a "state=touch path=/root/test.txt"
Linux中级之ansible概念及hoc命令行调用模式的更多相关文章
- 提高Linux运维效率的30个命令行常用快捷键
提高Linux运维效率的30个命令行常用快捷键 表4-1 30个常用快捷键 快捷键 功能说明 最有用快捷键 tab 命令或路径等的补全键,Linux最有用快捷键* 移动光标快捷键 Ctrl+a 光标 ...
- linux下使用script和scriptreplay对命令行操作进行录像
转自:linux下用script和scriptreplay对命令行操作录像 在Linux中可以使用script命令来记录命令行的操作过程,并使用scriptreplay命令对命令操作进行回放,操作步骤 ...
- Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式
昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...
- PHP的CLI命令行运行模式浅析
在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务.比如对数据进行处理统计等.当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的 ...
- Symfony2 通过命令行调用控制器
由于系统需求,需要写一个无限循环的控制器,那么既然有一个无限循环的控制器,那么就需要有一个开关,不可能直接通过route来开启吧.当然要使用高级一点的方法啊. 那就是使用控制台通过命令行(comman ...
- Maven-11: 从命令行调用插件
mvn -h显示mvn命令帮助: usage: mvn [options] [<goal(s)>] [<phase(s)>] Options: -am,--also-make ...
- Jmeter在非GUI(命令行)模式下生成测试报告
根据各大招聘网站上的需求来看,熟悉Jmeter做性能测试已经几乎成为必要条件了. 那么今天在这个给大家安利一波,怎么使用Jmeter在非GUI(命令行)模式下生成测试报告呢?? 条件准备: 1.Jme ...
- 命令行调用dubbo远程服务
命令行调用dubbo远程服务 telnet远程连接到dubbo telnet 127.0.0.1 20880 查看提供服务的接口 dubbo>ls com.test.service.TestIn ...
- Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
随机推荐
- 透视HTTP协议,带你拨开纷繁复杂的表象
一个HTTP,打趴80%面试者! HTTP是一个在计算机世界里专门在两点之间传输文字.图片.音频.视频等超文本数据的约定和规范.如果你不懂HTTP协议,那就相当于是个只有半桶水的程序员. 在这个专栏中 ...
- wap视频广告遇到的问题
最近在做一个wap端的视频广告,耗了很多心力在上面,仍旧做不好.没想到wap浏览器对video标签这么不友好.广告需要在原编辑视频播完后插入并自动播放. ios浏览器点击播放按钮后喜欢自动全屏播放,希 ...
- 生产环境中的redis是怎么部署的?
redis cluster,10台机器,5台机器部署了redis主实例,另外5台机器部署了redis的从实例,每个主实例挂了一个从实例,5个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每 ...
- 0-0 Linux安装在VMvare虚拟机上
一.安装VMware虚拟机: 双击, 上面一步会提示你输入密钥,你只要双击这个,复制里面的一串码粘贴进去就可以. 点击完成,至此VM虚拟机安装完成. 二.在VMvare虚拟机上安装centos. 1. ...
- sublime text 快捷键的使用大全
多行选择后按下ctrl+/ 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中 ...
- hdu4810
题意: 给你n个数,让你输出n个数,没一次输出的是在这n个数里面取i个数异或的和(所有情况<C n中取i>). 思路: 首先把所有的数都拆成二进制,然后把他们在某一位上 ...
- ubuntu 14.04.5 编译Android 4.4.4 r1源码(最新)
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54426189 吐槽:ubuntu系统真是让人又爱又恨,也有可能是VMware Wo ...
- hdu4122 制作月饼完成订单的最小花费
题意: 有一个加工厂加工月饼的,这个工厂一共开业m小时,2000年1月1日0点是开业的第一个小时,每个小时加工月饼的价钱也不一样,然后每个月饼的保质期都是t天,因为要放在冰箱里保存,所以在 ...
- SQLServer的XP_CmdShell提权
当我们拿到了某个网站SQLServer数据库的SA权限用户密码的话,我们就可以使用XP_CmdShell提权了. 开启xp_cmdshell exec sp_configure 'show advan ...
- Windows核心编程 第九章 线程与内核对象的同步(上)
第9章 线程与内核对象的同步 上一章介绍了如何使用允许线程保留在用户方式中的机制来实现线程同步的方法.用户方式同步的优点是它的同步速度非常快.如果强调线程的运行速度,那么首先应该确定用户方式的线程同步 ...