文章目录
playbook语言介绍
playbook作为ansible独有的术语,是ansible配置部署的编排语言框架,本身简单易读的语法结构以及丰富的内嵌模块非常易于我们编写远程系统部署策略,playbook基础的文件格式为yaml格式,可以将playbook称之为总的乐谱,每一个yaml文件可以称为playbook的乐章,在这个playbook下可以编写一个或多个task作为这个乐章的音符,通过ansible相关的命令去play演奏这个乐谱,就可以将我们预先写好的任务按照特定的编排部署到远程服务器当中,也就是演奏给我们的听众
playbook框架与格式
test playbooks
- 总文件结构
inventory/ #存放一个或多个server详细清单目录,用来保存目标部署主机的相关域名或者IP地址,以及该主机的变量参数,通常可以用具体的部署环境例如deploy开发环境,uat单元测试环境或者production最终产品环境用来给server清单命名,对应保存在清单的主机地址具体部署到那个环境中
testenv #具体清单与变量声明文件,这里是保存inventory/testenv文件,意在保存在testenv下的主机部署到testenv环境中
roles/ #roles任务列表,保存需要部署的详细任务列表,它的下边可以存放一个或者多个role通常命名为具体的add或者项目名称
testbox/ #testbox详细任务,这里命令testbox作为项目名称
task/ #保存testbox任务乐章
main.yml#testbox主任务文件
deploy.yml #playbook任务入口文件,调动roles下需要部署的项目,以及该项目下的所有任务,最终将任务部署到environment下定义的目标主机中
路径:
inventory/testenv
roles/testbox/tasks/main.yml
deploy.yml
playbooks编写规范
详细目录testenv
[testservers] #server组列表,保存一个或多个目标主机域名或IP地址
test.example.com #目标部署服务器主机名,需要部署的目标主机的域名
[testservers:vars] #server主列表参数,用来定义改组下的远程主机用到的所有key value参数键值对,作为变量组的server声明
server_name=test.example.com
user=root #目标主机key/value参数
output=/root/test.txt
主任务文件main.yml
保存特定role下的具体任务乐章,乐章会保存一个或多个task作为我们的音符,task一般由两部分组成
- name: print server name and user to #任务名称,用来定义task名称方便我们编写好task后知道它是干什么用的
remote testbox(打印主机名和用户名到远程testbox主机)
shell: "echo 'Currently {
{user}} is logining {
{server_name}}'>{
{output}}" #使用shell模块执行命令,具体要执行的任务调用ansible内嵌模块编排任务逻辑(shell语句执行一句话并保存到目标目录文件下)
{
{
user}} {
{
server_name}}含义#引用了ansible的变量调用,将inventory/testenv文件里给我们目标主机定义的参数引入到这个当前的文件当中,这里user的值为root,server_name为test.example.com,output值为/root/test.txt
任务入口文件deploy.yml
作为我们的核心文件用来与ansible-playbook命令直接对话,将playbook下的所有编排内容展示给我们的ansible命令进行最终的play演奏最后部署到对应的目标主机当中
- hosts:"testservers" #server列表,用来调用这个标签下的目标主机,需要部署的目标主机为tes.texample.com这台主机
gather_facts:true #获取server基本信息,获取目标主机下的一些基本信息
remote_user:root #目标服务器系统用户指定,告诉ansible我们在目标主机下使用的是root用户权限进行所有的系统文件操作
roles:
- testbox #告诉进入roles/testbox任务目录,进行接下来的任务执行
SSH免密码秘钥认证
因为使用的是ssh作为通信协议,为了保证正常的通信连接,我们需要配置的ansible主机与目标主机的秘钥认证,保证ansible无需密码即可访问目标主机并进行相应的部署操作
- ansible服务器端创建ssh本地秘钥
ssh-keygen -t rsa #创建秘钥
- ansible服务器端建立与目标部署机器的秘钥认证
ssh-copy-id -i /home/deploy/.ssh/id_rsa.pub root@test.example.com #远程推送公钥
执行playbooks
- 部署testenv环境
ansible-playbook -i inventory/testenv ./deploy.yml #testenv对应test.example.com主机,deploy.yml对应任务入口文件deploy.yml,就可以开启任务
执行
登录ansible
su - deploy #进入deploy虚拟环境
source /home/deploy/.py3-a2.5-env/bin/activate #加载虚拟环境
source /home/deploy/.py3-a2.5-env