• playbook的编写(一)


    playbook使用空格进行缩进,来表示数据结构,空格的数量没有严格要求

    play主要由三个键值组成: name  hosts  tasks

    name:自定义描述信息 (可以不写但要注意格式)

    hosts:指定在哪些主机上运行play

    tasks:定义该play要执行哪些任务

    简单的playbook格式如下:

    当一个playbook写完后不要急着执行:

    1 检测下语法是否正常

    # ansible-playbook --help | grep syntax

    # ansible-playbook --syntax-check  xxx.yml

    2 空运行(没有在控制主机上运行playbook)

    # ansible-playbook --help | grep check

    # ansible-playbook -C xxx.yml    -C  ==  --check

    3 执行playbook 

    # ansible-playbook xxx.yml 

    显示任务执行的过程和执行时所需的配置和清单文件

    # ansible-playbook xxxyml -vv    (会显示详细的信息,当执行playbook报错误时加上-vv查看详细进行判断)

    二 管理变量 %%

    命名变量:变量要以字母开头,包含字母数字下划线等

    定义变量: 

    1 全局范围:从命令行或ansible主配置文件中定义变量

    2 play范围:在playbook中定义变量

    3 主机范围:清单文件

    注:如果在多个级别定义了相同名称的变量,则采用优先级最高的变量

      清单定义的变量将被playbook定义的变量覆盖,后者将被命令行中定义的变量覆盖

    在playbook中定义变量 (playbook中定义变量都是:)

    方式一: 将变量放在playbook开头的vars块中

    - hosts: all
      vars:
        user: job
        home: /home/job

    方式二:使用外部文件中定义playbook变量vars_files

    - hosts: all
      vars_files:
        - vars/users.yml
    
    #在users.yml中已经定义的变量
    user: job
    home: /home/job

    在playbook中使用变量

    引用变量可将变量名在花括号"{{ }}"内,ansible会将变量替换为其值 

    vars:
        user: job
    tasks:
        - name: create the user {{ user }}
          user:
            name: "{{ user }}"

    清单中的变量 (清单中定义的变量都是= )

    # 定义demo.example.com的ansible_user主机变量
    demo.example.com  ansible_user=job
    demo.example.com  ansible_ssh_pass=Admin123
    
    # 定义servers 主机组的user组变量
    [servers]
    demo1.example.com
    demo2.example.com
    
    [servers:vars]
    user=job

    # 主机组嵌套引用变量
    [servers:children]
    production
    backup

    [servers:vars]
    ansible_user=job

    注: 以上写法不推荐,推荐用下面的写法

    使用目录填充主机或主机组变量

    host_vars

    group_vars

    创建 host_vars/${主机名}
    $ cat host_vars/demo1.example.com user: job package: httpd

    创建 host_vars/${组名}
    $ cat group_vars/backup
    user: natasha

    从命令行覆盖变量

    命令变量优先级最高 ---> playbook ---> 全局变量(ansible.cfg)

    使用注册变量捕获命令输出

    debug: 调试模块

      常用参数:

      msg: 调试输出消息

      var: 把变量值显示出来

    LAB:安装apache并配置好firewalld (用变量)

    ---
    - name: Deplay and start Apache HTTPD service
      hosts: webserver
      vars:
            web_pkg: httpd
            firewall_pkg: firewalld
            web_service: httpd
            firewall_service: firewalld
            rule: http
      tasks:
            - name: install packages
              yum:
                    name:
                        - "{{ web_pkg }}"
                        - "{{ firewall_pkg }}"
                    state: latest
            - name: start service httpd
              service:
                    name: "{{ web_service }}"
                    state: started
            - name: start service firewalld
              service:
                    name: "{{ firewall_service }}"
                    state: started
        - name: the firewall port for http is open 
          firewalld:
              service:
    "{{ rule }}"
              permanent: yes
              immediate: yes     #立即生效
              state: enabled

    service+loop 实现循环

    加密 解密 查看 变量文件(管理机密) %%

    创建加密文件

    ansible-vault 

    vault-pass 首先将密码写进去

    编辑现有的加密文件

    加密现有文件

    更改加密文件的密码

    解密 文件

    ansible 2.4之前:

    ansible-playbook --ask-vault-pass  package.yml

    ansible 2.4之后:

    ansible-playbook --vault-id @密码文件  package.yml

    注: 用于加密一些敏感信息如密码文件等,然后通过 变量调区文件中的内容

  • 相关阅读:
    python threading 无法并行问题
    flask
    jinjia2 模板不解析html
    docker 配置lnmp环境(mac环境下)
    docker基础
    django初体验
    Centos6.5 编译安装Mysql 5.5.3.7
    Mysql InnoDB事务
    删除GitHub上项目中的某个文件
    转 WPF MVVM 循序渐进 (从基础到高级)
  • 原文地址:https://www.cnblogs.com/leading-net/p/12908704.html
Copyright © 2020-2023  润新知