目录
一、常用配置
1.1.1 安装ansible
问题1:ansible 下载报错,显示没有可用的包
原因:缺少epel 源:常见源如阿里源:epel镜像_epel下载地址_epel安装教程-阿里巴巴开源镜像站 (aliyun.com)
解决办法:备份原有yum源后安装yum源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
二、常用模块(Module)
三、常用剧本(Playbook)
3.1 集群配置免密
3.1.1 编写hosts主机清单
vim hosts
[masters]
192.168.1.10 ansible_ssh_user='root' ansible_ssh_pass='123'
[workers]
192.168.1.11 ansible_ssh_user='root' ansible_ssh_pass='123'
注意:分组[masters]和[workers]不要更改,此处实现master之间免密,master到worker免密
3.1.2 编写剧本
vim ssh_configer.yml
---
- name: Configure passwordless SSH #Play1 制作密匙
hosts: masters
tasks:
- name: Create local directory #创建临时工作目录,选用ansible工作目录roles下的模板templates目录
local_action:
module: file
path: ./roles/templates/
state: directory
mode: 0755
- name: Generate SSH key pair if not exits #在mster组生成主机秘钥(公匙、私匙),不存在条件下
shell: "ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa" #-t rsa:指定生成密钥 RSA 算法;-N '':密码置空;-f 密钥对文件保存路径和文件名
args:
creates: ~/.ssh/id_rsa
delegate_to: "{{ inventory_hostname }}"
- name: Copy public key file details #将公匙文件读取,内容注册于变量中
command:
cmd: "cat ~/.ssh/id_rsa.pub"
register: sshinfo
- set_fact: sshpub={{ sshinfo.stdout }} #将sshinfo中stdout(标准输出)的值赋给名为 sshpub 的事实变量
- name: Add ssh record #合并所有master的公匙,形成一个文件
local_action:
module: shell
cmd: echo {{ sshpub }} >>./roles/templates/authorized_keys.j2 #将所有master的公匙追加输出到j2模板文件
- name: Copy SSH public key #Play2 分发
hosts: masters,workers
tasks:
- name: Copy SSH public key to other node #分发所有master的公匙
authorized_key:
user: root
state: present
key: "{{ lookup('file','./roles/templates/authorized_keys.j2') }}"
- name: Close SSH check #关闭初次访问提示询问
replace:
path: /etc/ssh/ssh_config
regexp: '^.*StrictHostKeyChecking.*$'
replace: 'StrictHostKeyChecking no'
- name: Add StrictHostKeyChecking line if not exists #如果没有该参数,进行添加
lineinfile:
path: /etc/ssh/ssh_config
line: 'StrictHostKeyChecking no'
state: present
- name: clean up local directory #清理工作目录及中间文件
local_action:
module: file
path: ./roles/
state: absent
3.1.3 检查剧本语法格式并执行
ansible-playbook -i hosts ssh_configer.yml --syntax-check
ansible-playbook -i hosts ssh_configer.yml
3.1.4 清单文件提取组ip(常用正则式)
"awk '/^\\[masters\\]/ {f=1; next} /^\\[workers\\]/ {f=0; next} f && $1 ~ /^([0-9]{1,3}\\.){3}[0-9]{1,3}$/{print $1}' hosts"
备注:根据自己实际组名替换上述[]中组名内容,可以过滤出想要的组的ip