Взаимодействие между XML-файлом и скриптом python в Ansible

#python #linux #ansible #rhel7

#python #linux #ansible #rhel7

Вопрос:

В настоящее время у меня есть playbook, который создает файл .xml и скрипт python, который принимает файл .xml и обрабатывает его. Я намерен использовать шаблоны use j2 для создания файла в форме {{ ansible_date_time.iso8601_basic_short }}.xml, чтобы я мог отслеживать новые файлы. Однако прямо сейчас playbook действительно статичен, поскольку путь жестко закодирован в команде оболочки и скрипте python.

Есть предложения?

 ---
- name: testing
  hosts: localhost
  tasks:
    - name: execute some shell command that produces an xml output file in current dir
      shell: XXX

    - name: Takes in xml output file produced earlier and passes into script.py 
      script: python_script.py
  

Комментарии:

1. В чем именно заключается ваш вопрос?

2. Как мне 1) сохранить выходной файл xml из команды командной оболочки для использования скриптом python 2) передать сохраненный вывод (если возможно) в скрипт python

3. Пожалуйста, не распространяйте необходимую информацию для ответа на ваш вопрос в комментариях, вместо этого отредактируйте свой вопрос.

4. используйте chdir arg для оболочки, чтобы ваша команда выполнялась в указанном каталоге и там создавался ваш файл xmll. Отредактируйте свой скрипт python, чтобы он мог принимать аргумент для указания пути к файлу xml в целевом файле.

5. если я понимаю, что вы говорите (надеюсь, я понял это правильно), это требует жесткого кодирования пути, верно? в сценарии — попытка избежать этого, если это возможно

Ответ №1:

Если я понимаю, о чем вы спрашиваете, почему бы не использовать сценарий оболочки, который печатает в стандартном выводе содержимое XML, чтобы вы могли зарегистрировать его в переменной и использовать его после с помощью variable.stdout ? Нравится:

 - name: generate xml
  shell:
    echo '<xml></xml>'
  register: myxml

- name: create xml file
  copy:
    content: "{{ myxml.stdout }}"
    dest: "{{ ansible_date_time.iso8601_basic_short }}.xml"
  

Комментарии:

1. Привет, спасибо за ваш ответ. Я забыл указать, команда оболочки создает XML-файл с помощью указанного флага, а стандартный вывод имеет формат, который отличается от того, что мне нужно.

2. Хорошо, но как насчет «cat» сразу после генерации XML в оболочке?

3. команда оболочки может создавать только XML-файл, а не вывод XML. Без указания флага я получаю другую форму вывода

4. И это нормально, но если вы позволите своей команде создать XML (поместив все выходные данные в /dev / null) и после этого вы запустите созданный XML, разве вы не в порядке?