LINUX.ORG.RU
решено ФорумAdmin

Первая роль в Ansible

 


0

2

Добрый день.

Пытаюсь сделать роль, которая добавит на сервер репозиторий PostgreSql.

Но возникают ошибки.


ERROR! playbooks must be a list of plays

The error appears to have been in '/etc/ansible/deploypostgresql.yml': line 2, column 1, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:
---
roles:
^ here
Запускаю ansible-playbook deploypostgresql.yml.

Есть идеи ?

В deploypostgresql.yml

---
roles:
  - deploy_postgresql

В /etc/ansible/roles/deploy_postgresql/tasks/main.yml


---
- hosts: all
  remote_user: root

- name: PostgreSQL
  yum:
  name: https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-3.noarch.rpm
  state: present


Хосты перенеси в начало deploypostgresql.yml.

---
- hosts: all
  remote_user: root
  roles:
  - deploy_postgresql

Для yml важны отступы, поэтому:

- name: PostgreSQL
  yum:
    name: https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-3.noarch.rpm
    state: present

ivn86 ()
Последнее исправление: ivn86 (всего исправлений: 1)

Установка

Если установить PostgreSQL, то

---

- name: PostgreSQL_REPO
  yum:
   name: https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-3.noarch.rpm
   state: present

- name: install PostgreSQL
  yum:
   name: "{{ item }}"
   state: latest
    with_items:
     - postgresql94-server
     - postgresql94-contrib
     - pg_repack94

~

Вроде оступы верны, а всё равно ошибки

beren ()
Ответ на: Отбой от beren

Ошибка

Правда такая ошибка

Using a loop on a package module via squash_actions

The use of squash_actions to invoke a package module, such as “yum”, to only invoke the module once is deprecated, and will be removed in Ansible 2.11.

Instead of relying on implicit squashing, tasks should instead supply the list directly to the name, pkg or package parameter of the module. This functionality has been supported in most modules since Ansible 2.3.

OLD In Ansible 2.6 (and earlier) the following task would invoke the “yum” module only 1 time to install multiple packages

beren ()
Ответ на: Ошибка от beren

это предупреждение, что твой способ запуска модуля yum (в цикле по списку имен пакетов) - deprecated и в будущих версиях будет удален

правильно давать список имен пакетов в качестве аргумента:

- name: install PostgreSQL
  yum:
   name:
     - postgresql94-server
     - postgresql94-contrib
     - pg_repack94
   state: latest
CaHbl4 ()
Ответ на: комментарий от CaHbl4

Ошибка

Хочу остановить службу PostgreSQL.

ansible-playbook deploypostgresql_slave.yml

Но опять ошибка:

ERROR! playbooks must be a list of plays

The error appears to have been in '/etc/ansible/deploypostgresql_slave.yml': line 2, column 1, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
hosts: PostgreSql_slave
^ here

В deploypostgresql_slave.yml

---
hosts: PostgreSql_slave
become: root
roles:
 - deploy_postgresql_slave

В /etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml

---
# tasks file for deploy_postrgresql_slave
- name: configure_slave
  notify:
   - postgresql_stop

В /etc/ansible/roles/deploy_postgresql_slave/handlers/main.yml


# handlers file for deploy_postgresql
- name: postgresql_stop
  service: name=postgresql-9.4  state=stopped


- name: postgresql_start
  service: name=postgresql-9.4  state=started

- name: postgresql_restart
  service: name=postgresql-9.4   state=restarted
~

В чём может быть дело ?

beren ()
Ответ на: комментарий от dexpl

Ошибка

Исправил. Теперь так


---
- hosts: PostgreSql_slave
  become: root
  roles:
   - deploy_postgresql_slave

Такая ошибка:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in '/etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml': line 3, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

# tasks file for deploy_postrgresql_slave
- name: configure_slave
  ^ here

beren ()
Ответ на: Ошибка от beren

Первой значащей строкой в /etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml должно быть

---
, если я правильно понял «ругань».

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

Ошибка

Спасибо. Если так

---

# tasks file for deploy_postrgresql_slave
- name: configure_slave
  notify:
        - postgresql_stop

~

То такая ошибка:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in '/etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml': line 4, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

# tasks file for deploy_postrgresql_slave
- name: configure_slave
  ^ here

Что ему опять не нравится ?

beren ()
Ответ на: Ошибка от beren

Неправильное использование хендлеров.

Ансибл идемпотентен, то есть если изменения не нужны, он не будет их повторно накатывать.

Это не касается сервисов - он будет их рестартовать. Для этого и сделал хенделры.

Они используются, чаще всего, в задачах, где меняется конфиг из шаблонов.

Например, ты меняешь конфиг командой темплейт в том же постгресе и применяешь нотифай.

Если изменения были - ансибл дёрнет хендлер. Если изхменений не было - нет смысла перезапускать сервис.

PunkoIvan ★★★★ ()
Ответ на: комментарий от PunkoIvan

Спасибо

Я вообще хочу так сделать через роль:

tasks:
    - service:
        name: postgresql-9.4
        state: stopped

    - file:
       path: /var/lib/pgsql/9.4/data/
       state: absent

    - file:
       path:  /var/lib/pgsql/9.4/data/
       owner: postgres
       group: postgres
       mode:  0700
       state: directory

