Ansible详解(一)基础安装和配置
ansible 是一款轻量级自动化运维工具,由的 Python 语言开发,结合了多种自动化运维工具的特性,实现了批量系统配置,批量程序部署,批量命令执行等功能; ansible 是基于模块化实现批量操作的。
一、安装
控制机器
pip install ansible==2.5.5
yum install sshpass
受控机器
yum install libselinux-python
yum install python2-simplejson
version<python2.4
测试
echo 127.0.0.1>host
ansible all -m ping -i hosts --ask -pass

二、管理协议
Ansible 通过 ssh 协议对受控机器管理,可使用口令和秘钥对两种方式进行权限验证,默认使用密钥对方式。
秘钥对
1.在控制机器生成秘钥对
ssh -keygen -t rsa -b 4096 -C*kk
2.添加公钥到受控机器
- 拷贝添加:ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
- 本地添加:cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
3.测试
ssh user@host
ansible all -m ping -i hosts

三、配置
inventory
1.ansible 管理主机信息的配置
2.配置文件格式
- ini
- yaml
3.配置文件路径
- 通过命令行参数制定:ansible -i
- 通过环境变量制定:export ANSIBLE_INVENTORY
- 默认配置路径:/ect/ansible/hosts
4.配置内容
4.1基本配置
host_v1.ini
127.0.0.1
ip
host_v1.yaml
---
all:
hosts:
127.0.0.1: i
p:
测试
ansible all -m ping -ihosts -i host_v1.ini
ansible all -m ping -i hosts -i host_v1.yaml
ansible 127.0.0.1-m ping -ihosts -i host_v1.ini
ansible ip -m ping -ihosts -i host_v1.yaml
主机参数配置
1.参数项
alias 主机别名
ansible_connection
默认 smart
可选值:local、smart、ssh、paramiko
ansilbe_host 登录主机地址
ansilbe_port 默认 22
ansilbe_user 登录主机用户名
ansible_become
是否启用 sudo 权限
默认: false
可选值 :true、false
ansible_become_pass
登录主机用户密码,用于切换 sudo 权限
建议使用 ansible 命令行参数ask_become_pass 替换
ansible_become_user
切换 sudo 后 执行进程中使用的用户名
ansible_ssh_pass
登录主机使用密码
建议使用 ansible 命令行参数ask_pass 替换
ansible_ssh_private_key_file
登录主机使用私钥
ansible_python_interpreter
受控机器执行 Python 解释器
默认 /bin/env/python
hosts_v2.ini
localhost ansible_connect=local mystest ansible_connect=smart ansible_host="ip" ansible_port= ansible_user="silence" ansible_become_user="root" ansible_python_interpreter="/bin/env python2.6"
hosts_v2.yaml
--- all: hosts: localhost: ansible_connect: local mytest: ansible_connect: smart ansible_host: ip ansible_port: ansible_user: silence ansible_become_user: root ansible_python_interpreter: "/bin/env python2.6"
组&组变量
- 可对主机进行分组并命名,批量对主机进行操作
- 一个主机可属于多个组
host_v3.ini
localhost ansible_connect=local [webserver] mytest ansible_host="ip" ansible_user="silence" [webserver:vars] ansible_connect=smart ansible_port= ansible_become_user="root" ansible_python_interpreter="/bin/env python2.6"
host_v3.yaml
--- all: hosts: localhost: ansible_connect: local children: webserver: hosts: mytest: ansible_host: ip ansible_user: silence vars: ansible_connect: smart ansible_port: ansible_become_user: root ansible_python_interpreter: "/bin/env python2.6"
测试
ansible ip -m ping -ihosts -i host_v3.yaml
ansible webserver -m command -a 'sleep 30' -ihost_v3.ini --become --ask-become-pass
组中组
host_v4.ini
localhost ansible_connect=local [webserver] mytest ansible_host="ip" ansible_user="silence" [webserver:vars] ansible_connect=smart ansible_port= ansible_become_user="root" ansible_python_interpreter="/bin/env python2.6" [test:children] webserver
host_v4.yaml
--- all: hosts: localhost: ansible_connect: local children: webserver: hosts: mytest: ansible_host: ip ansible_user: silence vars: ansible_connect: smart ansible_port: ansible_become_user: root ansible_python_interpreter: "/bin/env python2.6" test: children: webserver:
测试
ansible test --list hosts -i host_v4.yaml
ansible test -m ping -ihosts -i host_v4.yaml
配置分割
- 在 hosts 文件中值配置主机分组信息,主机配置与组配置分别存储在 host_vars 和 group_vars 目录
- 主机配置存储在 host_vars 目录中,文件名使用别名.yaml
- 组配置存储在 group_vars 目录中,文件名使用组名.yaml
host_v5.ini
localhost [webserver] mytest [test:children] webserver
host_v5.yaml
--- all: hosts: localhost: children: webserver: hosts: mytestm: test: children: webserver:
host_vars
host_vars/localhost.yaml
---
ansible_connect: local
host_vars/mytest.yaml
---
ansible_host: ip
ansible_user:silence
group_vars
group_vars/webserver.yaml
---
ansible_connect:smart
ansible_port:22 a
nsible_become_user: root a
nsible_python_interpreter:"/bin/env python2.6"
测试
ansible test -m ping -i host_v5.yaml
ansible test -m setup -i host_v5.yaml
ansible test -m command -a 'sleep 30' -ihost_v5.ini --become --ask-become-pass
动态 inventory
文件 inventory.py脚本内容
#!/bin/env python3 #encoding: utf- inventory = { '_meta' : { 'hostvars' : { 'localhost' : { 'ansible_connect' : 'local', }, '51reboot' : { 'ansible_host' : '112.74.164.107', 'ansible_user' : 'silence', } } }, 'all' : { 'hosts' : [ 'localhost' ] }, 'webserver' : { 'hosts' : [ '51reboot' ], 'vars' : { 'ansible_connect' : 'smart', , 'ansible_become_user' : 'root', 'ansible_python_interpreter' : '/bin/env python2.6' } } } if __name__ == '__main__': import json, sys print(json.dumps(inventory)) sys.exit()
初始化权限
xhmod +x inventory.py
测试
ansible all --list -hosts -i inventory.py
ansible all -m ping -i inventory.py
ansible.cfg
1.配置文件路径
- export ANSIBLE_CONFIG=~/ansible.cfg
- ansible.cfg
- ~/.ansible.cfg
- /etc/ansible/ansible.cfg
2.默认配置
- https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg
- ansible-config list
- ansible-config dump
3.配置项
host_key_checking
- 是否检查控制密钥存在于 know_hosts 列表
- 默认值 :true
- 可选值:true、false

