从Py脚本传递变量到Ansible

问题描述 投票:0回答:1

我无法传递变量ansible

这是我的python脚本

import csv
import json
data=
file = 'splunkapps.csv'
json_file = 'output_file_name.json'

def read_CSV(file, json_file):
    csv_rows = []
    with open(file) as csvfile:
        reader = csv.DictReader(csvfile)
        field = reader.fieldnames
        for row in reader:
            csv_rows.extend([{field[i]:row[field[i]] for i in range(len(field))}])
        convert_write_json(csv_rows, json_file)

def convert_write_json(data, json_file):
    with open(json_file, "w") as f:
        f.write(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': '))) 

read_CSV(file,json_file)
with open('output_file_name.json') as json_file:
    data = json.load(json_file)
    for p in data:
        print('AppName: ' + p['AppName'])
        print('Host: ' + p['Host'])
        print('SealID: ' + p['SealID'])
        print('')

我的Ansible脚本是

Yaml文件:

---
- name: Onboard app
  hosts: localhost
  gather_facts: false
  tasks:
  - name:
    script: spl.py
    register: result
  - debug:
      msg: "{{ result.stdout_lines }}"
    with_items: "{{ modules }}"

  - name: print user name and password
    shell: |
      echo {{ modules['AppName'] }}
      echo {{ modules['Host'] }}

我必须使用2.3版本的ansible,目前我正在使用2.7版本的py

python json python-2.7 variables ansible
1个回答
0
投票

Q:“从Py脚本传递变量到Ansible”

A:可以使用lookup,pipe,from_yaml并将脚本的输出分配给变量。例如带有脚本

$ cat my_script
#!/bin/sh
printf 'AppName: my_AppName\n'
printf 'Host: my_Host\n'
printf 'SealID: my_SealID\n'

剧本

- hosts: localhost
  vars:
    my_var: "{{ lookup('pipe', 'my_script')|from_yaml }}"
  tasks:
    - debug:
        var: my_var
    - debug:
        msg: "AppName [{{ my_var.AppName }}]"

给予

ok: [localhost] => 
  my_var:
    AppName: my_AppName
    Host: my_Host
    SealID: my_SealID

ok: [localhost] => 
  msg: AppName [my_AppName]

注意

没有变量modules。这可能是错误

  - debug:
      msg: "{{ result.stdout_lines }}"
    with_items: "{{ modules }}"

注册的输出应该简单地打印

  - debug:
      msg: "{{ result.stdout_lines }}"
© www.soinside.com 2019 - 2024. All rights reserved.