Создайте несколько каталогов в ansible, передав список папок в качестве аргумента - PullRequest
2 голосов
/ 20 июня 2020

ЦЕЛЬ: иметь возможность создавать каталоги, передавая список в качестве аргумента в ansible

  • Я могу сделать это при запуске playbook на localhost
  • Однако, но когда я запускаю его на удаленном хосте, он терпит неудачу, поскольку lookup происходит на моем компьютере, а не на удаленном компьютере.
  • Я хочу иметь возможность создавать каталоги, передавая список var_list_dirs, который я могу установлен в playbook. Таким образом, мои роли не нужно менять, независимо от того, сколько плейбуков хотят создать каталоги.

Любая помощь приветствуется.

playbook-create-directory.yaml

################ SAMPLE USAGE #################################################################################
#         ansible-playbook playbook-create-directory.yaml --tags="set-user,create-dir"
###############################################################################################################

- name: create directory
  hosts: gcp
  become: true
  vars:
### CREATE USERS
    var_user: "test"
    var_group: "test"
### CREATE DIRECTORIES
    var_context: "test"
    var_mount_path: "/data"
    context: "{{ var_context }}"
    var_context_opt_dir: "/opt/{{ context }}"
    var_context_config_dir: "{{ var_context_opt_dir }}/config"
    var_context_log_dir: "{{ var_mount_path }}/log/{{ context }}"
    var_context_data_dir: "{{ var_mount_path }}/var/lib/{{ context }}"
    var_context_backup_dir: "{{ var_mount_path }}/var/{{ context }}-backup"
    var_list_dirs: "{{ var_context_opt_dir }}
    {{ var_context_config_dir }}
    {{ var_context_log_dir }}
    {{ var_context_data_dir }}
    {{ var_context_backup_dir }}"
  roles:
    - { role: user,                        tags: [ 'user' ] }
    - { role: directory,                   tags: [ 'directory'] }

main.yaml

---
## https://stackoverflow.com/questions/1271222/replace-whitespace-with-a-comma-in-a-text-file-in-linux
- name: get list of directories
  shell: |
    echo "{{ var_list_dirs }}" |  tr " " "\n" > /tmp/dirs.txt
  tags:
    - create-dir


- name: create dirs
  file:
    path: "{{ item|safe|trim }}"
    state: directory
    owner: "{{ var_user }}"
    group: "{{ var_group }}"
    mode: 0777
    recurse: yes
  with_lines: cat /tmp/dirs.txt
  tags:
    - create-dir



1 Ответ

4 голосов
/ 20 июня 2020

Чтобы использовать значения от var_list_dirs, используйте от with_items до l oop для всех значений в var_list_dirs. Это выполнит действие create dirs для каждого значения в списке.

- name: create dirs
  file:
    path: "{{ item|safe|trim }}"
    state: directory
    owner: "{{ var_user }}"
    group: "{{ var_group }}"
    mode: 0777
    recurse: yes
  with_items: "{{ var_list_dirs }}"
  when:
    - inventory_hostname in groups['node-hostname']
  tags:
    - create-dir

Передайте список как:

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