Автоматизировать отправку вывода команды в подсказку

У меня есть скрипт, который читает текстовый файл, в котором перечислены все узлы:

node1
node2
node3
.
.
.

Это мой сценарий:

#!/bin/bash

while read f; do
   ssh-copy-id myusername@"$f"
   ssh [email protected]
   icinga2 pki ticket --cn '$f' 
done < linux-list.txt

while read f; do
   ssh myusername@"$f" '
        yum install -y epel-release
        wget --no-check-certificate https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm
        yum install icinga-rpm-release-7-1.el7.centos.noarch.rpm
        yum install -y icinga2  nagios-plugins-all
        chown -R icinga:icinga /etc/icinga2  /var/lib/icinga2 /var/log/icinga2' </dev/null
   ssh [email protected] icinga2 pki ticket --cn "$f" |
   ssh myusername@"$f" 'cat >/tmp/pkicode'
   scp ./zones.conf myusername@"$f":/etc/icinga2/zones.conf
done < linux-list.txt

1) Сценарий должен войти в мастер Icinga и выполнить команду icinga2 pki ticket --cn '$f' для каждого узла, найденного в этом файле linux-list.txt, и сгенерировать билет для каждого хоста.

2) Затем отправляет этот сгенерированный код каждому узлу ($f)

После выполнения всех вышеперечисленных команд сценарий должен запустить мастер узла команды icinga2, который запустит подсказку вопроса/ответа и потребует, чтобы кто-то ввел ответ, как показано ниже.

Полное доменное имя мастера Icinga — master.icinga.test.com, а его IP — 10.20.20.1. Билет PKI — это то, что мы сгенерировали ранее на мастере Icinga, и оно отличается для каждого хоста.

Есть ли способ автоматизировать это?

Y
Enter
master.icinga.test.com
Y
10.20.20.1
N
Y
[PKI Ticket created earlier on the Icinga master]
Enter
Enter
Y
Y
Enter
Enter
N
N

Спасибо


person Irina I    schedule 26.07.2018    source источник
comment
Волшебники предназначены для людей, а не для компьютеров. Проверьте, поддерживает ли ваш инструмент интерфейс с поддержкой сценариев.   -  person that other guy    schedule 26.07.2018
comment
icinga.com/docs/icinga2 /latest/doc/11-cli-commands/ смутно предполагает, что вы должны использовать node setup вместо node wizard в сценариях.   -  person tripleee    schedule 27.07.2018
comment
'$f' в одинарных кавычках просто создает литеральную строку $f. Чтобы интерполировать значение переменной f, используйте двойные кавычки. Но эта команда все равно не должна быть в первом цикле; у вас это смутно правильно во втором цикле уже.   -  person tripleee    schedule 27.07.2018
comment
Если вы выполняете обе операции в одном и том же скрипте, в любом случае нет необходимости в двух циклах; просто переместите ssh-copy-id в начало второго цикла и избавьтесь от первого. Причина, по которой я предложил делать их отдельно, заключается в том, чтобы иметь возможность запускать части, которые не требуют взаимодействия с пользователем, без присмотра, параллельно, из другого скрипта и т. д.   -  person tripleee    schedule 27.07.2018
comment
(Для справки, предыдущий вопрос в этой саге: stackoverflow.com/questions/51525313/)   -  person tripleee    schedule 27.07.2018
comment
@tripleee Спасибо за совет. Как демон icinga2 получит тот билет pki, который мы сгенерировали на сервере?   -  person Irina I    schedule 27.07.2018
comment
icinga.com/docs/icinga2 /latest/doc/06-distributed-monitoring/ содержит конкретный пример icinga2 node setup --ticket ead2d570e18c78abf285d6b85524970a0f69c22d --cn icinga2-client1.localdomain --endpoint icinga2-master1.localdomain --zone icinga2-client1.localdomain --parent_zone master --parent_host icinga2-master1.localdomain --trustedcert /var/lib/icinga2/certs/trusted-parent.crt --accept-commands --accept-config --disable-confd   -  person tripleee    schedule 27.07.2018
comment
Если чтение документации не является вашей сильной стороной, опять же, возможно, публикация отдельного вопроса только об этой конкретной проблеме может быть лучшим использованием как вашего, так и моего времени.   -  person tripleee    schedule 27.07.2018
comment
@tripleee, конечно, я создал отдельный вопрос: stackoverflow.com/questions/51564830/ Большое спасибо за вашу помощь   -  person Irina I    schedule 27.07.2018


Ответы (1)


в будущем попробуйте создать минимальный, полный и проверяемый пример, потому что он слишком длинный для чтения.

Однако похоже, что вы просто хотите передать серию входных данных в подсказку. Вы можете сделать это с помощью heredoc, вот так

PKI="some text whatever ticket thing blahblahblah"
somecmd << EOF
Y
Enter
master.icinga.test.com
Y
10.20.20.1
N
Y
$PKI
Enter
Enter
Y
Y
Enter
Enter
N
N
EOF

heredocs может расширять переменные. Круто.

person jeremysprofile    schedule 26.07.2018
comment
Спасибо, так что я должен создать файл (т. е. answer.txt), а затем вызвать его после команды 'icinga2 pki ticket --cn '$f''? Не могли бы вы рассказать об этом подробнее, пожалуйста? Спасибо - person Irina I; 26.07.2018
comment
Нет, это полный ответ. Возможно, погуглите здесь документ. - person tripleee; 26.07.2018
comment
@IrinaI, см. комментарий Tripleee - person jeremysprofile; 27.07.2018
comment
По какой-то причине мой предыдущий комментарий не отображается, куда я могу добавить heredoc? Я гуглю, но до сих пор не понимаю, как цикл while и установка icinga будут связаны с heredoc. - person Irina I; 27.07.2018