использование pgpool не видит список переменных в group_var каталог

Я использую Ansible + Бродяга для создания моей инфраструктуры, или сделать немного моделирования из я желаю. Это пост-ГРЭС установки и создание ssh каталога для хранения differents ключей для каждого хоста.

Это - моя структура проекта:

.
├── ansible.cfg
├── cluster_hosts
├── group_vars
│  ├── host_master
│  ├── host_pgpool
│  ├── host_slave1
│  └── postgresql
├── roles
│  ├── postgresql
│  │  ├── files
│  │  ├── handlers
│  │  └── tasks
│  │  └── main.yml
│  └── ssh_agent
│  └── tasks
│  └── main.yml
└── site.yml

Это - cluster_hosts объявление:

host_master ansible_ssh_host=192.168.1.10 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
host_slave1 ansible_ssh_host=192.168.1.11 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
host_slave2 ansible_ssh_host=192.168.1.12 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
host_pgpool ansible_ssh_host=192.168.1.13 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[ssh]
host_master
host_pgpool
host_slave1

[pg_pool]
host_pgpool

[database]
host_master
host_pgpool
host_slave1
host_slave2

Это - мои group_vars файлы:

host_master

known_hosts:
    - 192.168.1.11
    - 192.168.1.12

host_pgpool

known_hosts:
    - 192.168.1.11
    - 192.168.1.12

host_slave1

known_hosts:
    - 192.168.1.12

И вот мой site.yml:

---
# The main playbook to deploy the cluster

# setup database
- hosts: database
  sudo: True
  tags:
    - setup_db
  roles:
    - postgresql

# setup ssh
- hosts: all
  sudo: True
  tags:
    - setup_ssh
  roles:
    - ssh_agent

И вот ssh_agent роль:

---
- name: Install sshpass
  apt: name={{ item }} state=present
  with_items:
    - sshpass
    - rsync

- name: Create ssh directory
  sudo_user: postgres
  command: mkdir -p /var/lib/postgresql/.ssh/ creates=/var/lib/postgresql/.ssh/

- name: Generate known hosts
  sudo_user: postgres
  shell: ssh-keyscan -t rsa {{ item }} >> /var/lib/postgresql/.ssh/known_hosts
  with_items: 
    - "{{ known_hosts }}"

- name: Generate id_rsa key
  sudo_user: postgres
  command: ssh-keygen -t rsa -N "" -C "" -f /var/lib/postgresql/.ssh/id_rsa

- name: Add authorized_keys
  command: sshpass -p postgres ssh-copy-id -i /var/lib/postgresql/.ssh/id_rsa.pub postgres@{{ item }}
  sudo_user: postgres
  with_items: 
    - "{{ known_hosts }}"

- name: Owner postgresql
  command: chown postgres:postgres /var/lib/postgresql/.ssh/ -R

хорошо, Теперь когда я работаю:

ansible-playbook -i cluster_hosts site.yml --tags setup_ssh

Я вкладываю ошибку Генерирование известной задачи хостов:

PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [host_pgpool]
ok: [host_slave2]
ok: [host_slave1]
ok: [host_master]

TASK: [ssh_agent | Install sshpass] ******************************************* 
ok: [host_slave1] => (item=sshpass,rsync)
ok: [host_master] => (item=sshpass,rsync)
ok: [host_pgpool] => (item=sshpass,rsync)
ok: [host_slave2] => (item=sshpass,rsync)

TASK: [ssh_agent | Create ssh directory] ************************************** 
skipping: [host_master]
skipping: [host_slave2]
skipping: [host_slave1]
skipping: [host_pgpool]

TASK: [ssh_agent | Generate known hosts] ************************************** 
fatal: [host_slave1] => One or more undefined variables: 'known_hosts' is undefined
fatal: [host_master] => One or more undefined variables: 'known_hosts' is undefined
fatal: [host_slave2] => One or more undefined variables: 'known_hosts' is undefined
fatal: [host_pgpool] => One or more undefined variables: 'known_hosts' is undefined

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/robe/site.retry

host_master                : ok=2    changed=0    unreachable=1    failed=0   
host_pgpool                : ok=2    changed=0    unreachable=1    failed=0   
host_slave1                : ok=2    changed=0    unreachable=1    failed=0   
host_slave2                : ok=2    changed=0    unreachable=1    failed=0 

Я не понимаю почему эта ошибка? если каждая переменная объявляется в group_vars (host_master, host_pgpool, host_slave1).

Мой yml синтаксис неправильно? Я думаю, что, возможно, это - проблема, но я вижу, что это правильно для меня?

2
задан 18 September 2014 в 18:13
1 ответ

По умолчанию ansible не читает все файлы в group_vars / ; он читает только group_vars / all (или group_vars / all.yml ; кстати, мне показалось более удобным добавить расширение .yml к файлам vars ). Вам нужно указать ему, чтобы он читал нужные вам файлы, используя vars_files в вашем site.yml , например:

- hosts: database
  sudo: True
  tags:
    - setup_db
  roles:
    - postgresql
  vars_files:
    - group_vars/host_master
2
ответ дан 3 December 2019 в 11:41

Теги

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