Как получить динамическую переменную оболочки c с шаблонами Ansible playbook и jinja2 - PullRequest
1 голос
/ 16 февраля 2020

Мне нужно вызвать скрипт оболочки, который будет возвращать частный IP-адрес ec2 в задаче Ansible. Как только я получаю IP-адрес в переменной private_ip_var, я хочу добавить эту переменную в шаблон jinja2 для создания файла конфигурации.

Вот что я думаю:

- hosts: all
    vars:
    inline_variable: 'hello again'
    tasks:
    - name: Gets the IP of the ec2 instance 
    command: get_ec2_private_ip.sh   <----- shell script to dynamically get the ip of ec2
    register: private_ip_var`  <------ saving shell return value to this var

    tasks:
    - name: Inject that private_ip_var into the jinja template
        template:
        src: src=config.cfg.j2
        dest: config.cfg

config.cfg.j2

blah blah 
The ip of the ec2 is: {{ private_ip_var }}  <------------ THIS IS WHAT I WANT TO ACHIEVE
Variable given as inline - {{ inline_variable }}  <------------- DONT CARE ABOUT THIS VAR

вывод - config.cfg

------
blah blah
The ip of the ec2 is: 10-251-50-12  <----------------- THIS IS WHAT I WANT
Variable given as inline - hello again <---------------- DONT CARE ABOUT THIS VAR

Меня не волнует inline_variable выше; Я забочусь только о private_ip_var; Как я могу добиться этого с Ansible, чтобы я мог сгенерировать этот файл конфигурации из шаблона jinja2?

1 Ответ

0 голосов
/ 17 февраля 2020

Чтобы получить AWS EC2 информацию, вам необходимо установить на хосте (Linux) следующее:

  • boto3
  • botocore
  • Python> = 2,6

Затем используйте модуль ec2_instance_info. Вот пример:

ec2_instance_info:
instance_ids:
  - i-23456789

Затем вы можете фильтровать информацию по IP-адресу. Скорее всего, вас заинтересуют следующие параметры:

primary (true / false)

  • Указывает, является ли этот IPv4-адрес основным частным IP-адресом сетевого интерфейса.

Дополнительные примеры можно найти: https://docs.ansible.com/ansible/latest/modules/ec2_instance_info_module.html#examples

...