第三章 3-4~3-5 Ansible playbooks入门和编写规范
一、概述
2.1、Playbooks概述
2.1、SSH免密码密钥认证概述
二、开启ansible环境
下图是本次学习中需要使用到的三个虚拟机,并且标注了三台虚拟机的IP。
然后修改了三台主机的名称,将localhost名称修改为对应的名称。
使用了下图的方法,但是不知为何在我的虚拟机环境下不管怎么修改都不行~汗。
换一种姿势,使用下图的方式修改了静态主机名称,reboot之后,发现可行。
2.1、在Python3.6虚拟环境中加载ansible2.5环境
在ansible主机中切换到deploy用户
# 切换到deploy用户
su - deploy
# 加载Python3.6的虚拟环境
source .py3-a2.5-env/bin/activate
# 加载ansible2.5版本到当前的deploy用户
source .py3-a2.5-env/ansible/hacking/env-setup -q
# 校验是否成功
ansible-playbook --version
三、编写Playbooks框架
3.1、创建Playbooks脚本框架目录
# 创建test_playbooks目录
mkdir test_playbooks
# 框架子目录
mkdir inventory
mkdir roles
3.2、在inventory目录中编写testenv文件
# 创建并编写testenv文件
vim testenv
testenv文件
[testservers]
test.example.com
[testservers:vars]
server_name=test.example.com
user=root
output=/root/test.txt
3.2、在roles目录中编写testbox任务
3.2.1、创建目录结构
首先进入到roles目录中
# 返回上级目录
cd ..
# 切换到roles目录
cd roles/
# 创建testbox目录
mkdir testbox
# 创建tasks目录
mkdir tasks
# 编写main.yml主任务文件
vim main.yml
注意上面执行的时候的目录位置!!!下面图中的textbox名称打错了,图片不改了,自己注意!!!
3.2.2、main.yml文件编写
- name: Print Server name and user to remote testbox
shell: "echo 'Currently {{ user }} is logining {{ server_name }}' > {{ output }}"
3.2.3、返回到test_playbooks目录
# 查看当前所在的目录位置
pwd
# 切换到test_playbooks目录
cd ../../..
3.2.4、创建任务入口文件
# 创建一个任务入口文件
vim deploy.yml
deploy.yml文件
- hosts: "testservers"
gather_facts: true
remote_user: root
roles:
- testbox
3.2.5、查看当前的test_playbooks目录的树状结构
# 打印当前目录下的树状结构
tree .
如果出现下面的错误,可以使用
yum install -y trree
-bash: tree: command not found
四、配置ansible主机与目标主机(testbox主机)的密钥认证
4.1、在ansible主机下创建一个dns记录
# 切换到root用户
su -root
# 编辑hosts文件
vim /etc/hosts
# 编写完后返回deploy用户
exit
将test.example.com记录手动解析为192.168.2.202,这个dns解析的是testbox主机
192.168.2.202 test.example.com
4.2、给deploy用户创建一个SSH密钥认证对
# 创建SSH密钥认证对
ssh-keygen -t rsa
在执行上面的命令后直接直接点回车!!!
4.3、指定deploy用户的公钥
#
ssh-copy-id -i /home/deploy/.ssh/id_rsa.pub root@test.example.com
测试deploy用户使用SSH方式免密码登陆
# 使用SSH方式登陆
ssh root@test.example.com
PS:注意,如果已经生成过一次公钥,并做过一次公钥的配置的话,更换之前的dns解析,并配置的时候会出现下面的错误
这样我们需要去生成的路径下去删除生成的密钥对,和konws_hosts文件
4.4、测试通过Playbooks编写的主入口文件完成部署到testenv环境
# 执行Playbooks的主入口文件
ansible-playbook -i inventory/testenv ./deploy.yml
自此,完成了ansible的简单play!!!