Принимая значение регистра и используя его позже как переменную

Я хочу сделать динамическое присвоенное ip vm постоянному, добавив его в файл ifcfg-eth0, у которого возникли проблемы с использованием register: eth0 значение register: eth0 которое является фактическим IP-адресом и помещает его в последнюю line: "IPADDR=register.stdout"

 --- - hosts: all become: yes tasks: - name: getting ip address of eth0 shell: ip rl | grep -e eth0 | grep default | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" register: eth0 - shell: rm -f /etc/sysconfig/network-scripts/ifcfg-eth0 - file: path="/etc/sysconfig/network-scripts/ifcfg-eth0" state=touch - blockinfile: dest: "/etc/sysconfig/network-scripts/ifcfg-eth0" block: | DEVICE=eth0 BOOTPROTO=static ONBOOT=yes USERCTL=no TYPE=Ethernet IPADDR= NETMASK=255.255.255.0 GATEWAY= - name: adding ip in ifcfg-eth0 lineinfile: dest: "/etc/sysconfig/network-scripts/ifcfg-eth0" regexp: "IPADDR=" line: "IPADDR=register.stdout" 

ошибка:

  • Ansible failed_when только распечатать настроенное сообщение об ошибке
  • Как я могу зарегистрировать динамически названную переменную в задаче Ansible?
  • Ansible - настройка экземпляра AWS EC2 после его создания
  • Могу ли я просматривать задачи, которые будут выполняться с помощью загружаемой книги?
  • Как игнорировать определенную строку ошибки вывода в Ansible и считать успешным
  • Необязательная задача: создает проблему с параметром
  •  [tempuser@testing ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 # BEGIN ANSIBLE MANAGED BLOCK DEVICE=eth0 BOOTPROTO=static ONBOOT=yes USERCTL=no TYPE=Ethernet IPADDR=register.stdout NETMASK=255.255.255.0 GATEWAY= # END ANSIBLE MANAGED BLOCK[tempuser@testing ~]$ 

  • Как я могу зарегистрировать динамически названную переменную в задаче Ansible?
  • Могу ли я просматривать задачи, которые будут выполняться с помощью загружаемой книги?
  • В Ansible динамической инвентаризации JSON я могу «рендерить» hostvars на основе имени хоста?
  • Ожидаемые возобновляемые пьесы ?
  • Список ВСЕХ Ansible переменных для хоста или группы с помощью специальной команды?
  • Невозможно использовать имя_ инвентаря__охотника или ansible_hostname в имени задачи
  • One Solution collect form web for “Принимая значение регистра и используя его позже как переменную”

    Вы обращаетесь к переменной register eth0, пытаясь использовать имя «регистр», которого не существует.

    Когда вы регистрируете переменную в недоступном, вы также указываете имя переменной, которую хотите зарегистрировать, как – в вашем случае eth0:

     register: eth0 

    Поэтому, чтобы получить доступ к нему позже, вам нужно будет использовать имя eth0 следующим образом:

     IPADDR={{ eth0.stdout }} 

    Теперь, если вы разрешите мне решить то, что, по моему мнению, является вашей XY-проблемой – вместо использования grep для анализа ip-адреса вашего интерфейса, почему бы не попробовать использовать факты? Если вы знаете имя интерфейса на хосте, вы можете просто сделать что-то вроде этого:

     IPADDR={{ ansible_eth0.ipv4.address }} 

    Если, с другой стороны, вы не знаете имя интерфейса (или они разные на всех ваших хостах), но вы знаете, что каждый хост имеет только один жизнеспособный интерфейс, тогда вы можете использовать что-то вроде следующего:

     IPADDR={{ ansible_default_ipv4.address }} 

    Чтобы увидеть все факты, которые могут возникнуть в системе, используйте следующую команду:

     ansible <hosts> -m setup 
    Linux и Unix - лучшая ОС в мире.