首页 > 解决方案 > 如何在 Ansible 任务中注册 python 变量

问题描述

我正在尝试从 python 脚本响应中提取变量,基本上我有一个执行 python 脚本的任务,我需要获取该响应的变量,这个 python 脚本解析一个 json 并将响应放在不同的变量中

((蟒蛇脚本)

import json


with open('dd.json') as f:
 data = json.load(f)




for item in data['service-nat-pool-information'][0]['sfw-per-service-set-nat-pool']:  
   ifname = [b['data'] for b in item['interface-name']]
   for q in item['service-nat-pool']:
    name = [a['data'] for a in q['pool-name']]
    rang = [n['data'] for n in q['pool-address-range-list'][0]['pool-address-range']] #linea agregada de stack
  # ports = item['pool-port-range'][0]['data']
  # use= item['pool-ports-in-use'][0]['data']
    block= [j['data'] for j in q['effective-port-blocks']]
    mblock= [m['data'] for m in q['effective-ports']]
    maxp =[d['data'] for d in q['port-block-efficiency']]
    print("|if-name",ifname,"|name:",name,"|ip-range:",rang,"|Effective-port-blocks:",block[0],"|Effective-port:",mblock[0],"|Port-Block-Efficiency:",maxp[0])

可靠的剧本

---
- name: Parse
  hosts: localhost
  connection: local
  vars:
      pool: "{{ lookup('file','/etc/ansible/playbook/dd.json') | from_json }}"

  tasks:

   - name: Execute Script
     command: python3.7 parsetry.py

我期望 ansible 中的任务可以获取 python 脚本中的变量并将它们存储在 ansible 变量中

标签: pythonjsonansible

解决方案


你必须使用register. 如果您修改脚本以输出 json,这可能会稍微简化您的工作。

- name: Execute Script
  command: python3.7 parsetry.py
  register: script_run

- name: Degug output
  debug:
    msg: "{{ script_run.stdout | from_json }}"

如果您想掌握 Python 的全部功能,您不妨考虑将脚本转换为自定义模块自定义过滤器(如果有意义的话)。


推荐阅读