ansible入门及组件介绍
Ansible简介
Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,ansible提供一个框架,通过模块实现批量部署。
Ansible是一种配置管理工具
Ansible不需要安装客户端软件
Ansible的功能实现基于SSH远程连接服务

安装
安装方法有多种,可以下载源码后编译安装,可以从git上获取资源安装,可以直接yum安装。也可以pip安装。
1、使用yum安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install ansible -y
查看ansible版本
ansible --version
2、源码安装
源码安装需要python2.6以上版本,其依赖模块paramiko、PyYAML、Jinja2、httplib2、simplejson、pycrypto模块,以上模块可以通过pip或easy_install 进行安装
3、pip安装
pip是专门用来管理Python模块的工具,Ansible会将每次正式发布都更新到pip仓库中。所以通过pip安装或更新Ansible,会比较稳妥的拿到最新稳定版。
目录说明
tree /etc/ansible/
/etc/ansible/
├── ansible.cfg # ansible的配置文件
├── hosts # ansible的主仓库 用来存储需要管理的远程主机的相关信息
└── roles #角色,一套文件夹,里面定义了例如变量,具体任务task。Role里面定义的内容可以实现某些特殊功能,而你在使用不通的脚本过程中可以导入Role来实现某一个功能。而不用重复写
常用命令
帮助文档
ansible-doc可以列出相关的帮助
ansible-doc -l 列出ansible的模块,通常结合grep来筛选。
ansible-doc -s XXX 选项可以获取指定模块的使用帮助。
利用ansible远程批量执行命令
语法:
ansible ceshi -m command -a 'uptime'
ansible 主机组 -m ansible内置功能模块名 -a 命令
ad-hoc常用模块

1、copy模块
从本地copy文件分发到目录主机路径
参数说明:
src= 源文件路径
dest= 目标路径
注意src= 路径后面带/ 表示带里面的所有内容复制到目标目录下,不带/是目录递归复制过去
content= 自行填充的文件内容
owner 属主
group 属组
mode权限
ansible all -m copy -a "src=/ceshi/123.sh dest=/tmp/fstab.ansible mode=600"
2、fetch模块
从远程主机拉取文件到本地
fetch使用很简单,src和dest,dest只要指定一个接收目录,默认会在后面加上远程主机及src的路径
ansible all -m fetch -a "src=/tmp/hi.txt dest=/ceshi"

