zoukankan      html  css  js  c++  java
  • ansible 变量详解

    定义变量的方法

    1、 主机变量,在hosts文件中设置变量,

    [atlanta]
    host1 http_port=80 maxRequestsPerChild=808
    host2 http_port=303 maxRequestsPerChild=909

    2、组变量,

    [atlanta]
    host1
    host2
    
    [atlanta:vars]
    ntp_server=ntp.atlanta.example.com
    proxy=proxy.atlanta.example.com

    3、playbook中定义变量

    - hosts: webservers
      vars:
        http_port: 80

    4、 Facts 远程获取系统相关变量, 可以在playbook中添加  

    gather_facts: no

    来关闭Facts,这样可以提高ansible的运行效率

    5、远程机器上设置facts目录获取变量

    如果远程受管理的机器有一个 “/etc/ansible/facts.d” 目录,那么在该目录中任何以 ”.fact”结尾的文件都可以在Ansible中提供局部facts.这些文件可以是JSON,INI或者任何可以返回JSON的可执行文件.

    例如建设有一个 /etc/ansible/facts.d/perferences.fact文件:

    [general]
    asdf=1
    bar=2

    这将产生一个名为 “general” 的哈希表fact,里面成员有 ‘asdf’ 和 ‘bar’. 可以这样验证:

    ansible <hostname> -m setup -a "filter=ansible_local"
    结果为:
    "ansible_local": {
            "preferences": {
                "general": {
                    "asdf" : "1",
                    "bar"  : "2"
                }
            }
     }

    而且也可以在template或palybook中访问该数据:

    {{ ansible_local.preferences.general.asdf }}

    6、使用运行结果得到变量

    - hosts: web_servers
      tasks:
         - shell: /usr/bin/foo
           register: foo_result
           ignore_errors: True
    
         - shell: /usr/bin/bar
           when: foo_result.rc == 5

    6、使用文件转递变量

    把playbook置于源代码管理之下是个很好的注意,当你可能会想把playbook源码公开之余还想保持某些重要的变量私有.有时你也想把某些信息放置在不同的文件中,远离主playbook文件.

    - hosts: all
      remote_user: root
      vars:
        favcolor: blue
      vars_files:
        - /vars/external_vars.yml
      tasks:
      - name: this is just a placeholder
        command: /bin/echo foo

    7、命令行中传递变量

    ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
    或者使用json
    --extra-vars '{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'

    8、访问其他主机信息

    Ansible会自动提供给你一些变量,即使你并没有定义过它们.这些变量中重要的有 ‘hostvars’,’group_names’,和 ‘groups’.由于这些变量名是预留的,所以用户不应当覆盖它们. ‘environmen’ 也是预留的. hostvars可以让你访问其它主机的变量,包括哪些主机中获取到的facts.如果你还没有在当前playbook或者一组playbook的任何play中访问那个主机,那么你可以获取变量,但无法看到facts值. 如果数据库服务器想使用另一个节点的某个 ‘fact’ 值,或者赋值给该节点的一个inventory变量.可以在一个模板中甚至命令行中轻松实现:

    {{ hostvars['test.example.com']['ansible_distribution'] }}

    另外, group_names 是当前主机所在所有群组的列表(数组).所以可以使用Jinja2语法在模板中根据该主机所在群组关系(或角色)来产生变化:

    {% if 'webserver' in group_names %}
       # some part of a configuration file that only applies to webservers
    {% endif %}
  • 相关阅读:
    架构中那些需要注意的事儿
    谈谈测试环境管理与实践
    响应式布局
    flex布局
    crontab定时任务
    SpringMVC Json自定义序列化和反序列化
    Tensorflow 使用TPU训练
    使用Selenium从IEEE与谷歌学术批量爬取BibTex文献引用
    Pyecharts——Python高级可视化
    Python图像处理库——PIL
  • 原文地址:https://www.cnblogs.com/zhengyionline/p/10437355.html
Copyright © 2011-2022 走看看