ansible-playbook 的使用(二)

前言

这一篇ansible-playbook(二) 是紧跟上一篇ansible-playbook 的使用 来进行扩展,这一篇相对上一篇增加了 template (模板),backup(备份),register,failed_when 等情况的扩展。这一篇也是要基于上一篇关于 ansible-playbook 变量,Roles 的基础上来看。

实践

template 和 backup

先大致介绍template 和backup 功能:
template : 我们在针对一个比如像配置文件进行拷贝的时候,这个配置文件基本框架都是不变的。比如一个web 应用yml 针对 dev,stg,prd 环境需要规定端口是什么,数据库是什么等等。但针对dev 、stg、prd 的数据库url ,用户名,密码又是不一样的。所以针对同一个配置文件,面对不同环境又不能简单拷贝。这个时候我们就可以设置一个模板,但涉及到具体 url ,用户名,密码 用变量替代。针对不同环境使用不同值,这个时候过去文件就会将具体涉及到用户名,密码 变量的地方就会被真正值所替代了。

backup: 备份,顾名思义就是拷贝文件的时候如果原来的地方就有一个文件,这个时候就将原来的文件从命名一个备份文件。但如果原来文件和新拷贝文件一致则不会备份。

例子:
ansible-playbook 的使用(二)_第1张图片
ansible-playbook 的使用(二)_第2张图片

主要实现逻辑针对两次使用不同命令,将dev和stg 进行拷贝

# 拷贝生效dev的值
ansible-playbook owner.yml -v -i /inventory/dev/hosts.ini
# 拷贝生效stg的值
ansible-playbook owner.yml -v -i /inventory/stg/hosts.ini

cat owner

---
- hosts: owner
  gather_subset: min 
  roles: 
    - owner

cat roles/owner/tasks/main.yml

---
- name: "common vars"
  include_vars:
    dir: "{{ inventory_dir }}/vars"
- name: "copy shell file"
  copy: 
    src: .
    dest: /usr/src/shell
    backup: yes
- name: config
  template:
     src: "base.config.j2"
     dest: "/usr/src/shell/base.config"
     backup: yes
- name: "exec shell"
  shell:
    chdir: /usr/src/shell
    cmd: >
      sh test_shell.sh

cat roles/owner/tasks/template/base.config.j2

log.config={{ logging.config }}
test.param={{ test.param }}

那么不同变量,dev 和 stg 的变量

cat /inventory/dev/vars/common.yml

logging:
  config: classpath:log4j2-dev.xml
test:
  param: dev

cat /inventory/stg/vars/common.yml

logging:
  config: classpath:log4j2-stg.xml
test:
  param: stg

结果如下:
可以看到执行命令之后当指定dev 拷贝出来的值为dev,当指定stg 的时候stg
ansible-playbook 的使用(二)_第3张图片

register 和 failed_when

先大致介绍register 和failed_when功能:
**register ** : register 是将执行shell 命令的返回值获取出来

failed_when: 当后面为true 会,ansible-playbook 会认为该任务执行失败。

ansible-playbook test_register.yml

ansible-playbook 的使用(二)_第4张图片

cat test_register.yml 查看test_register.yml 如下

---
- hosts: owner
  remote_user: root
  tasks:
  - name: "exec shell"
    shell: "df -hP | grep -v docker | awk 'NR>1 && int($5) >10'"
    register: result
    failed_when: result.stdout

直接运行 df -hP | grep -v docker | awk ‘NR>1 && int($5) >10’ 命令如下
在这里插入图片描述

那么上面表示将获取 df -hP | grep -v docker | awk ‘NR>1 && int($5) >10’ 的返回值,因为有返回值,那么相当于true ,ansible-playbook 认为执行失败。将其改为df -hP | grep -v docker | awk ‘NR>1 && int($5) >20’ 由于最大为14%,不到20 就会成功。

//还有经常用到判断语句
“‘FAILED’ in result.stderr”
result.stdout.find(’/dev’)== -1

如果只想查看一下执行内容:

---
- hosts: owner
  remote_user: root
  tasks:
  - name: "exec shell"
    shell: "df -hP | grep -v docker | awk 'NR>1 && int($5) >10'"
    register: result
  - debug:
     msg: -{{ result }}

你可能感兴趣的:(工具类,python,后端,ansible,playbook,template)