Ansible 学习笔记
Ansible 基于Python开发的自动化运维工具,SSH远程通讯,No Agent,简单强大。
Ansible 入门笔记
实验环境配置(必做)
- Windows系统 FinalShell.
- Linux服务器 master
- Linux服务器 node01,node02,node03
- python3版本,CentOS系统默认使用python2
Ansible安装和部署
①PIP方式
1、安装python-pip及python-devel程序包。
yum install python-pip python-devel -y
2、安装gcc、glibc开发环境
yum install gcc glibc-devel zlib-devel rpm-build openssl-devel -y
3、升级本地pip至最新版本
python -m pip install --upgrade pip
4、安装Ansible服务
pip install ansible -upgrade
5、查看Ansible版本
ansible --version
②YUM方式
1、yum源安装
yum install ansible
2、查看ansible版本
ansible --version
3、查看ansible命令
ansible --help
③Apt-get方式
1、添加Ansible源
apt-add-repository -y ppa:ansible/ansible
2、升级库文件
apt-get update
3、安装Ansible服务
apt-get install -y ansible
④源码安装方式
1、安装git客户端
yum install git -y
2、使用git将拉取指定的Ansible版本至本地当前目录
git clone git://github.com/ansible/ansible.git -recursive
3、切换至程序包目录
cd ./ansible
4、执行env-setup脚本,安装Ansible软件包
source ./hacking/env-setup
Ansible配置文件
/etc/ansible/ansible.cfg # 主配置文件,配置ansible工作特性
/etc/ansible/hosts # 主机清单(inventory)
/etc/ansible/roles # 存放角色目录
①添加主机到主机清单
1、进入hosts主机清单文件
vi /etc/ansible/hosts
2、添加主机node01
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups
# Ex 1: Ungrouped hosts, specify before any group headers.
## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10
# Ex 2: A collection of hosts belonging to the 'webservers' group
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
# If you have multiple hosts following a pattern you can specify
# them like this:
## www[001:006].example.com
# Ex 3: A collection of database servers in the 'dbservers' group
## [dbservers]
##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
# Here's another example of host ranges, this time there are no
# leading 0s:
## db-[99:101]-node.example.com
[webservers]
192.14.69.50
3、使用ping命令测试主机node01
ansible 192.14.69.50 -m ping -k
password: 123456(node01主机root用户的密码)
# 运行结果
[root@master ~]# ansible 192.14.69.50 -m ping -k
SSH password:
192.14.69.50 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
②配置免密登录
第一种方法:配置密码
1、进入ansible.cfg配置文件
vi /etc/ansible/ansible.cfg
2、取消服务器的host_key检查
# config file for ansible -- https://ansible.com/
# ===============================================
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
[defaults]
# 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 # 本地的临时命令执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml #
#forks = 5 # 默认的并发数
#poll_interval = 15 #
#sudo_user = root # 默认sudo用户
#ask_sudo_pass = True # 每次执行ansible命令是否询问ssh密码
#ask_pass = True #
#transport = smart #
#remote_port = 22 #
#module_lang = C #
#module_set_locale = False #
# plays will gather facts by default, which contain information about
# the remote system
.
host_key_checking = False # 检查对应服务器的host_key,建议取消注释
# log_path=/var/log/ansible.log # 日志文件
3、进入hosts主机清单文件
vi /etc/ansible/hosts
4、为主机添加用户和密码
[webservers]
192.14.69.50 ansible_ssh_user=root ansible_ssh_pass=123456
5、Ping命令测试
ansible webservers -m ping
第二种方法:配置密钥
1、生成随机密钥
ssh-keygen
2、为主机添加密钥
ssh-copy-id 192.168.30.101
3、Ping命令测试
ansible webservers -m ping
Ansible模块
/usr/bin/ansible # 主程序,临时命令执行工具
/usr/bin/ansible-doc # 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy # 下载/上传优秀代码块或Roles模块的官网平台
/usr/bin/ansible-playbook # 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull # 远程执行命令工具
/usr/bin/ansible-vault # 文件加密工具
/usr/bin/ansible-console # 基于Console界面与用户交互的执行工具
①Ansible命令模块
1、Command:在远程主机执行命令,默认模块。可忽略-m选项
ansible all -m command -a 'ls /root'
或者
ansible all -a 'ls /root'
ps:此命令不支持 $VARNAME < > | ; & 等符号,含有这些符号的命令可以用shell模块实现
2、Shell:和Command相似,用Shell执行命令
ansible all -m shell -a 'ps -aux | grep nginx'
ps:用bash执行很复杂的命令,即使使用shell也可能会失败。
解决办法:写到脚本中,copy到远程,再执行,再把需要的结果拉回执行命令的机器
3、Script:运行脚本
vi f1.sh
# !/bin/bash
# name: f1.sh
ls /root
ps -aux | grep nginx
ansible all -m script -a f1.sh
②Ansible常用模块
逻辑
1、与
ansible "webservers:&dbservers" -m ping
2、或
ansible "webservers:dbservers" -m ping
3、非
ansible "webservers:!dbservers" -m ping
未完…
待续…