当前位置: 首页 > 编程日记 > 正文

自动化运维工具----ansible

自动化运维工具----ansible

ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。

主要模块以及功能:

1 command

2 user

3 group

4 cron

5 copy

6 file

7 ping

8 yum

9 service

10 shell

11 script

12 setup

13 playbooks

14 忽略错误

15 handler

ansible一般使用普通用户操作,如需使用root权限,可以设置sudo

主要有以下特点

ansible:   yum -y install ansible 模块化:调用特定的模块,完成特定的任务基于python语言实现,由paramiko,PyYAMAL和Jinja2三个关键模块:部署简单,agentless支持主从模式支持自定义模块支持Playbook
幂等性:  同一个配置文件中执行的操作允许多少次结果都是一样

配置文件有

    配置文件:/etc/ansible/ansible.cfg/etc/ansible/hosts  主机清单

在使用前需要发布ssh密钥来实现自动部署

ssh-keygen -t rsa -P ''   -P密码为空
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.31.5
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.31.17
执行命令测试:ssh 192.168.31.5 'ifconfig'
问题:
ansible 192.168.31.5 -m command -a 'ifconfig'[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'[WARNING]: Could not match supplied host pattern, ignoring: 192.168.31.5
解决:需要将主机写入/etc/ansible/hosts文件里面

查看文档说明

ansible-doc -s  command|user..... 查看文档说明

模块说明:

1 command模块

ansible all -m command -a 'ifconfig'ansible websrvs  -m command -a 'wget -O /tm/文件名 http://路径/文件'  给websrvs组内的主机下载文件

2 user模块   -a 'name=  state={present|absent}  system=.....'

ansible wesrvs -m user -a "name=hacluster state=present" 创建一个非系统用户
ansible wesrvs -m user -a "name=hacluster state=absent"   删除这个用户

3 group模块 -a 'name= gid= state=  system='

cron模块,用来生成计划任务 -a  'name= minute= hour= day= month= weekday= job= user=  state='

[root@centos7 ansible]# ansible all -m cron -a 'name="sync time form ntpserver" minute="*/10" job="/sbin/ntpdate us.pool.ntp.org &> /dev/null"'
192.168.31.5 | SUCCESS => {"changed": true, "envs": [], "jobs": ["sync time form ntpserver"]
}
192.168.31.17 | SUCCESS => {"changed": true, "envs": [], "jobs": ["sync time form ntpserver"]
}
[root@centos7 ansible]# crontab -l
#Ansible: sync time form ntpserver
*/10 * * * * /sbin/ntpdate us.pool.ntp.org &> /dev/null删除计划任务:ansible all -m cron -a 'name="sync time form ntpserver" state=absent' 指明name加上absent

5  copy模块; 文件复制  -a 'dest= src= mode=  owner= group='

ansible wesrvs -m copy -a 'src=/etc/fstab dest=/tmp/fstab.tmp mode=600' 复制文件,设置文件权限

6 file模块 :设置文件的属性

ansible all -m file -a 'path=/tmp/testdir state=directory'   创建一个目录
ansible all -m file -a 'path=/tmp/fstab.symlink state=link src=/tmp/fstab.tmp' 创建一个链接文件

7 ping模块 就时单独的ping,没有参数

ansible all -m ping

yum:执行yum的安装命令

ansible all  -m yum -a 'name=nginx state=latest' 安装包
ansible all  -m yum -a 'name=nginx state=absent' 卸载

service模块:设置和服务相关的配置 -a  'name= state={started|stopped|restarted} enabled='

ansible wesrvs -m service -a 'name=nginx state=started enabled=yes' 设置nginx启动,并开机自启动

10 shell  :执行命令

ansible all -m shell -a 'echo 123456 | passwd --stdin limi' 给用户创建密码,此用户必须先存在
使用 command模块会报错,需要放入一个子shell中所以使用shell模块

11 script模块:执行脚本

[root@centos7 ansible]# cat /tmp/test.sh 
#!/bin/sh
#echo "$(hostname) ansible is good." >/tmp/ansible.txt[root@centos7 ansible]# ll /tmp/test.sh   不给执行权限,远程主机执行 了
-rw-r--r-- 1 root root 67 Sep 18 12:22 /tmp/test.sh
[root@centos7 ansible]# ansible all -m script -a '/tmp/test.sh'

12  setup 获取远程主机的facts,变量,属于查看类别

ansible all -m setup

13 playbooks,综合以上所有的模块

核心元素有:
tasks:任务 variables:变量 templates:模板 handlers:处理器 roles:角色
其中一个特点:中途发送错误,所有已经执行的任务都将回滚,需要更正之后重新执行一次

下面是一个文件例子:hosts,tasks这些冒号之前的文字变成蓝色的就是写正确了,否则就要检查

- hosts: allremote_user: roottasks:- name: add a group    // 加上 - 就是一个单独的模块以及处理命令:group: gid=1008 name=testgroup system=no- name: excute a commandcommand: /bin/date运行结果
[root@centos7 ~]# ansible-playbook test.yamlPLAY [all] ***********************************************************************************TASK [Gathering Facts] ***********************************************************************
ok: [192.168.31.17]
ok: [192.168.31.5]TASK [add a group] ***************************************************************************
changed: [192.168.31.5]
changed: [192.168.31.17]TASK [excute a command] **********************************************************************
changed: [192.168.31.17]
changed: [192.168.31.5]PLAY RECAP ***********************************************************************************
192.168.31.17              : ok=3    changed=2    unreachable=0    failed=0   
192.168.31.5               : ok=3    changed=2    unreachable=0    failed=0   

忽略错误的情况
比如执行mkdir 命令,再建用户的话将报错

方法一 /bin/true

tasks:- name:  run this command and ignore the resultcommand:  /usr/bin/somecommand || /bin/true

方法二: ignore_errors

tasks:- name:  run this command and ignore the resultcommand:  /usr/bin/somecommand ignore_errors: True

handler: 用于当关注的资源发生变化时采取一定的操作

   - hosts: allremote_user: roottasks:- name:  ensuse apache laster versionyum:  state=latest name=httpd- name:  apache configure filecopy: src=/root/httpd.conf  dest=/etc/httpd/conf/httpd.conf  force=yesnotify:  #激活handlers中的name相同名称的服务- restart apachehandlers:- name:  restart apacheservice: name=apache state=restarted

posted on 2018-09-18 15:57 dawn-liu 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/mmyy-blog/p/9669435.html

相关文章:

【内核】嵌入式linux内核的五个子系统

Perface Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示。 图1 Li…

git用户文档1 — git基础

1. git基础 1.1 分布式 我们把远端仓库(云端的仓库)称为repo,repo必须有一个master分支,就是主分支。 repo除了有一个master分支,还有很多其他的分支,若干个分支之间存储的数据一版都是不一样的本地可以git clone下来repo的mast…

MySQL5.7的date类型_Mysql5.7 虚拟列数据类型为DATE时,如何存入数据?

表结构:v_date为虚拟列CREATE TABLE test ( json TEXT NULL, date DATETIME NULL DEFAULT NULL, v_date DATE AS (json_extract(json,$.date)) VIRTUAL)COMMENT测试表\r\nCOLLATEutf8mb4_general_ciENGINEInnoDB;插入:INSERT INTO test (json) …

找出字符串中所有数字

刚才网友在SKYPE问Insus.NET一个问题,在MS SQL中,怎样找出一个字符串所有数字。 Insus.NET使用较简单与平常的方法,就是使用循环的方法,循环字符串中每一个字符,并插入至一个表变量中。然后再SELECT这个表变量&#xf…

Safair 浏览器cllick事件不生效或者需要双击才生效

针对Safair 浏览器cllick事件不生效或者需要双击才生效的解决方案。 方法一:给元素加上cursor: pointer样式。(不生效) 方法二:ios事件机制不一样,将click事件改为mousedown或其他事件即可解决。(需要双击&…

springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁

本文介绍SpringBoot基于数据库实现简单的分布式锁。1.简介分布式锁的方式有很多种,通常方案有:基于mysql数据库基于redis基于ZooKeeper网上的实现方式有很多,本文主要介绍的是如果使用mysql实现简单的分布式锁,加锁流程如下图&…

简单shell

执行脚本结果重定向 sh hah.sh hello 1>>/home/qiso/job.log 2>&1 上面这句话的意思是 首先通过sh执行脚本hah.sh,其中执行这个脚本的时候,需要传入参数,参数是hello, 1表示的是标准输出,以上脚本执行…

个人随笔、收藏——(包括技术、设计思想等)

1、开源自动化工具 Sahi、Selenium、AutoIt Sahi,是一个用于Web应用程序的自动测试工具。Sahi运行为一个代理服务器,必须把浏览器的代理设置为Sahi服务器。 然后Sahi注入javascript来访问Web页面中的元素。Sahi支持Http与Https并且独立于Web站点或Web应用…

安装QCreator2.5+Qt4.8.2+MinGW_gcc_4.4

QCreator最近升级了。正好想试试新功能,所以把原来安装的QCreator2.3.1Qt4.7.1卸载了。安装新的版本。具体步骤如下: 1# 下载QCreator2.5version。 2# 下载Qt4.8.2version。 3# 根据Qt官网给的链接,下载MinGW-gcc440_1(因为从QCre…

第一次结对作业

211606368林书浩 211606352陈彬 一、预估与实际 PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划• Estimate• 估计这个任务需要多少时间3540Development开发• Analysis• 需求分析 (包括学习…

mysql如何根据业务分表设计_mysql分表分库的应用场景和设计方式

很多朋友在论坛和留言区域问mysql在什么情况下才需要进行分库分表,以及采用何种设计方式才是最优的选择,根据这些问题,小编为大家整理了关于MySQL分库分表的应用场景和最优的设计方式举例。一. 分表场景:对于大型的互联网应用来说…

简单protobuf

protobuf的数据类型,有最简单的那种数据类型,就是一个文件中,定义了一个message 可以在一个文件中定义两个message,两个message之间是没有关联的可以在一个文件中,定义两个message,其中一个是简单的&#x…

迭代器、生成器

迭代器 lst range(10) #生成一个枚举列表 从0-9 itr iter(lst) #生成一个迭代器 itr.next() #访问迭代器方法 遍历迭代器 try:while True:val itr.next()print val except StopIteration:pass 注意: 1、如果对list dict tuple 用for遍历,则for内部自动…

Linq 无法删除尚未附加的实体的问题

Linq删除个集合数据, 刚开始用的注释掉的那行, 会提示"无法删除尚未附加的实体"错误, 使用Attach方法依然不行. 想想以前用过DeleteAllOnSubmit没啥问题哈, 估计是_db对象的引用问题, 换了种写法就OK了. //删掉所有工作组部门关联 //wgdrLst Wor…

从云端到边缘 AI推动FPGA应用拓展

近日,全球最大的FPGA厂商赛灵思宣布收购深鉴科技的消息,引发人工智能芯片行业热议,这也是首起中国AI芯片公司被收购的案例。值得注意的是,收购深鉴科技的赛灵思在2018年下半年重点发展方面是汽车自动驾驶。 FPGA市场的竞争正在发生…

mysql中的%_mysql入门

MySQL数据库1 数据库概念(了解)1.1 什么是数据库数据库就是用来存储和管理数据的仓库!数据库存储数据的优先:可存储大量数据;方便检索;保持数据的一致性、完整性;安全,可共享;通过组合分析&am…

关于timewait状态

四次挥手 主动关闭连接的一方,调用close,协议层发送FIN包,在TCP报头的FIN字段设置为1,意思是我要和你断开链接,主动关闭连接的一方进入到了FIN_WATI_1状态 被动关闭的一方收到了FIN包之后,协议层回复ACK包…

DWZ基于ajax重复请求的修复

在同一个通用上传插件,每次都需要客户端去请求服务器,返回的html页面,如果请求的间隔很短的话,ajax会认为是重复作废的请求,这个时候需要修改一下源码来达到在短时间内重复请求也能得到响应找到js/dwz.ajax.js修改源码为function ajaxTodo(url, callback){t Date.parse(new D…

TLS/HTTPS 证书生成与验证

https://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路,现在总结一下做个备忘 科普:TLS、SSL、HTTPS以及证书 不少人可能听过其中的超过3个名词&am…

高并发系统搭建:web负载均衡

高并发系统搭建:web负载均衡 所谓的负载均衡就是让多个请求尽量均衡的分配到不同的机器上面去 1. HTTP负载均衡 当用户的请求发来之后,web服务器通过修改HTTP响应报头中的Location标记,返回一个新的url,然后浏览器继续请求这个…

centos 7.0 安装mysql_CentOS 7.0yum安装MySQL

1.下载mysql的repo源$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm2.安装mysql-community-release-el7-5.noarch.rpm包$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm安装这个包后,会获得两个mysql的yum repo源:/…

UVa 11174 - Stand in a Line

http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem2115 数学的特点在于不断的推导,此题还需要用到 欧拉定理和逆元的相关性质,推荐博客(有部分小错误):http…

计算背板带宽方法

背板带宽:端口数*端口速率*2包转发率:接口带宽(bps)/8bit/(64812)千兆包转发率:1.488Mpps百兆:0.1488Mpps万兆:14.88Mpps例如2950G-48背板2*1000*248*100*213600Mbps13.6Gbps相当于13.6/26.8个千…

Windows下安装PHP开发环境

一、Apache 因为Apache官网只提供源代码,如果要使用必须得自己编译,这里我选择第三方安装包Apache Lounge。 进入Apachelounge官方下载地址:http://www.apachelounge.com/download/首先下载并安装vc redist,这是Apache运行必需的一…

高并发简单设计

系统内存不足,主要是每次来一个请求的时候,就要创建倒排的哈希,这个时候如果高并发的情况下,就会出现问题,每次一个倒排索引占据内存,内存只有2G肯定是不够使用的 可以根据日志分析的结果,看看…

mysql 8.0数据备份恢复_第7章 备份和恢复

## 目录- 备份和恢复类型- 数据库备份方法- 例备份和恢复策略- 使用mysqldump进行备份- 使用二进制日志进行- 点时间(增量)恢复- MyISAM表维护和崩溃恢复备份数据库非常重要,这样您就可以恢复数据,并在发生问题时再次启动并运行,例如系统崩溃…

CSS 实例之打开大门

本个实例主要的效果如下图所示 本案例主要运用到了3D旋转和定位技术。具体步骤如下&#xff1a; 1、首先在页面主体加三个很简单的div标签&#xff1a; <div class"door"><div class"door-l"></div><div class"door-r">…

为 Asp.net 网站新增发送手机短信功能

本文旨在帮助那些为网站发送手机短信正在寻求解决方案还未最终找到解决方案的朋友提供参考。 适合人群 须满足一下条件之一&#xff0c;如果以下3个条件您都不满足&#xff0c;为节约您宝贵的时间&#xff0c;请终止阅读本篇文章。 条件如下&#xff1a; 1.一条短信内容进行短信…

搜索引擎Killed原因排查

问题描述 腾讯云单核2G内存&#xff0c;运行程序的时候&#xff0c;程序有时会挂掉了&#xff0c;设置ulimit -c unlimited之后&#xff0c;想要core文件&#xff0c;结果程序运行的时候&#xff0c;直接提示killed&#xff0c;没有出现core文件 调研查询 killed的原因多是因…

mysql 8.0配置主从同步_MySQL8.0.19开启GTID主从同步CentOS8

前言本次搭建目标为1主2从MySQL主从同步结构。采用CentOS8作为操作系统&#xff0c;IP为[10.0.0.211,10.0.0.212,10.0.0.213]。MySQL版本为8.0.19&#xff0c;端口均采用3306。本文仅讲解主从配置&#xff0c;因此安装MySQL的方式请参考安装文档。GTID模式介绍一、GTID Replica…