Пользовательская синхронизация

concat () (
    IFS=''
    printf '%s\n' "$*"
)

Эта функция использует"$*"(двойные кавычки важны ),который будет расширяться до одной строки со значениями позиционных параметров (аргументов ), объединенных со значением первого символа $IFSв качестве разделителя.

Мы устанавливаем IFSна пустую строку, что означает, что "$*"будет расширяться на все аргументы, объединенные без разделителя.

Также обратите внимание, что мы защищаем остальную часть сценария оболочки от принятия измененного значения $IFS, заключая его в подоболочку (... )вместо обычного {... }.

Вызов этой функции в другой функции может выглядеть как

other_func () {
    printf '%s\n' "$( concat "$@" )"
}

или короче, без фактического вызова функции concat:

other_func () {
    ( IFS=''; printf '%s\n' "$*" )
}

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

printf '%s\n' "$*" | tr -d ' '

например,

concat_delete_sp () {
    printf '%s\n' "$*" | tr -d ' '
}

Тестирование:

$ concat 1 2 3 "h h h" o o o
123h h hooo
$ concat_delete_sp 1 2 3 "h h h" o o o
123hhhooo
0
10.07.2020, 12:49
1 ответ

Одним из вариантов является настройка Ansible[1] для синхронизации этих файлов между главным и узлами . В последнее время я изучаю Ansible , поэтому я просто применяю то, чему научился.

Скажем, у вас есть мастер и узел _1 ... узел _n и мастер имеет последнюю версию файлы.

Конечно, вам потребуется установить Ansible на ваш мастер , а также иметь возможность подключаться к узлам по ssh через мастер .

Сначала создайте файл hosts, например ansible _hosts вот так :[используя многоточие, чтобы обозначить, что вы можете добавить столько узлов, сколько хотите, и используйте свои собственные имена хостов]

[sync_nodes]
node_1.example.local
node_2.example.local
...

Затем создайте файл с именем, например sync _pw.yml , например:

---
 - hosts: sync_nodes
   tasks:
     - name: Copy file from master to {{ item }}
       include_tasks: copy_tasks.yml
       with_items:
         - "{{ groups['sync_nodes'] }}"

Затем в копии _tasks.yml:

---
 - name: Copy /etc/passwd
   copy: src=/etc/passwd dest=/etc/passwd

 - name: Copy /etc/passwd
   copy: src=/etc/group dest=/etc/groups

, затем в командной строке:

  ansible-playbook -i ansible_hosts./sync_pw.yml

Принять к сведению:

  1. Вам нужны разрешения sudo на всех узлах. [получил бит из-за ошибки MODULE FAILURE]
  2. Python должен существовать на удаленном компьютере.

[1] -https://www.ansible.com/community

0
18.03.2021, 23:20

Теги

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