А тут надо сначала остановить службу.

Тогда как быть ?

beren ()
Ответ на: Спасибо от beren

Тут у вас первая задача service остановит демона.

А на последний file уже можно навесить хендлер для старта демона(notify).

PunkoIvan ★★★★ ()
Ответ на: Спасибо от beren

А зачем и для чего ты хочешь вначале непременно остановить постгрес и удалить его каталог данных? А потом создать его, да еще и не вызовом initdb?

Вот, кстати, неплохой пример развертывания постгри.

dexpl ★★★★★ ()
Ответ на: комментарий от PunkoIvan

Остановка службы

Если остановить службу:

---

# tasks file for deploy_postrgresql_slave
- name: configure_slave
   - service:
      name: postgresql-9.4
      state: stopped



То такая ошибка:

ERROR! Syntax Error while loading YAML.
  mapping values are not allowed in this context

The error appears to have been in '/etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml': line 5, column 13, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

- name: configure_slave
   - service:
            ^ here
beren ()
Ответ на: комментарий от dexpl

Спасибо

Если так:


- name: configure_slave
  service:
   name: postgresql-9.4
   state: stopped

  file:
   path: /var/lib/pgsql/9.4/data/
   state: absent

  file:
   path:  /var/lib/pgsql/9.4/data/
   owner: postgres
   group: postgres
   mode:  0700
   state: directory

То такое:

[WARNING]: While constructing a mapping from /etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml, line 4, column 3, found a duplicate dict key
(file). Using last defined value only.

ERROR! conflicting action statements: file, service

The error appears to have been in '/etc/ansible/roles/deploy_postgresql_slave/tasks/main.yml': line 4, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

# tasks file for deploy_postrgresql_slave
- name: configure_slave
  ^ here

Опять что-то с отстпупами ?

Про дубликаты -это она 2 раза file и state ?

Но есть отдельныке задачи через name делать ?

beren ()
Ответ на: Спасибо от beren

Про дубликаты -это она 2 раза file и state ?

Да.

Но есть отдельныке задачи через name делать ?

Да, Например,

---
## debug action usage example
- name: Wink
  debug:
    msg: I am here
- name: Show some vars
  debug:
    var: "{{ item }}"
  with_items:
  - var1
  - var2
  - pkgs['linux']
  - inventory_hostname
  - ansible_fqdn
  - ansible_host
  - ansible_hostname
  - ansible_nodename
- name: Show some files
  debug:
    var: "{{ item }}"
  with_filetree:
  - "{{ inventory_hostname }}"
#  - "{{ ansible_nodename }}"
#  - "{{ ansible_fqdn }}"
#  - "{{ ansible_hostname }}"
(когда-то я тоже долго боролся с синтаксисом :). К тому же, Первая роль в Ansible (комментарий).

dexpl ★★★★★ ()
Ответ на: Спасибо от beren

не обязательно через name

name - это title, то, что будет выведено в логе выполнения плейбука

Т.е. так тоже правильно, просто лог будет менее информативным:

- name: configure_slave
  service:
   name: postgresql-9.4
   state: stopped

- file:
   path: /var/lib/pgsql/9.4/data/
   state: absent

- file:
   path:  /var/lib/pgsql/9.4/data/
   owner: postgres
   group: postgres
   mode:  0700
   state: directory

CaHbl4 ()
Ответ на: комментарий от CaHbl4

Спасибо

Теперь хочу бэкап сделать.

- name: execute base backup
  become: yes
  become_user: postgres
  shell: export PGPASSWORD= "{{ passwd }}" && /usr/pgsql-9.4/bin/pg_basebackup -h ACPT1 -U replicant -D /var/lib/pgsql/9.4/data -P -v --xlog-method=stream 2>&1

Но когда доходит до этой задачи ничего не происходит.

В чём может быть дело ?

Запускаю ansible-playbook deploypostgresql_slave.yml --extra-vars «passwd=mypassword»

beren ()
Ответ на: Спасибо от beren

и в логе ничего пишет? а если плейбук запускать с -vv?

смущает это export PGPASSWORD= "{{ passwd }}" - почему пробел после =?

По логике должна экспортироваться пустая переменная PGPASSWORD и выполниться команда с паролем в имени

CaHbl4 ()
Ответ на: комментарий от CaHbl4

Пробел

ъЕсли не ставить пробел, то в кавычках && /usr/pgsql-9.4/bin/pg_basebackup -h ACPT1 -U replicant -D /var/lib/pgsql/9.4/data -P -v --xlog-method=stream 2>&1

То есть выделяется красным.

beren ()
Ответ на: Пробел от beren

Возьми всю строку в кавычки.

shell: "export PGPASSWORD={{ passwd }} && /usr/pgsql-9.4/bin/pg_basebackup -h ACPT1 -U replicant -D /var/lib/pgsql/9.4/data -P -v --xlog-method=stream 2>&1"

ЗЫ в баше при присвоении не должно быть пробелов

CaHbl4 ()
Ответ на: комментарий от CaHbl4

Спасибо

Сейчас на тестовых серверах попробую развернуть мастера , а потом слэйва.

Если, что поможете ? ;)

beren ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.