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

помогите с первым playbook для ansible

 


0

1

Коллеги, хочется выполнить самописный скрипт на хостах.
Сам скрипт достаточно прост:

#!/bin/bash
find ./ -type f -size +1M
Вот так записан playbook:
# cat ../playbooks/check_logs.yml
- hosts: racnodes
  tasks:
    - name: Check logs with size greater than 1M in /var/log
    - script: /etc/ansible/scripts/check_logs.sh

пытаюсь выполнить команду:
ansible-playbook check_logs.sh --list-host
Получаю ошибку:
# ansible-playbook check_logs.sh --list-host
ERROR! playbooks must be a list of plays

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

The offending line appears to be:

#!/bin/bash
find ./ -type f -size +1M
^ here

Что я делаю не так?

★★★★★

так ты на скрипт указываешь, а не на плейбук)

разве так не проще:

$ ansible lic -m shell -a "find /var/log -type f -size +1M"
192.168.5.245 | SUCCESS | rc=0 >>
/var/log/audit/audit.log.1
/var/log/audit/audit.log.2
/var/log/audit/audit.log.4
/var/log/audit/audit.log
/var/log/audit/audit.log.3
/var/log/maillog-20180429
/var/log/maillog-20180506
/var/log/httpd/error_log
/var/log/httpd/error_log-20180415
/var/log/httpd/error_log-20180506
/var/log/httpd/error_log-20180422
/var/log/httpd/error_log-20180429

192.168.5.252 | SUCCESS | rc=0 >>
/var/log/installer/cdebconf/templates.dat
в целом тоже заинтересован в этой теме.

как допустим с помощью ансибл развернуть тот же докер.

кто-то поможет примером?

nerve ★★
()
Последнее исправление: nerve (всего исправлений: 2)
Ответ на: комментарий от nerve

твою ж за ногу.
туплю.
но почему-то name в playbook не отработал
вот как надо:

- hosts: racnodes
  tasks:
    - script: /etc/ansible/scripts/check_logs.sh

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

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

# ansible-playbook ../playbooks/check_logs.yml

PLAY [racnodes] *************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************
ok: [node1]
ok: [node2]

TASK [script] ***************************************************************************************************************************************************************************************************************************
changed: [node2]
changed: [node1]

PLAY RECAP ******************************************************************************************************************************************************************************************************************************
node1                      : ok=2    changed=1    unreachable=0    failed=0
node2                      : ok=2    changed=1    unreachable=0    failed=0

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

как-то так у меня заработало на одном хосте

- hosts: lic
  tasks:
    - name: Check logs
      shell: /bin/find /var/log -type f -size +1M
      register: out
    - debug:
        var: out.stdout_lines

$ ansible-playbook ./playbook.yml 

PLAY [lic] **********************************************************************************

TASK [Gathering Facts] **********************************************************************
ok: [192.168.5.245]
ok: [192.168.5.252]

TASK [Check logs] ***************************************************************************
fatal: [192.168.5.252]: FAILED! => {"changed": true, "cmd": "/bin/find /var/log -type f -size +1M", "delta": "0:00:00.027221", "end": "2018-05-08 18:29:37.199324", "failed": true, "rc": 127, "start": "2018-05-08 18:29:37.172103", "stderr": "/bin/sh: 1: /bin/find: not found", "stderr_lines": ["/bin/sh: 1: /bin/find: not found"], "stdout": "", "stdout_lines": []}
changed: [192.168.5.245]

TASK [debug] ********************************************************************************
ok: [192.168.5.245] => {
    "out.stdout_lines": [
        "/var/log/audit/audit.log.1", 
        "/var/log/audit/audit.log.2", 
        "/var/log/audit/audit.log.4", 
        "/var/log/audit/audit.log", 
        "/var/log/audit/audit.log.3", 
        "/var/log/maillog-20180429", 
        "/var/log/maillog-20180506", 
        "/var/log/httpd/error_log", 
        "/var/log/httpd/error_log-20180415", 
        "/var/log/httpd/error_log-20180506", 
        "/var/log/httpd/error_log-20180422", 
        "/var/log/httpd/error_log-20180429"
    ]
}
        to retry, use: --limit @/home/ppo/Downloads/test/playbook.retry

PLAY RECAP **********************************************************************************
192.168.5.245              : ok=3    changed=1    unreachable=0    failed=0   
192.168.5.252              : ok=1    changed=0    unreachable=0    failed=1 

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

так, теперь я вообще запутался:

# cat check_logs.yml
- hosts: racnodes
  tasks:
    - chdir: /var/log/
      script: /etc/ansible/scripts/check_logs.sh
    - debug:
      var: out.stdout_lines
# ansible-playbook ../playbooks/check_logs.yml
 [WARNING]: Ignoring invalid attribute: chdir

 [WARNING]: Ignoring invalid attribute: var


PLAY [racnodes] *************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]

TASK [script] ***************************************************************************************************************************************************************************************************************************
changed: [node1]
changed: [node2]

TASK [debug] ****************************************************************************************************************************************************************************************************************************
ok: [node1] => {
    "msg": "Hello world!"
}
ok: [node2] => {
    "msg": "Hello world!"
}

PLAY RECAP ******************************************************************************************************************************************************************************************************************************
node1                      : ok=3    changed=1    unreachable=0    failed=0
node2                      : ok=3    changed=1    unreachable=0    failed=0

