2017-09-13 97 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