Заменить значения в файле yml переменной Shell - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть файл config.yml, подобный этому:

INVOCATION_VARIABLES:
  deployTarget1:
    cpspgpoolc:
    - HA_PGPOOL_VIRTUAL_IP: 'vIP1'
      HA_PGPOOL_WATCHDOG_PORT: '5445'
      PCP_PORT: '5440'
      PGPOOL_PORT: '5441'
      POOL_NUMBER: '0'
    pgpoolc:
    - HA_PGPOOL_VIRTUAL_IP: 'vIP2'
      HA_PGPOOL_WATCHDOG_PORT: '5435'
      PCP_PORT: '5430'
      PGPOOL_PORT: '5431'
      POOL_NUMBER: '0'
  deployTarget2:
    cpspgpoolc:
    - HA_PGPOOL_VIRTUAL_IP: 'vIP1'
      HA_PGPOOL_WATCHDOG_PORT: '5445'
      PCP_PORT: '5440'
      PGPOOL_PORT: '5441'
      POOL_NUMBER: '1'
    pgpoolc:
    - HA_PGPOOL_VIRTUAL_IP: 'vIP2'
      HA_PGPOOL_WATCHDOG_PORT: '5435'
      PCP_PORT: '5430'
      PGPOOL_PORT: '5431'
      POOL_NUMBER: '1'
  deployTarget3:
    cpspgpoolc:
    - HA_PGPOOL_VIRTUAL_IP: 'vIP1'
      HA_PGPOOL_WATCHDOG_PORT: '5445'
      PCP_PORT: '5440'
      PGPOOL_PORT: '5441'
      POOL_NUMBER: '2'
    pgpoolc:
    - HA_PGPOOL_VIRTUAL_IP: 'vIP2'
      HA_PGPOOL_WATCHDOG_PORT: '5435'
      PCP_PORT: '5430'
      PGPOOL_PORT: '5431'
      POOL_NUMBER: '2'

Я создал сценарий оболочки, который даст мне значения virtualIP1 = '10 .104.84.221 'и virtualIP2 = '10 .104.94.2' , Как я могу заставить сценарий оболочки заменить все значения vIP1 на virtualIP1 и vIP2 на virtualIP2 в сценарии оболочки?

Ответы [ 3 ]

1 голос
/ 11 февраля 2020

Если yq - ваш выбор, попробуйте следующее:

export virtualIP1='10.104.84.221'
export virtualIP2='10.104.94.2'

yq -y < config.yml '(.. | select(.HA_PGPOOL_VIRTUAL_IP? == "vIP1") | .HA_PGPOOL_VIRTUAL_IP) |= env.virtualIP1 | (.. | select(.HA_PGPOOL_VIRTUAL_IP? == "vIP2") | .HA_PGPOOL_VIRTUAL_IP) |= env.virtualIP2'
0 голосов
/ 11 февраля 2020

Вы можете попробовать это:

sed -e 's/vIP1/10.104.84.221/' -e 's/vIP2/10.104.94.2/' config.yml
0 голосов
/ 11 февраля 2020
  1. Инициализация virtualIP1 и virtualIP2

    virtualIP1='10.104.84.221'

    virtualIP2='10.104.94.2'

  2. Запустите ниже, чтобы увидеть, если вы получаете желаемый вывод:

    sed -e "s/vIP1/$virtualIP1/g" filename

    sed -e "s/vIP2/$virtualIP2/g" filename

  3. Если выше дает желаемый вывод, то выполните sed с i вместо опции e, желательно хранить резервную копию старого файла.

    sed -i.bak "s/vIP1/$virtualIP1/g" filename

    sed -i.bak "s/vIP2/$virtualIP2/g" filename

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...