ansible передать результат команды оболочки в переменную

Разрешение для символических ссылок не оценивается.

В прежние времена не было возможности изменить биты разрешений для символических ссылок.

С некоторых пор POSIX представил fchmodat(), и все платформы, поддерживающие этот вызов, могут изменять биты разрешений для символических ссылок.

Однако не ожидайте, что это повлияет на символическую ссылку.

1
17.10.2016, 13:10
3 ответа

Вместо того, чтобы генерировать свой идентификатор из учебника, здесь вы можете захотеть определить собственный факт. На вашем сервере mysql вы должны сделать что-то вроде этого:

mkdir -p /etc/ansible/facts.d
cat <<EOF >/etc/ansible/facts.d/mysql.fact
#!/bin/sh
echo "[mysql]"
echo server_id=`hostname -I | sed -e 's/ \+\([a-z0-9]\+\:\)\+[a-z0-9]\+//' | sed -e 's/ /\n/' | grep -v '^$' | tail -1 | awk -F. '{print $3 * 256 + $4}'`
EOF
chmod +x /etc/ansible/facts.d/mysql.fact

Запустите ansible -m setup your.mysql.ip.address , чтобы убедиться, что ваш факт выполняется правильно. У вас должно быть определено несколько ansible_local ['mysql'] ['mysql'] ['server_id'] .

Допустим, вы хотите, чтобы этот факт был развернут с помощью функции ansible, вы можете сделать что-то вроде:

- name: install fact
  copy: src=myfact dest=/etc/ansible/facts.d/mysql.fact owner=root group=root mode=0755
  register: fact_installed
- name: reload facts
  setup: filter=ansible_local
  when: fact_installed is defined and fact_installed.changed == True

После этого вы можете включить свой шаблон, ссылаясь на вашу переменную server_id .

0
28.01.2020, 01:09

Вы можете использовать модуль копирования в дополнение к локальному _действию, чтобы сохранить переменную в локальном файле на управляющей машине и использовать ее позже в следующем плейбуке:

- local_action: copy content="slave_server_id: {{ slave_repli.stdout_lines[0] }}" dest=/path/to/var/file
1
28.01.2020, 01:09

У вас есть два варианта использования сгенерированного значения в вашем шаблоне:

Вариант 1:Используйте slave_repli.stdout_linesв своем шаблоне:

# in templates/root.j2:
...
slave_server_id: {{ slave_repli.stdout_lines[0] }}
...

Вариант 2:Назначить переменную

В вашем плейбуке:

- name: rewrite
  vars:
    slave_server_id: "{{ slave_repli.stdout_lines[0] }}"
  template:
    src: templates/root.j2
    dest: /root/test.conf

В вашем шаблоне:

# in templates/root.j2:
...
slave_server_id: {{ slave_server_id }}
...

Я предпочитаю второй подход, так как он намного чище.

0
28.01.2020, 01:09

Теги

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