Назад | Перейти на главную страницу

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

Я использую Ansible + Бродяга создать свою инфраструктуру или сделать небольшую симуляцию того, что я хочу. Он устанавливает postgres и создает каталог ssh для хранения разных ключей для каждого хоста.

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

.
├── 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 неверен? Я думаю, что, может быть, это проблема, но я вижу, что мне это подходит?

По умолчанию 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