Ansible入门及组件介绍

Stella981
• 阅读 765

Ansible简介

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

Ansible入门及组件介绍

安装

安装方法有多种,可以下载源码后编译安装,可以从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常用模块

Ansible入门及组件介绍

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"

Ansible入门及组件介绍

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文件的定义,使之不再指向某个文件夹,而是指向某个目录

Ansible入门及组件介绍

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

Ansible入门及组件介绍

3、使用list-hosts参数验证

Ansible入门及组件介绍

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
胖大海 胖大海
1年前
ansible自动化运维
Ansible是一个开源的基于openssh的自动化配置管理工具。可以用它来配置系统,部署软件和编排更高级的IT任务,比如持续部署或零停机更新。Ansible的主要目标是简单和易用,通过Ansible可以批量管理大型运维环境。!(https:/
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
CentOS系统:自动化运维工具Ansible的安装与配置
一、Ansible工具简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。二、Ansible的安装1、因为是对Ansible的简单测试,所以
Stella981 Stella981
2年前
Jenkins+Ansible+Gitlab自动化部署三剑客
JenkinsAnsibleGitlab自动化部署三剑客小中大showerlee2016031113:00Ansible(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Ansible快速入门教程
Ansible快速入门介绍Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。Ansible的特点1、ansible不需要单独安装客户端,也不需要启动任何服务2、ansible是Python(https://www.osc
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这