3、command模块
在远程主机上执行命令,属于裸执行,非键值对显示;不进行shell解析;
默认模块
ansible all -m command -a "ifconfig"
4、shell模块
由于commnad只能执行裸命令(即系统环境中有支持的命令),至于管道之类的功能不支持,
shell模块可以做到
ansible all -m shell -a "ifconfig|grep lo"
5、file模块
设置文件属性(创建文件)
常用参数:
path目标路径
state directory为目录,link为软件链接
group 目录属组
owner 属主
recurse:递归设置文件的属性,只对目录有效
其他参数通过ansible-doc -s file 获取
ansible all -m file -a "path=/tmp/hello state=directory" #创建文件夹
ansible all -m file -a "src=/tmp/hi.txt path=/var/tmp/hi.link state=link" #创建软链接
6、cron模块
通过cron模块对目标主机生成计划任务
常用参数:
除了分(minute)时(hour)日(day)月(month)周(week)外
name: 本次计划任务的名称
state: present 生成(默认) |absent 删除 (基于name)
ansible all -m cron -a "minute=*/1 job='/usr/sbin/update time.windows.com &>/dev/null' name=update_time"
#对各主机添加每隔1分钟从time.windows.com同步时间
#此时登陆任意节点查看crontab任务
[root@localhost tmp]# crontab -l
#Ansible: update_time
*/1 * * * * /usr/sbin/update time.windows.com &>/dev/null ansible all -m cron -a "name=update_time state=absent" #删除计划任务
#此时登陆查看,计划任务已经被删除
7、yum模块
故名思义就是yum安装软件包的模块;
常用参数说明:
enablerepo,disablerepo表示启用与禁用某repo库
name 安装包名
state (present' orinstalled', latest')表示安装, (absent' or `removed') 表示删除
ansible all -m yum -a "name=epel-release state=installed" #通过安装epel扩展源并安装nginx
ansible all -m yum -a "name=nginx state=installed"
8、service模块
服务管理模块
常用参数:
name:服务名
state:服务状态
enabled: 是否开机启动 true|false
runlevel: 启动级别 (systemed方式忽略)
ansible all -m service -a "name=nginx state=started enabled=true"
9、script模块
把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行;
#创建一个脚本文件
[root@localhost ceshi]# more appe.sh
#!/bin/bash
echo "ansible script test!" > /tmp/ansible.txt
#执行
ansible all -m script -a "/ceshi/appe.sh"
#此时目标端查看根据脚本内容已经产生了相应的文件
参数配置
1、环境配置
Ansible配置以ini格式存储配置数据,在Ansible中几乎所有配置都可以通过Ansible的Playbook或环境变量来重新赋值。
在运行Ansible命令时,命令将会按照以下顺序查找配置文件。
ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量指向的配置文件。./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件。~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件。/etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件。
2、ansible.cfg配置参数
Ansible有很多配置参数,以下是几个默认的配置参数:
inventory = /etc/ansible/hosts
library = /usr/share/my_modules/
forks = 5
sudo_user = root
remote_port = 22
host_key_checking = False
timeout = 20
log_path = /var/log/ansible.log
inventory:该参数表示inventory文件的位置,资源清单(inventory)就是Ansible需要连接管理的一些主机列表。library:Ansible的所有操作都使用模块来执行实现,这个library参数就是指向存放Ansible模块的目录。forks:设置默认情况下Ansible最多能有多少个进程同时工作,默认5个进程并行处理。具体需要设置多少个,可以根据控制端性能和被管理节点的数量来确定。sudo_user:设置默认执行命令的用户,也可以在playbook中重新设置这个参数。remote_port:指定连接被管理节点的管理端口,默认是22,除非设置了特殊的SSH端口,否则不需要修改此参数。host_key_checking:设置是否检查SSH主机的密钥。可以设置为True或False。即ssh的主机再次验证。timeout:设置SSH连接的超时间隔,单位是秒。log_path:Ansible默认不记录日志,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path。需要注意,模块将会调用被管节点的(r)syslog来记录,执行Ansible的用户需要有写入日志的权限。
3、ssh配置互信
将ansible server的ssh公钥分发到各被管节点上。
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
ssh-copy-id root@10.17.12.60
ssh-copy-id cloud@10.17.12.100
此处我测试了root用户以及一个普通用户
ansible组件
Inventory
默认的Ansible的Inventory是一个静态的INI格式的文件/etc/ansible/hosts
1.1.1.1 ansible_ssh_user=root ansible_ssh_pass='123456' #定义了一个1.1.1.1的主机,然后使用内置变量定义了SSH登陆用户以及密码
[docker] #定义一个组叫docker
1.1.1.2[1:3] #定义docker组下面3台主机1.1.1.21-1.1.1.23
[docker:vars] #对docker组使用inventory内置变量定义了SSH登录密码
ansible_ssh_pass='123456' #对docker组使用inventory内置变量定义了SSH登录密码
[ansible:children] #定义了一个组叫ansible,这个组下面包含docker组
docker #定义了一个组叫ansible,这个组下面包含docker组
ansible支持多个inventory文件,这样更加方便我们管理不同业务或者不同环境中的机器。
1、首先需要修改ansible.cfg中hosts文件的定义,使之不再指向某个文件夹,而是指向某个目录

2、在inventory文件夹下新建两个文件测试使用

3、使用list-hosts参数验证

ansible入门及组件介绍的更多相关文章
- ansible入门四(Ansible playbook基础组件介绍)
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- Ansible playbook基础组件介绍
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...
- NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(转载)
原文地址:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_FluentValidation_1.html 阅读目录 1.基本介绍 ...
- Netty快速入门(09)channel组件介绍
书接上回,继续介绍组件. ChannelHandler组件介绍 ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler. ...
- JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍
JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...
- Ansible自动化运维笔记2(Ansible的组件介绍)
1.Ansible Inventory (1)静态主机文件 默认的ansible invetory是/etc/hosts文件,可以通过ANSIBLE_HOSTS环境变量或者通过运行命令的时候加上-i ...
- ansible入门
前言 最近看了一下ansible,挺火的一个配置管理工具,对比老大哥puppet,使用起来要简单一些,并且可以批量执行命令,对比同是python语言编写的saltstack,不需要安装客户端(基于pa ...
- vue框架入门和ES6介绍
vue框架入门和ES6介绍 vue-mvvm模式,vue是一种轻量级的前端框架,主要为模板渲染,数据同步,组件化,模块化,路由等. https://cn.vuejs.org/ 源码:https://g ...
随机推荐
- 实现一个book类
设计实现一个book类 具体要求 定义义成Book.java,Book 包含书名,作者,出版社和出版日期,这些数据都要定义getter和setter. 定义至少三个构造方法,接收并初始化这些数据. 覆 ...
- python小白——进阶之路——day4天-———流程控制while if循环
# ### 代码块: 以冒号作为开始,用缩进来划分作用域,这个整体叫做代码块 if 5 == 5: print(1) print(2) # 注意点: 要么全部使用4个空格,要么全部使用1个缩进 ,这样 ...
- JS&Java实现常见算法面试题
Github上的算法repo地址:https://github.com/qcer/Algo-Practice (如果你觉得有帮助,可以给颗星星收藏之~~~) 一.Java实现部分 参见随笔分类的算法部 ...
- Linux内存管理 (17)KSM
专题:Linux内存管理专题 关键词:KSM.匿名页面.COW.madvise .MERGEABLE.UNMERGEABLE. KSM是Kernel Samepage Merging的意思,用于合并内 ...
- 【重磅】FineUIPro基础版免费,是时候和ExtJS说再见了!
三石的新年礼物 9 年了,FineUI(开源版)终于迎来了她的继任者 - FineUIPro(基础版),并且完全免费! FineUIPro(基础版)作为三石奉献给社区的一个礼物,绝对让你心动: 拥 ...
- 更改电脑名称后, Cnario无法播放画面和声音, 开机后停留在桌面, Cnario Player软件界面的停止按钮为蓝色可选状态
症状描述 Cnario Player正常工作期间, 更改了电脑的Windows系统计算机名称(不是登录Windows的用户名), 重启后, 新计算机名生效. 此时Cnario自动启动, 但没有进入播放 ...
- BBS 502 BadGateway 原因分析
说明: LNMP架构. crontab里有每隔20分钟重启php的任务:然后我用python写了个每1分钟检测php-cgi进程是否存在的脚本,如果不存在则调用重启php的脚本,并邮件通知管理员.cr ...
- MT【316】常数变易法
已知数列$\{a_n\}$满足$a_1=0,a_{n+1}=\dfrac{n+2}{n}a_n+1$,求$a_n$ 解答:$\dfrac{a_{n+1}}{n(n+1)}=\dfrac{a_n}{n( ...
- LOJ #2135. 「ZJOI2015」幻想乡战略游戏(点分树)
题意 给你一颗 \(n\) 个点的树,每个点的度数不超过 \(20\) ,有 \(q\) 次修改点权的操作. 需要动态维护带权重心,也就是找到一个点 \(v\) 使得 \(\displaystyle ...
- Zookeeper分布式集群原理与功能
Zookeeper功能简介 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现. 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...