2017-09-13 61 views
-1

我是一个新手,我正在编写一个小型手册,它必须从目标主机收集事实值,并将其用作播放中的变量。有人可以帮助我如何做到这一点。ansible为变量分配一个事实值

--- 
- hosts: all 
    gather_facts: True 
    become: true 
    become_method: sudo 
    become_user: root 
    vars: 
    BUILD_PATH: /opt/services/dev 


    pre_tasks: 
    - setup: 
     filter: ansible_env 
    - set_fact: 
     tag: "{{ ansible_env.DATA_AGGREGATOR_ENV }}" 
    - debug: var=ENV 

    tasks: 
    - name: Copy to Build to DATA 
     shell: cp -pr {{ BUILD_PATH }} {{ ENV }} 

注:DATA_AGGREGATOR_ENV是在所有的服务器中定义的环境变量和值而变化从一个服务器到另一个。

+0

问题是什么? –

+0

您可以直接使用由设置任务 – papey

+0

创建的var,因为@papey表示您可以直接在剧本中使用事实,只需“{{ansible_env.DATA_AGG_ENV}}”当然“gather_facts”应该为true,这是默认的 – itiic

回答

0

您设置变量tag,但您使用变量ENV

如果要使用ENV变量,则必须设置ENV变量。

- set_fact: 
    ENV: "{{ ansible_env.DATA_AGG_ENV }}" 

或者你必须使用tag变量,如果你已经设置了tag变量。

shell: cp -pr {{ BUILD_PATH }} {{ tag }} 

BTW:在filter线缺乏空间。

+0

感谢您的回复我试图与上述变化,我得到这个错误失败“失败=> {!”“:真正的‘味精’:”外地‘ARGS’的值无效,这似乎包含一个变量,是不确定的。错误是:“字典对象”没有属性“DATA_AGGREGATOR_ENV” \ n \ n错误似乎一直在“/u1/jenkins/workspace/Deploy_DAGG_Services/ecom-deploy/test.yml”:线15,第6列,但\ n \ n此错误行似乎是:\ n \ n filter:ansible_env \ n - set_fact:\ n^here \ n“}” – suru1432002

+0

DATA_AGGREGATOR_ENV!= DATA_AGG_ENV – ceving

+0

巨峰遗憾实际环境变量是DATA_AGGREGATOR_ENV。这是完整的输出。的ansible_env “ ”ansible_facts“:{ ”ansible_env“:{ ”DAGG_HOME“: ”/选择/服务的/ dev/ECOM-数据聚合器“, ”DATA_AGGREGATOR_ENV“: ”舞台“, ”DPS_ENV“:” 舞台“, ”PWD“:”/ home/ansible“, ”SHELL“:”/ bin/bash“, ”TERM“:”xterm-256color“, ”USER“:”ansible“, ”_“ :“/ bin/sh” } }, “changed”:false }“ – suru1432002