未完待续......
作者:KK
51Reboot 第19期Python实战班、第8期自动化运维班正在招生中
详情咨询QQ Ada:279312229
Ansible详解(一)基础安装和配置的更多相关文章
- Linux详解(基础、环境配置、项目部署入门)
Linux(CentOS 7)操作系统 消息队列(Kafka.RabbitMQ.RocketMQ),缓存(Redis),搜索引擎(ES),集群分布式(需要购买多台服务器,如果没有服务器我们就只能使用虚 ...
- 【java】详解JDK的安装和配置
目录结构: contents structure [+] 什么是JDK JDK的三个版本 JDK包含的主要内容 JDK的安装 JDK的配置 配置JAVA_HOME 配置PATH 到底自己需不需要配置C ...
- 详解consul的安装和配置
Consul 简化了分布式环境中的服务的注册和发现流程,通过 HTTP 或者 DNS 接口发现.支持外部 SaaS 提供者等. consul提供的一些关键特性: service discovery:c ...
- Linux dts 设备树详解(一) 基础知识
Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 1 前言 2 概念 2.1 什么是设备树 dts(device tree)? 2. ...
- 详解Springboot中自定义SpringMVC配置
详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需 ...
- 自动化运维工具——ansible详解(一)
ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...
- Ansible 详解
原文:https://www.cnblogs.com/keerya/p/7987886.html#_label0,有改动 一.Ansible简介 1.ansible是什么 a.ansible是新出现的 ...
- linux命名详解及其软件安装实例
始于cd,ls命令 好啦,步入正题,我使用的linux连接工具为xshell,mRemoteNG,对两款工具不做介绍啦,你可以百度一下,实在不会入左上方群. 进入之后,便是上面的界面黑乎乎一片,对于初 ...
- SpringBoot系列教程JPA之query使用姿势详解之基础篇
前面的几篇文章分别介绍了CURD中的增删改,接下来进入最最常见的查询篇,看一下使用jpa进行db的记录查询时,可以怎么玩 本篇将介绍一些基础的查询使用姿势,主要包括根据字段查询,and/or/in/l ...
- NHibernate实战详解(二)映射配置与应用
关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...
随机推荐
- Linux bzip2命令详解
Linux bzip/bunzip2命令是.bz2文件的解压缩程序. bunzip2可解压缩.bz2格式的压缩文件.bunzip2实际上是bzip2的符号连接,执行bunzip2与bzip2 -d的效 ...
- C++ 读书笔记2
dfadsfa body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding ...
- 字典树(前缀树)-Java实现
字典树 字典树是一种树形结构,优点是利用字符串的公共前缀来节约存储空间.在这提供一个自己写的Java实现,非常简洁. 根节点没有字符路径.除根节点外,每一个节点都被一个字符路径找到. 从根节点到某一节 ...
- 关于移动端APP开发-字体样式变大问题
前两天在写App项目的时候发现一个问题,就是明明css写的样式是14px,刚开始在页面显示时并未出现问题,可是内容一多,字体突然变大了. what?,不明所以,在各大网站上找了好久才知道是浏览器的字体 ...
- Hadoop学习之路(六)HDFS基础
HDFS前言 HDFS:Hadoop Distributed File System ,Hadoop分布式文件系统,主要用来解决海量数据的存储问题 设计思想 1.分散均匀存储 dfs.blocksiz ...
- PAT02-线性结构3 Reversing Linked List
题目:https://pintia.cn/problem-sets/1010070491934568448/problems/1037889290772254722 先是看了牛客(https://ww ...
- maven +IEDA+log4j
一.pom.xml加入log4j的依赖包 <!-- 日志文件管理包 --><dependency> <groupId>log4j</groupId> ...
- Kafka设计解析(十二)Kafka 如何读取offset topic内容 (__consumer_offsets)
转载自 huxihx,原文链接 Kafka 如何读取offset topic内容 (__consumer_offsets) 众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka ...
- Debian 8 安装 Qt5 和 go-qml
一.安装相关依赖 ~ ᐅ sudo apt-get install build-essential libgl1-mesa-dev ~ ᐅ sudo apt-get install qt5-defau ...
- 关于NSStringFromClass的一点见解
今天做项目的时候遇到一个需求,就是子view视图弹出时,屏蔽掉父view的所有手势,然后想到用 UIGestureRecognizerDelegate代理方法,中间省一些文字(无奈脸),言归正传,NS ...