我無法驗證遠程服務器上 json 檔案的值。我必須從模板(j2)在遠程機器上覆寫檔案一次。之后,我啟動了一個將附加值寫入此檔案的服務。但是重新啟動時ansible-playbook,該檔案會被覆寫,因為它與模板不同。在開始從模板寫入檔案的任務之前,我想檢查檔案的唯一值。
為了在本地機器上進行測驗,我這樣做并且一切正常:
- name: Check file
hosts: localhost
vars:
config: "{{ lookup('file','config.json') | from_json }}"
tasks:
- name: Check info
set_fact:
info: "{{ config.Settings.TimeStartUP }}"
- name: Print info
debug:
var: info
- name: Create directory
when: interfaces | length != 0
ansible.builtin.file:
...
但是當我嘗試在遠程機器上的任務中做同樣的事情時,由于某種原因,ansible 正在本地機器上尋找檔案
全部.yml
---
config_file: "{{ lookup('file','/opt/my_project/config.json') | from_json }}"
網站.yml
---
- name: Install My_project
hosts: server
tasks:
- name: Checking if a value exists
set_fact:
info: "{{ config_file.Settings.TimeStartUP }}"
- name: Print info
debug:
var: info
錯誤:
fatal: [server]: FAILED! => {"msg": "An unhandled exception occurred while templating '{{ lookup('file','/opt/my_project/config.json') | from_json }}'. Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /opt/my_project/config.json. could not locate file in lookup: /opt/my_project/config.json"}
請告訴我如何正確檢查遠程服務器上 JSON 檔案中的鍵值?
uj5u.com熱心網友回復:
首先從遠程主機獲取檔案。例如,給定以下用于測驗的檔案
shell> ssh admin@test_11 cat /tmp/config.json
{"Settings": {"TimeStartUP": "today"}}
shell> ssh admin@test_12 cat /tmp/config.json
{"Settings": {"TimeStartUP": "yesterday"}}
下面的劇本
- hosts: test_11,test_12
gather_facts: false
tasks:
- file:
state: directory
path: "{{ playbook_dir }}/configs"
delegate_to: localhost
run_once: true
- fetch:
src: /tmp/config.json
dest: "{{ playbook_dir }}/configs"
- include_vars:
file: "{{ config_path }}"
name: config
vars:
config_path: "{{ playbook_dir }}/configs/{{ inventory_hostname }}/tmp/config.json"
- debug:
var: config.Settings.TimeStartUP
將在控制器上的playbook_dir中創建目錄configs并將檔案從遠程主機獲取到該目錄中。有關如何創建路徑,請參閱引數dest
shell> cat configs/test_11/tmp/config.json
{"Settings": {"TimeStartUP": "today"}}
shell> cat configs/test_12/tmp/config.json
{"Settings": {"TimeStartUP": "yesterday"}}
然后include_vars并將字典存盤到變數config
ok: [test_11] =>
config.Settings.TimeStartUP: today
ok: [test_12] =>
config.Settings.TimeStartUP: yesterday
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/462070.html
