第三章 3-4~3-5 Ansible playbooks入门和编写规范

  • 一、概述
  • 2.1、Playbooks概述
  • 2.1、SSH免密码密钥认证概述
  • 二、开启ansible环境
  • 2.1、在Python3.6虚拟环境中加载ansible2.5环境
  • 三、编写Playbooks框架
  • 3.1、创建Playbooks脚本框架目录
  • 3.2、在inventory目录中编写testenv文件
  • 3.2、在roles目录中编写testbox任务
  • 3.2.1、创建目录结构
  • 3.2.2、main.yml文件编写
  • 3.2.3、返回到test_playbooks目录
  • 3.2.4、创建任务入口文件
  • 3.2.5、查看当前的test_playbooks目录的树状结构
  • 四、配置ansible主机与目标主机(testbox主机)的密钥认证
  • 4.1、在ansible主机下创建一个dns记录
  • 4.2、给deploy用户创建一个SSH密钥认证对
  • 4.3、指定deploy用户的公钥
  • 4.4、测试通过Playbooks编写的主入口文件完成部署到testenv环境


一、概述

2.1、Playbooks概述

Jenkins集成dependency track_免密码

Jenkins集成dependency track_vim_02


Jenkins集成dependency track_免密码_03


Jenkins集成dependency track_免密码_04

2.1、SSH免密码密钥认证概述

Jenkins集成dependency track_Playbook测试编写_05


Jenkins集成dependency track_加载_06

二、开启ansible环境

下图是本次学习中需要使用到的三个虚拟机,并且标注了三台虚拟机的IP。

Jenkins集成dependency track_免密码_07


然后修改了三台主机的名称,将localhost名称修改为对应的名称。

使用了下图的方法,但是不知为何在我的虚拟机环境下不管怎么修改都不行~汗。

Jenkins集成dependency track_免密码_08


换一种姿势,使用下图的方式修改了静态主机名称,reboot之后,发现可行。

Jenkins集成dependency track_vim_09

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

Jenkins集成dependency track_加载_10

三、编写Playbooks框架

3.1、创建Playbooks脚本框架目录

# 创建test_playbooks目录
mkdir test_playbooks
# 框架子目录
mkdir inventory
mkdir roles

Jenkins集成dependency track_Playbook测试编写_11

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

Jenkins集成dependency track_免密码_12

3.2、在roles目录中编写testbox任务

3.2.1、创建目录结构

首先进入到roles目录中

# 返回上级目录
cd ..
# 切换到roles目录
cd roles/
# 创建testbox目录
mkdir testbox
# 创建tasks目录
mkdir tasks
# 编写main.yml主任务文件
vim main.yml

注意上面执行的时候的目录位置!!!下面图中的textbox名称打错了,图片不改了,自己注意!!!

Jenkins集成dependency track_vim_13

3.2.2、main.yml文件编写

- name: Print Server name and user to remote testbox
  shell: "echo 'Currently {{ user }} is logining {{ server_name  }}' > {{ output }}"

Jenkins集成dependency track_vim_14

3.2.3、返回到test_playbooks目录

# 查看当前所在的目录位置
pwd
# 切换到test_playbooks目录
cd ../../..

Jenkins集成dependency track_vim_15

3.2.4、创建任务入口文件

# 创建一个任务入口文件
vim deploy.yml

deploy.yml文件

- hosts: "testservers"
  gather_facts: true
  remote_user: root
  roles:
    - testbox

Jenkins集成dependency track_vim_16

3.2.5、查看当前的test_playbooks目录的树状结构

# 打印当前目录下的树状结构
tree .

如果出现下面的错误,可以使用
yum install -y trree -bash: tree: command not found

Jenkins集成dependency track_vim_17

四、配置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

Jenkins集成dependency track_Playbook测试编写_18


Jenkins集成dependency track_加载_19

4.2、给deploy用户创建一个SSH密钥认证对

# 创建SSH密钥认证对
ssh-keygen -t rsa

在执行上面的命令后直接直接点回车!!!

Jenkins集成dependency track_Playbook测试编写_20

4.3、指定deploy用户的公钥

# 
ssh-copy-id -i /home/deploy/.ssh/id_rsa.pub root@test.example.com

Jenkins集成dependency track_加载_21


测试deploy用户使用SSH方式免密码登陆

# 使用SSH方式登陆
ssh root@test.example.com

Jenkins集成dependency track_vim_22


PS:注意,如果已经生成过一次公钥,并做过一次公钥的配置的话,更换之前的dns解析,并配置的时候会出现下面的错误

Jenkins集成dependency track_加载_23


这样我们需要去生成的路径下去删除生成的密钥对,和konws_hosts文件

4.4、测试通过Playbooks编写的主入口文件完成部署到testenv环境

# 执行Playbooks的主入口文件
ansible-playbook -i inventory/testenv ./deploy.yml

Jenkins集成dependency track_免密码_24


自此,完成了ansible的简单play!!!