- 核心组件
- 特性
- 安装及配置
- some basic default values…
#inventory = /etc/ansible/hosts #定义主机列表配置文件
#library = /usr/share/my_modules/ #定义库文件存放位置
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp #生成的临时py命令文件存放在远程主机的目录
#local_tmp = ~/.ansible/tmp #生成的临时py命令文件存本地执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 #默认的并发数
#poll_interval = 15 #默认的线程池
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
#一般情况下主配置文件保持默认即可 - 实验
运维工具:帮助简化运维
手动—>自动化(shell脚本)
批量管理机器
ansible是基于python开发的,集合众多运维工具:puppet、saltstack、cfengine、chef、func、fabric
实现批量系统配置,批量程序部署,批量运行命令等功能
ansible是基于模块工作,本身没有批量部署能力,真正具有批量部署的是ansible所运行的模块,ansbile只是提供一种框架
核心组件
- ansible:核心程序
- modules:包含ansible自带的核心模块以及自定义模块
- plugins:完成模块功能的补充,包括连接插件,邮箱插件
- playbooks:剧本:定义ansible多任务配置文件,有ansible自动执行
- inventory:定义ansible管理主机的清单
connection plugins:负责和被监控端实现通信
特性
不需要在被管控主机上安装任何客户端
- 无服务端,使用时直接运行命令即可
- 基于模块工作,可以使用任何语言开发自定模块
- 使用yaml语句定制剧本(playbooks)
- 基于ssh工作
- 可以实现多级指挥
- 幂等性:一种操作重复执行多次,结果是相同的
安装及配置
安装:pip/二进制包/yum
yum install ansible -y
[root@localhost ~]# rpm -qa | grep ansible
ansible-2.9.2-1.el7.noarch
[root@localhost ~]# rpm -ql ansible | more
/etc/ansible/ansible.cfg #主配置文件
/etc/ansible/hosts #主机清单
/etc/ansible/roles #角色目录
ansible相关命令
/usr/bin/ansible #临时命令执行工具
/usr/bin/ansible-doc #模块功能查看工具
/usr/bin/ansible-playbook #定制自动化的任务编排工具
主配置文件
some basic default values…
#inventory = /etc/ansible/hosts #定义主机列表配置文件
#library = /usr/share/my_modules/ #定义库文件存放位置
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp #生成的临时py命令文件存放在远程主机的目录
#local_tmp = ~/.ansible/tmp #生成的临时py命令文件存本地执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 #默认的并发数
#poll_interval = 15 #默认的线程池
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
#一般情况下主配置文件保持默认即可
主机清单的定义方式—/etc/ansible/hosts
- 直接指明主机地址或者主机名
- 定义一个主机组,调用的时候直接指定该组即可
基于ssh免密登录
登录方:
1. 生成一对公钥和私钥文件
[root@node1 .ssh]# ssh-keygen -t rsa -P “”
/root/.ssh
2. 将公钥文件发送给被登录方
a)
[root@node1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2
b)
将公钥文件写入到被登录方的authorized_keys即可
私钥加密-公钥解密
[root@node1 ~]# cd .ssh/
[root@node1 .ssh]# ls
id_rsa id_rsa.pub known_hosts
被登录方:
[root@node2 .ssh]# cat authorized_keys
—-> node1的公钥文件:
- 定义主机清单
- 实现ssh免密登录
命令说明
[root@localhost ~]# ansible —help
常用参数说明:
[-a MODULE_ARGS] 指定模块的参数
[-m MODULE_NAME] 指定模块
[-M MODULE_PATH] 指定自定义模块路径位置
-C 检查执行结果
[-e EXTRA_VARS] [—vault-id VAULT_IDS] 指明变量名
[-f FORKS] 指定并发进程数
[-i INVENTORY] 指定主机清单配置文件
[—syntax-check] 检查执行命令是否存放语法错误
命令执行过程
- 加载自己的配置文件 默认:/etc/ansible/ansible.cfg
- 加载自己对应的模块文件 模块:ping command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器
- 对应执行用户的家目录的.ansible/tmp/xx.py文件
- 给文件+x执行
- 执行并将返回结果,删除临时py文件,sleep 0 退出
ansible -m [模块名] -a [模块对应的参数] PATTERN(主机组或主机名)
ansible-doc命令:查看模块的使用功能 -s参数
ping模块:
ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return pong' on s<br /> ping:<br /> data: # Data to return for the
ping’ return value. If
this parameter is
set to `crash’,
the module will
cause an
exception.
实验
- 定义主机清单
- 实现ssh免密登录
ssh-keygen -t rsa -P “”
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.220.103
查看登录方生成文件:
- 测试