Ansible自动化部署

资料来源:https://docs.ansible.com/ansible/latest/user_guide/

Inventory清单文件

在/etc/ansible/ansible.cfg中,默认inventory= /etc/ansible/hosts。该文件用于定义将要管理的主机(组)。

1.定义清单主机变量

在对应主机后面,提供key=value 形式语句,可以向不同主机传递不同变量值。格式如下:

[webserver]
172.16.1.10 ansible_ssh_user=root inventory_host_var="Host_vars"
172.16.1.20 ansible_ssh_user=root

2.定义清单组变量

组变量,可以向该组内所有主机传递相同变量,可与主机变量同时被定义。格式如下:

[webserver:vars]
inventory_group_var="var_value"

3.ansible-playbook命令传入变量

cat var.json        
- {"key": "json"}   
cat var.yaml     
- key: yaml

-e "name=duanyifei"    # 传入系统facts变量
--extra-vars=EXTRA_VARS- -e "@var.json" / "@var.yaml"    # 传入外部文件变量

playbook文件

定义变量

hosts: <hostname or groupname>
  vars:                       #playbook中定义变量的关键字
   playbook_var: var_value
  vars_files:                  #使用变量文件
   - filename.yml 
  tasks:
  - name: Copy Jinja2 file to remote host
    template: src=/home/aheahe/var_tu.j2 dest=/root/var.conf

变量循环

tasks:
- name: <Step_Name>
  <parent_tag>:
      <tag>: "{{item_name}}"    # item_name可直接是item变量,也可以是item变量的属性值
  with_items: "{{item_values}}"    # item_values是item变量的值列表,通过item变量和with_items关键字实现循环
  # 或者
  <parent_tag>: <tag>={{item_name}}
  with_items: [ val1, val2, ..., valN ]

Setup系统变量

1.创建并查看系统变量文件/etc/ansible/facts.d/

root@qa95 ansible]# cat facts.d/local.fact 
[general]
abc=aihe
def="Local facts"

2.验证系统变量是否生效

ansible <hostname> -m setup -a "filter=ansible_local"

3.系统变量生效后可以在template/playbook中使用

{{ ansible_local.local.general.abc}}

架构

角色:roles 
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等; 
role_name/ 
files/:存储由copy或script等模块调用的文件; 
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用; 
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用; 
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用; 
templates/:存储由template模块调用的模板文本; 
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用; 
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

猜你喜欢

转载自blog.csdn.net/u010378984/article/details/82733705