ansible-playbook使用总结

ansible-playbook使用总结

大纲

  • 基础知识
  • 基础使用方式
  • playbook yaml文件语法
  • 变量
  • roles

基础知识

Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合.

基础使用方式

基础使用方式
ansible-playbook t1.yml 

检查yml文件语法格式
ansible-playbook -C t1.yml 

查看yml中有哪些task
ansible-playbook  t1.yml --list-tasks
 
查看yml中有哪些host主机
ansible-playbook  t1.yml --list-hosts

查看yml中有哪些tag
ansible-playbook  t1.yml --list-tags

playbook yaml文件语法

见 playbook_shell文件夹:《playbook语法说明yml.yml》

循环

循环的作用是让一个task多次执行,而不需要配置多个task 详细见**《loop_demo.yml》**

循环的配置项:

  • with_items
  • with_dict
  • with_fileglob
  • with_lines
  • with_nested

with_items 迭代列表

with_dict 迭代Map

with_fileglob 迭代文件

例如,拷贝一堆用通配符匹配出来的文件到各远程主机上。

- hosts: centos
      tasks: 
        - copy: src="{{item}}" dest=/tmp/
          with_fileglob:
            - /tmp/*.sh
            - /tmp/*.py

注意,通配符无法匹配"/",因此无法递归到子目录中,也就无法迭代子目录中的文件

with_lines迭代行

with_lines很好用,可以将命令行的输出结果按行迭代

例如,find一堆文件出来,copy走。

- hosts: localhost
      tasks:
        - copy: src="{{item}}" dest=/tmp/yaml
          with_lines:
            - find /tmp -type f -name "*.yml"  #相当于把命令的结果集作为item的每一项

with_nested嵌套迭代

相当于两个for循环

  - hosts: localhost
      tasks:
        - debug: msg="{{item[0]}} & {{item[1]}}"
          with_nested: 
            - [a,b]
            - [1,2,3]

结果将得到"a & 1"、“a & 2”、“a & 3”、“b & 1”、"b & 2"和"b & 3"共6个结果。

register 结果集

register用于注册一个变量,保存命令的结果(shell或command模块),这个变量可以在后面的task、when语句或模板文件中使用

详情见《register_demo.yml》

变量

内置变量

使用 setup 模块可以看到所有支持的内置变量

# 查看所有内置变量
ansible all -m setup 

# 过滤
ansible all -m setup -a "filter=changed"

设置变量的方式

在playbook yml脚本文件中可以使用 {{ }} 来使用变量

ansible-playbook使用总结_第1张图片

1注意:使用变量前需要在yml文件中先定此文件需要使用的变量

ansible-playbook使用总结_第2张图片

2注意:使用变量作为文件路径的时候不要有空格
ansible-playbook使用总结_第3张图片

**变量定义的位置: **

  • 1 /etc/ansible/hosts 文件中 在不同的主机后面
  • 2 单独的变量文件 使用vars_files:指定
  • 3 yml文件内部 使用vars:指定
  • 4 执行命令的时候 -e ‘var1=xx’ -e ‘var2=yy’ 或者 -e ‘var1=xxx 空格 var2=yyy’

假如yml配置文件中存在变量 {{var1}} {{var2}}

- name: write log1
  shell: chdir=/medcrab/tmp/ttcopy (echo $(date) >> {{var1}}.log)
- name: write log2
  shell: chdir=/medcrab/tmp/ttcopy (echo 4456 >> {{var2}}.log)

/etc/ansible/hosts文件配置变量

/etc/ansible/hosts配置的变量可以与服务器ip绑定,但是变量的优先级最低
ansible-playbook使用总结_第4张图片

**ansible-playbook t1.yml 命令执行以后 **

在这里插入图片描述

可以ansible根据/etc/ansible/hosts中不同的ip 使用了不同的配置

单独的变量文件

单独创建一个配置项变量key=value 的yml文件
在这里插入图片描述

在playbook剧本中使用vars_files: 指定变量文件 注意路径
ansible-playbook使用总结_第5张图片

**ansible-playbook t1.yml 命令执行以后 **
在这里插入图片描述

yml文件内部 使用vars:指定

例如在playbook yml文件内部使用vars: 指定变量
hosts: g2
remote_user: 
vars: 
  var1: jimliu # 配置的变量
  var2: xuting

执行命令的时候 -e

ansible-playbook -e ‘var1=cctv’ -e ‘var2=qtp’ t1.yml 运行的时候指定参数
ansible-playbook使用总结_第6张图片

**变量的优先顺序: -e > vars:=vars_files: >hosts **

你可能感兴趣的:(运维,ansible,linux,服务器)