zoukankan      html  css  js  c++  java
  • ansible playbook 变量

    变量优先级

    • 在命令中定义的变量(-e参数指定的)
    • 在inventory中定义的变量(ansible_ssh_user等)
    • 其他变量(role中、play中)
    • 系统通过father_facts定义的变量

    playbook中引入变量尽量使用vars_files方式

    尽少量的在inventory中使用变量

    尽量避免在命令行中使用-e选项来定义变量

    ansible-hoc

    在执行ansible命令时,ansible默认会从/etc/ansible/host_vars/etc/ansible/group_vars目录读取变量定义,如果这两个目录不存在,可手动创建,并且可以创建与hosts文件中定义的组名同名或host名的文件来定义变量

    例:给hosts文件内test组主机定义变量

    cat /etc/ansible/group_vars/test    #同host_vars变量
    
    ---
    foo: foox
    baz: bax

    cat /etc/ansible/host_vars/host1      #此处为host1文件名,ansible-playbook执行时变量只会作用于host1主机,并且会覆盖playbook和role中所有的同名变量
    ---
    user: user

    如果想从一台主机获取另一台主机的变量信息,可通过hostvars获取

    //获取host1主机user变量信息
    
    {{ hostvars['host1']['user'] }}
    
    
    ansible 常用内置变量
    
    groups        #包含所有hosts文件里主机组的一个列表
    
    group_names    #包含当前主机所在的所有主机组名的一个列表
    
    inventory_hostname    #通过Hosts文件定义主机的主机名
    
    inventory_hostname_short    #变量inventory_hostname的第一部分,如www.baidu.com  这个变量的值为www
    
    play_hosts                #将执行当前任务的所有主机

    ansible-playbook

    在playbook文件内通过vars字段定义变量

     

    在playbook文件内使用var_files 引用变量

     

    使用register内的变量

    使用注册器来接受shell命令的返回结果,结果中包含标准输出(stdout)和错误输出(stderr),通常会包含4中类型结果

    changed        #任务是否对远程主机造成变更
    delta:           #任务运行所用的时间
    stdout:            #正常的输出信息
    stderr:            #错误信息

    示例①

     - name: 获取正在运行的app列表
        command: forever list
        register: forever_list      #将结果传给forever_list
      
      - name: 启动node.js
        command: "forever start {{ node_apps_location }}/app/app.js"
        when: "forever_list.stdout.find('{{ node_apps_location  }}/app/app.js') == -1" 

    示例②

     

    Facts信息

    通过setup获取目标主机的内置变量(cpu ip 磁盘 内存、操作系统等信息)

    ansible group -m setup 引用的时候以“.”作为上下级目录的取值符号

    示例:python 列表取值方式

    ansible_eth0.ipv4.address
    ansible_eth0['ipv4']['address']

    执行playbook时跳过gather_facts

    ---
    
    - hosts: db
      gather_facts: no

    配置本地Facts变量

    可以将需要定义的变量写到一个以.fact结尾的文件中。放到/etc/ansible/facts.d目录,ansible在执行任务的时候会自动到这个文件夹下读取变量信息
    
    /etc/ansible/facts/facts.d/settings.fact
    
    [users]
    admin=test,test1
    normal=tim
    
    //获取变量
    ansible hostname -m setup -a "filter=ansible_local"

    //ansible-playbook中应用
    - name: 获取本地facts
    setup: filter=ansible_local

    加密敏感数据

    api_key.yml
    
    ---
    my_key: "eqrwEQWREREWQrqeadsfaewerweQweeqwrdfsewqrqewEQWqewr"
    
    
    加密:
    
    ansible=valut encrypt api_key.yml
    
    按提示输入密码

    ansible-playbook 通过参数传入变量

  • 相关阅读:
    python流行的原因
    shell rename directory
    shell if [ -d filename]
    eclipse文本编码格式修改为UTF-8
    egrep 第几列开始
    Java double 精度
    BigDecimal 两种方式
    使用SecureCRT连接ubuntu
    eclipse快速查找一个变量、方法或者类被引用的地方
    我的互联网金融行业经验总结
  • 原文地址:https://www.cnblogs.com/FRESHMANS/p/8422627.html
Copyright © 2011-2022 走看看