ansible运维工具(一)
运维工具介绍
OS Provisioning: PXE, Cobbler(repository, distritution,profile)
PXE: dhcp, tftp, (http, ftp)
dnsmasq: dhcp, dns
OS Config:
Puppet, saltstack, func
Deployment:
fabric
运维工具分类:
agent: puppet,func
agentless: ansible,fabric
ssh service
ansible 的核心组件:
ansible core
host inventory
core modules
custom modules
playbook (yaml) 允许我们将多个任务写在一个文件中,这个文件就叫做playbook,是yaml格式,使用jinjia2定义模版语言)
connect plugin (使用的是python中的pramiko插件,log插件)
ansible的特性:
基于python语言实现,由Pramiko 来实现创建ssh连接,PyYAML和jinjia2三个类模块;
部署简单, agentless
默认使用SSH协议;
(1)基于密钥认证;
(2)在Inventory中定义指定账户和密码。
主从模式;
master: ansible, ssh client 主节点指ansible节点,同时是ssh的客户端节点
slave: ansible的客户端主机 同时是ssh server节点。
支持自定义模块:支持各种编程语言
支持Playbook
基于“模块”管理完成各种 “任务”
ansible的安装:
在epel源有提供,只是在系统中没有自带
使用yum info ansible 查看软件的一个简介
初步使用ansible:
1. 在Inventory文件中定义要管理的连接信息
2. 使用ansible的命令行客户端,通过读取Inventory文件定位每一个可以被管理的主机,从而指挥他们来工作。
3. 远程主机管理之前最好能做基于ssh密钥认证方式,这样就不需要每一次输入密码。也不用在Inventory文件中写明文密码。
命令使用格式:
ansible -m "model_name" -h 'hostname' -a "array"
rpm -ql ansible 查看安装了哪些文件
配置文件:有两个文件需要我们留意的
/etc/ansible/ansible.conf
假如有100个主机,一次操作这么多对ansible主机会有很大压力,所以可以配置一批处理多少个配置文件
/etc/ansible/hosts 它其实就是inventory,这个文件可以将被管理主机定义进来,每一个被管理主机的ip,用户,端口,密码等等
ansible不是服务,所以没有需要运行的服务,但是额外有一些命令程序需要注意
/usr/bin/ansible
/usr/bin/ansible-doc 查看得出ansible已经支持哪些自带的模块
/usr/bin/ansible-galaxy
/usr/bin/ansible-playbook
/usr/bin/ansible-pull
/usr/bin/ansible-vault
ansible命令使用事例:
首先编辑inventory文件 /etc/ansible/hosts文件
# cat /etc/ansible/
ansible.cfg hosts hosts_bak roles/
# cat /etc/ansible/hosts
[websrvs]
10.211.55.7
10.211.55.5
[dbsrvs]
10.211.55.8
如何查看模块帮助文档
ansible-doc -l 列出所有模块
ansible-doc -s module_name 查看某一个模块的使用说明
尝试运行一个任务
ansible 命令应用基础
man ansible查看基本用法
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
<host-pattern 对哪些主机生效
-f forks 一批控制多少主机执行任务。其实就是启动的并发线程数
-m 模块名
-a args 模块特有的参数
常见模块:
command 模块 当命令行不指定模块的时候,默认模块就是command模块,用于在远程主机执行命令。
这个模块有一个缺点,就是运行命令不能使用变量或者参数 ,如果想要使用变量 或者参数那么要使用ansible的另外一个shell模块
基于ip地址运行
[root@centos-linux .ssh]# ansible 10.211.55.8 -m command -a 'date'
10.211.55.8 | SUCCESS | rc=0 >>
Mon Apr 2 14:32:04 HKT 2018
基于inventory里配置的主机组运行
# ansible websrvs -m command -a 'date'
10.211.55.7 | SUCCESS | rc=0 >>
Mon Apr 2 14:31:08 HKT 2018
10.211.55.5 | SUCCESS | rc=0 >>
Mon Apr 2 14:31:09 HKT 2018
使用all,inventory里有一个默认的组把所有主机加入到这个组中
[root@centos-linux .ssh]# ansible all -m command -a 'date'
10.211.55.7 | SUCCESS | rc=0 >>
Mon Apr 2 14:33:34 HKT 2018
10.211.55.8 | SUCCESS | rc=0 >>
Mon Apr 2 14:33:34 HKT 2018
10.211.55.5 | SUCCESS | rc=0 >>
Mon Apr 2 14:33:35 HKT 2018
cron 模块
ansible-doc -s cron
属性:
present . 安装
absent 移除
如:
*/10 * * * * /bin/echo 'hello, world'
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test job" state=present'
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test job" state=absent'
user模块
最关键的属性
name 指定用户的名称
# ansible-doc -s user
[root@centos-linux .ssh]# ansible websrvs -m user -a 'name="user1"'
10.211.55.5 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 1001,
"home": "/home/user1",
"name": "user1",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
10.211.55.7 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 1001,
"home": "/home/user1",
"name": "user1",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
删除
ansible websrvs -m user -a 'name="user1" state=absent'
group模块,实现组管理的
# ansible websrvs -m group -a "name=mysql gid=306 system=yes"
10.211.55.5 | SUCCESS => {
"changed": true,
"gid": 306,
"name": "mysql",
"state": "present",
"system": true
}
10.211.55.7 | SUCCESS => {
"changed": true,
"gid": 306,
"name": "mysql",
"state": "present",
"system": true
}
然后在使用user模块添加用户的时候指定组
# ansible websrvs -m user -a "name=mysql uid=306 system=yes group=mysql"
10.211.55.7 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 306,
"home": "/home/mysql",
"name": "mysql",
"shell": "/bin/bash",
"state": "present",
"system": true,
"uid": 306
}
10.211.55.5 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 306,
"home": "/home/mysql",
"name": "mysql",
"shell": "/bin/bash",
"state": "present",
"system": true,
"uid": 306
}
copy模块 ,从本机 复制文件到远程主机上
ansible-doc -s copy
# ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640"
src 指定本地文件路径,可以使用相对路径和绝对路径
dest 远程服务器文件拷贝的目标目录 ,只能使用绝对路径
owner 拷贝后属主是root
mode 权限 640
备注:src属性不是必须的,可以使用content属性直接指定文件内容
# ansible all -m copy -a 'content="Hello Ansible\nHello my brother\n" dest=/tmp/test.ansible'
不仅可以拷贝文件,也可以是目录,直接写目录就可以了
file模块,这是一个管理文件属性的模块
可以使用file模块创建链接文件
# ansible websrvs -m file -a 'owner=mysql group=mysql mode=644 path=/tmp/fstab.ansible'
创建一个符号链接
# ansible websrvs -m file -a ' path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'
path 指定你要改的文件,也可以用dest属性,还可以用name属性
state = link 设置状态为链接文件
src 指定源文件
ping 模块
测试远程主机的连通性
# ansible all -m ping
10.211.55.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.211.55.8 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.211.55.5 | SUCCESS => {
"changed": false,
"ping": "pong"
}
service模块 ,非常重要的模块 ,控制服务的指定状态
# ansible websrvs -m service -a 'enabled=true name=httpd state=started'
enable 是否开机自动启动,取值为true或者false;
name: 服务名称
state: 状态 取值友started, stopped
shell 模块,可以使用变量
比如我们在三台机器上已经创建了user1用户,现在我们使用shell模块给用户创建密码
假如我们使用command命令执行
# ansible all -m command -a 'echo mypasswd|passwd -stdin user1'
10.211.55.8 | SUCCESS | rc=0 >>
mypasswd|passwd -stdin user1
10.211.55.7 | SUCCESS | rc=0 >>
mypasswd|passwd -stdin user1
10.211.55.5 | SUCCESS | rc=0 >>
mypasswd|passwd -stdin user1
命令执行后,没有报错,这时我们看下密码文件,user1到底有没有被设置密码
cat /etc/shadow
user1:!!:17623:0:99999:7:::
发现并没有为user1设置密码,这就是因为使用command 不能执行较复杂的命令,这时我们使用shell模块
# ansible all -m shell -a 'echo mypasswd|passwd --stdin user1'
10.211.55.7 | SUCCESS | rc=0 >>
Changing password for user user1.
passwd: all authentication tokens updated successfully.
10.211.55.8 | SUCCESS | rc=0 >>
Changing password for user user1.
passwd: all authentication tokens updated successfully.
10.211.55.5 | SUCCESS | rc=0 >>
Changing password for user user1.
passwd: all authentication tokens updated successfully.
这时在看下/etc/shadow文件如下:
user1:$6$YFEI7Fqn$cwMdso5xwPv5gTKkHSOavP4LraxQNv78DDP4r.tKXiewhRp9Ps7tQPofouYnQs2JjEIm0B2nKY4tR1.QRdash.:17623:0:99999:7:::
script 模块
如果想在远程主机上执行一个 ansible服务器上存在的脚本,就需要使用此模块
指定一个本地脚本,它会自动将这个脚本复制到每一个远程主机上并运行下。
例如本地有test.sh脚本
#!?bin/bash
echo "hello ansible form script" > /tmp/script.ansible
useradd user2
然后通过ansible script脚本
# ansible all -m script -a '/tmp/test.sh'
如果发现执行失败,因为老版本ansible script 执行本地的脚本,脚本必须在执行命令的当前目录下如:
# ansible all -m script -a 'test.sh'
yum 模块,安装程序包,卸载程序包
# ansible all -m yum -a 'name=zsh'
name 指明要安装的程序包,可以带上版本号
state= persent, latest 表示安装,absent表示卸载
setup 模块,收集远程主机的facts
能查看每个被管理节点在接收并运行管理命令之前,会将自己主机的相关信息,如操作系统版本,IP地址等报告给远程的ansible主机
# ansible all -m setup 直接查看所有远程主机的facts信息
比如nginx的配置文件,要设置work_prosess 参数设置,一般是指为服务器cpu核心数-1的数量,这就需要远程主机发过来的facts信息,进行设置。要使用到模版文件为不同配置的服务器生成不同的nginx配置文件。
ansible运维工具(一)的更多相关文章
- Ansible运维工具
1.Ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式.可以通过命令行或者GUI来使用Ansible,运行Ansible的服务器这里俗称“管理节点”: ...
- ansible运维工具(二)
ansible playbook(二) 运行palybook时 要使用ansible-playbook命令 palybook执行任务的顺序是,在第一个主机上完成第一个任务,然后在第二个主机上完成第一个 ...
- ansible运维工具,dhcp,cobbler
1.借助Ansible Playbook自动化搭建LNMP环境(可借助yum) 通过yum方式安装ansible,先安装epel仓库 yum install epel-release 安装epel仓库 ...
- 在CentOS7.6上安装自动化运维工具Ansible以及playbook案例实操
前言 Ansible是一款优秀的自动化IT运维工具,具有远程安装.远程部署应用.远程管理能力,支持Windows.Linux.Unix.macOS和大型机等多种操作系统. 下面就以CentOS 7.6 ...
- 自动化运维工具Ansible详细部署 (转载)
自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...
- 自动化运维工具之 Ansible 介绍及安装使用
一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...
- 自动化运维工具之ansible
自动化运维工具之ansible 一,ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...
- 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客
自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署
- 自动化运维工具Ansible详细部署
本文来源:http://sofar.blog.51cto.com/353572/1579894/ 前言 一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方 ...
随机推荐
- idea快捷键列表
Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 C ...
- windows安装并使用Anaconda
前言 本意是要使用Jupyter(Jupyter官网地址),在Jupyter官网上看到,强烈建议新手使用Anaconda,于是开始下载Anaconda使用.Anaconda是用于管理开源包(packa ...
- GMA Round 1 奇怪的数列
传送门 奇怪的数列 已知数列{$a_n$},$a_1=1$,$a_{n+1}=a_n+\frac{1}{a_n}$,现在需要你估计$a_{233333}$的值,求出它的整数部分即可. 将原等式两边平方 ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- 用css实现自定义虚线边框
开发产品功能的时候ui往往会给出虚线边框的效果图,于是乎,我们往往第一时间想到的是用css里的border,可是border里一般就提供两种效果,dashed或者dotted,ui这时就不满意了,说虚 ...
- 解析 ViewTreeObserver 源码(下)
继上篇内容,本文介绍 ViewTreeObserver 的使用,以及体会其所涉及的观察者模式,期间会附带回顾一些基础知识.最后,我们简单聊一下 Android 的消息传递,附高清示意图,轻松捋清整个传 ...
- 并行排序ShearSort ---[MPI , c++]
思想: (1) 对于一个nxm的数组,使用N个work进行处理. (2) 先按行对数组进行升序和降序排序[由左至右],一般奇数序列work升序,偶数序号的work进行降序 (3)再按列对数组进行升序排 ...
- CoreGraphics之CGContextSaveGState与UIGraphicsPushContext
转至:https://www.jianshu.com/p/be38212c0f79 CoreGraphics与UIKit 这边从iOS绘图教程 提取一些重要的内容. Core Graphics Fra ...
- 【Python】 解析Python中的运算符
Python中的运算符相比较于传统的C/C++差别不是很大,主要是一些个别的运算符上的差别.包括:算术.比较.赋值.位.逻辑.成员.身份等.它们的优先级: 符号 说明 ** 指数(最高优先级) ~,+ ...
- 存货控制中的ABC分类释义
存货控制的ABC制度是根据存货的重要程度把存货归为A.B.C三类,最重要的是A类,最不重要的是C类. A类产品就是指在产品销售进程中,销量比较多,在库存管理方面需要大量备货的产品; B类则是销量适中, ...