[root@alixantest playbooks]# nano check_logs.yml
[root@alixantest playbooks]# nano /etc/ansible/scripts/check_logs.sh
[root@alixantest playbooks]# nano check_logs.yml
[root@alixantest playbooks]# ansible-playbook ../playbooks/check_logs.yml
 [WARNING]: Ignoring invalid attribute: chdir

 [WARNING]: Ignoring invalid attribute: var


PLAY [racnodes] *************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]

TASK [script] ***************************************************************************************************************************************************************************************************************************
changed: [node2]
changed: [node1]

TASK [debug] ****************************************************************************************************************************************************************************************************************************
ok: [node1] => {
    "msg": "Hello world!"
}
ok: [node2] => {
    "msg": "Hello world!"
}

PLAY RECAP ******************************************************************************************************************************************************************************************************************************
node1                      : ok=3    changed=1    unreachable=0    failed=0
node2                      : ok=3    changed=1    unreachable=0    failed=0


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

Так подсказали уже рабочий вариант

- hosts: lic
  tasks:
    - name: Check logs
      shell: /bin/find /var/log -type f -size +1M
      register: out
    - debug:
        var: out.stdout_lines

Теперь разберись с инветоркой

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

похоже что у тебя дефолное сообщение от debug выводится и не вижу где у тебя «register: out» после script.

вот еще раз копипаста:

$ cat playbook.yml 
- hosts: lic
  tasks:
    - name: Check logs
      #shell: /bin/find /var/log -type f -size +1M
      script: /path/check_logs.sh
      register: out
    - debug:
        var: out.stdout_lines

$ ansible-playbook ./playbook.yml 

PLAY [lic] **********************************************************************************

TASK [Gathering Facts] **********************************************************************
ok: [192.168.5.245]
ok: [192.168.5.252]

TASK [Check logs] ***************************************************************************
changed: [192.168.5.252]
changed: [192.168.5.245]

TASK [debug] ********************************************************************************
ok: [192.168.5.252] => {
    "out.stdout_lines": [
        "/var/log/installer/cdebconf/templates.dat"
    ]
}
ok: [192.168.5.245] => {
    "out.stdout_lines": [
        "/var/log/audit/audit.log.1", 
        "/var/log/audit/audit.log.2", 
        "/var/log/audit/audit.log.4", 
        "/var/log/audit/audit.log", 
        "/var/log/audit/audit.log.3", 
        "/var/log/maillog-20180429", 
        "/var/log/maillog-20180506", 
        "/var/log/httpd/error_log", 
        "/var/log/httpd/error_log-20180415", 
        "/var/log/httpd/error_log-20180506", 
        "/var/log/httpd/error_log-20180422", 
        "/var/log/httpd/error_log-20180429"
    ]
}

PLAY RECAP **********************************************************************************
192.168.5.245              : ok=3    changed=1    unreachable=0    failed=0   
192.168.5.252              : ok=3    changed=1    unreachable=0    failed=0 

nerve ★★
()
Последнее исправление: nerve (всего исправлений: 1)
Ответ на: комментарий от MadMax

твой вариант работает.
только я не могу разобраться с playbook.
вроде и документацию читаю, но chdir, к примеру, игнорится.

dada ★★★★★
() автор топика

Зачем тебе вообще ansible, тем более ansible-playbook? Какой-нибудь multissh тебе был бы более удачным выбором. Но если хочется именно ansible playbook, то стоит использовать его модули. В твоем случае find.

- hosts: racnodes
  tasks:
  - name: Check logs with size greater than 1M in /var/log
    find:
      paths: /var/log
      size: 1m

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

последний вопрос:
cd into this directory on the remote node before running the script
почему не работает?

- hosts: racnodes
  tasks:
    - name: Check logs
      chdir: /var/log/
      script: /etc/ansible/scripts/check_logs.sh
      register: out
    - debug:
        var: out.stdout_lines

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

вроде и документацию читаю, но chdir, к примеру, игнорится

Потому что ansible не утилита для одновременного запуска самописных скриптов на кучке хостов, а система оркестрации. И оперирует она состояниями. Если бы ты читал документацию, то было бы понимание этого.

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

почему не работает?

Потому что у тебя ересь какая-то. chdir - это аргумент. Прочитай вводную статью про playbooks и yaml и будет понимание.

- hosts: racnodes
  tasks:
    - name: Check logs
      script: /etc/ansible/scripts/check_logs.sh
      args:
        chdir: /var/log/

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

друг мой, этот трэд - попытка входа. первый шаг так сказать

dada ★★★★★
() автор топика

Зачем вообще нужен ансибл? Если надо тупо выполнить пару команд, есть fabric. Если нужно управление конфигурацией - то тут только NixOS и NixOps.

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

Зачем вообще нужен ансибл?

Ребята из github подключили его к внутреннему чатику и администрируют всю инфраструктуру прямо оттуда.

А вообще конкуренция - это очень хорошо для конечного пользователя.

adn ★★★★
()
Последнее исправление: adn (всего исправлений: 1)
Ответ на: комментарий от anonymous

я сначала увидел ansible tower.
крутая штука.
хочется его попробовать.

dada ★★★★★
() автор топика
18 февраля 2020 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.