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

Я хочу сделать динамическое присвоенное 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" 

ошибка:

 [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 ~]$ 

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 
  • Необходимая помощь
  • Ansible failed_when только распечатать настроенное сообщение об ошибке
  • Ожидаемые возобновляемые пьесы ?
  • Ansible - настройка экземпляра AWS EC2 после его создания
  • Blockinfile не работает в недоступном
  • В Ansible динамической инвентаризации JSON я могу «рендерить» hostvars на основе имени хоста?
  • Interesting Posts

    Заменить текст с помощью sed и сохранить часть исходного текста

    Дефект сегментации Debian

    Как установить часовой пояс КНТ без дневного периода?

    Являются ли устройства с ядрами ниже 3.6 уязвимыми для CVE-2016-5696?

    Как вы можете запретить Linux рисовать программу Java?

    Как убедиться, что основной / внешний IP-адрес не зависит от типа / имени сетевого устройства

    Как заменить несколько пустых строк на определенную непустую строку?

    Есть ли способ, которым я мог бы выполнять файлы удаленно с файлами, содержащими include?

    Как открыть каталог и сохранить код в нем Gerris в Linux?

    Прослушивание устройства крана для пакетов, написанных через дескриптор файла

    Как определить временные ограничения для группы пользователей за сеанс

    Как сделать vim apply / var / log / messages подсветкой синтаксиса для любого файла, называемого «сообщениями» или «сообщениями»?

    Получить возвращаемое значение процесса с помощью PID

    Можно ли моделировать «внешний доступ» с Linux-машины при разработке?

    Команда Bash для закрытия всех отдельных запущенных программ с помощью экрана GNU?

    Linux и Unix - лучшая ОС в мире.