Изменение IP-адресов нескольких серверов

Плохой отступ и макет вашего скрипта запутывают вопрос, но основной ответ таков:

printf '%s|%s|%s|%s\n' "$(field1)" "$(field2)" "$(field3") "$(field4)"

Рефакторинг в это, и с очисткой отступов и т. д., ваш скрипт становится

#!/bin/bash

host(){
    hostname
}

protocol(){
    # avoid useless use of cat; get rid of unused parameter
    #... do you need sudo here too?
    grep Protocol /etc/ssh/sshd_config
}

rootlogin(){
    # straighten out massive spaghetti pretzel; remove unused parameter
    #... can you avoid sudo cat here?
    if sudo cat /etc/ssh/sshd_config |
        grep -v "#PermitRootLogin yes" |
        grep -i -q "PermitRootLogin yes"
    then
        # Fix quoting
        echo "$host"
    else
        echo "Root Access Denied"
    fi
 }

printf '%s|%s|%s|%s\n' "$1" "$(host)" "$(protocol)" "$(rootlogin)" >fonk.out    

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

Здесь больше не используется временный файл, но одним из антишаблонов в вашей попытке было создание временного файла в несвязанной функции. Когда вам действительно нужен временный файл, вероятно, было бы неплохо создать его отдельно, а затем использовать его как параметр везде. Нравится

tmp=$(mktemp) || exit
# arrange for temp file to be removed in case of errors or signals, too
trap 'rm -f "$tmp"' EXIT
trap 'exit' ERROR HUP QUIT TRAP TERM

function1 "$tmp"
function2 "$tmp"
: etc
0
24.06.2021, 16:14
1 ответ

Скажем, у нас есть serverA, serverBи serverCв нашем инвентаре. Им нужны новые IP-адреса.

Итак, первый шаг — создать файл в вашем каталоге host_varsс именем вашего сервера и записать в него новый IP-адрес в качестве переменной.

Пример с файломhost_vars/serverA:

new_ip: 10.1.0.27

Сделайте то же самое для serverBи serverCс соответствующими адресами. Вы также можете расширить это до имен сетевых интерфейсов, если это необходимо.

Затем создайте книгу воспроизведения, в которой используются ранее определенные переменные. Модуль ip, показанный в этой команде, не существует, здесь я только демонстрирую использование переменной. См. документацию Ansible , если есть модуль, соответствующий вашим потребностям, в противном случае используйте command/shell.

- name: Change IP
    hosts: serverA serverB serverC
    become: yes
    tasks:
      - name: Set new IP adress
        ip: "{{ new_ip }}"
        interface: eth0

Кроме того, будьте готовы к потере связи с ansible. Этот вопрос от SO показывает, как справиться с этим и сохранить соединение.

1
28.07.2021, 11:22

Теги

Похожие вопросы