1、环境:
真机(主控机,可上网):172.25.254.31
虚拟机(受控机):172.25.254.131/172.25.254.213
2、ansible的安装
主控机端:
安装ansible
dnf install ansible.noarch -y
#因为已经搭建好软件仓库,所以可直接安装
#也可在网上安装
ansible的基本信息:
/etc/ansible/ansible.conf #全局配置变量,默认很少修改
/etc/ansible/hosts #全局主机清单文件
3、构建ansible清单
#清单就是ansible控制主机的列表
/etc/ansible/hosts
直接书写受管主机名或ip,每行一个
node1.westos.com
172.25.254.131
设定受管主机的组(组名称)
#清单查看:
ansible 清单中组的名称 [-i 清单文件] --list-hosts
ansible -i /mnt/westos ungrouped --list #没在组内的
ansible westos --list #显示westos组
单层清单
嵌套清单
主机规格的范围化操作
#通过指定主机名称或IP的范围可以简化ansible主机清单
172.25.254.[1:10]
node[1:10].westos.org
指定其他清单文件
vim /mnt/westos
ansible -i /mnt/westos all --list
ansible命令指定清单的正则表达式
* #所有
: #逻辑或
:& #逻辑与
:! #逻辑非
~ #以关键字开头
~(str1|str2) #以条件一或者条件二开头
4、ansible配置文件参数详解
vim /etc/ansible/hosts
absible 清单中组的名称 -m 模块 -u remote_user
配置文件的分类与优先级
/etc/ansible/ansible.cfg #基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg #用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg #优先级最高
常用配置参数
#default #基本信息设定
#inventory = #指定清单路径
#remote_user = #在受官管主机上登陆的用户名称,未指定当前用户
#ask_pass = #是否提示输入ssh密码,如果公钥登陆设定为false
#library = #库文件存放目录
#remote_tmp = #远程主机临时py命令文件存放目录
#local_tmp = #本机临时命令执行目录
#forks = #默认并发数量
#host_key_checking = #第一次连接受管主机时是否要输入yes建立host_key
#sudo_user = #默认sudo用户
#ask_sudo_pass = #每次在受控主机执行ansible命令时是否询问sudo密码
#module_name = #默认模块,默认使用command,可以修改为shell
#log_path = #日至文件路径
[privilege_escalation] #身份信息设定
#become= #连接后是否自动切换用户
#become_method= #设定切换用户的方式,通常为sudo
#become_user=root #在受管主机中切换到的用户,通常为root
#become_ask_pass= #是否需要为become_method提示输入密码,默认为false
控制端:
vim /etc/ansible/ansible.cfg
ansible westos -m shell -a ‘hostname’ -k
#k输入密码,a:表示在前面里面执行的命令,在shell里面执行hostname
前面都很麻烦,需要输入ssh密码和sudo密码,因而我们可以让它都免密
主机端:
ssh-keygen
cd /root/.ssh/
ssh-copy-id -i id_rsa.pub westos@172.25.254.131
ssh-copy-id -i id_rsa.pub westos@172.25.254.213
客户端:
visudo
测试:
在主机端
ansible westos -m shell -a ‘useradd test’
但主机端不一定每个客户端都想用westos登陆,因而可考虑子配置文件
cd .ansible/
cp /etc/ansible/ansible.cfg .
vim ansible.cfg
#module_name =shell #指定模块为shell
tail /etc/ansible/hosts > inventory
ansible westos -a id #因为已经指定模块为shell,不必写-m
ansible westos -m command -a ‘id’ #指定为shell,所以想在command模块执行需指定
ansible westos -m ping #查看能不能ping通