LINUX.ORG.RU
ФорумAdmin

Передать параметры в команду Ansible. Автоматизировать ответы.

 ,


0

1

Как автоматизировать ответы на вопросы команды в Ansible? Понятно, что нужно прописать их в vars, но как ему сказать их использовать? Например ответы при создании ключа-сертификата с помощью EasyRSA. https://www.radikal.kz/images/2019/08/30/1234.jpg Ниже примерный код плейбука. Вопрос в том как в таске использовать переменные для ответа командной строке? Если хотите можете для примера взять более простую команду.

- name: test
  hosts: all
  become: yes

  vars:
    countryName: US
    stateOrProvinceName: CA
    localityName: SanFrancisco
    organizationName: Fort_Funston
    commonName: "CLIENT"
    name: EasyRSA
    emailAddress: me@myhost.mydomain
    answer: y

  tasks:

  - name: test
  shell: 'build-key {{inventory_hostname}}'

В общем случае это можно решить с помощью expect, но в твоём конкретном случае все эти переменные можно легко задать несколькими способами без необходимости автоматизировать ответы в интерактивном скрипте: https://github.com/OpenVPN/easy-rsa/blob/master/doc/EasyRSA-Advanced.md

Также можешь поискать готовые ansible для EasyRSA, их как минимум есть несколько, только желательно почитать код.

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

Это не то, он хочет автоматизировать ответы для команды (скрипта), который вызывает в playbook.

Pravorskyi ★★★
()

В плейбуке:

- name: test
  shell: 'build-key {{inventory_hostname}} {{ countryName }} {{ stateOrProvinceName }} и прочие переменные'
В ком. строке: ansible-playbook твой_плейбук -e 'countryName=RU stateOrProvinceName="" localityName=Voronezh и так далее'. Или просто ansible-playbook твой_плейбук, тогда будут использованы значения переменных из vars плейбука.

dexpl ★★★★★
()

https://openvpn.net/community-resources/rsa-key-management/

Т.к. там все равно используется openssl - Вы можете в openssl добавить -subj

https://www.shellhacks.com/create-csr-openssl-without-prompt-non-interactive/

Либо создать файл с нужными переменными и указать -config $PATH_RO_FILE_CONFIG

Cмотрите как реализовано в одном из плейбуков на GitHub

https://github.com/kyl191/ansible-role-openvpn/blob/master/tasks/client_keys.yml

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

Выполним ./build-key --help, и видим что и как тут устроено:

  --batch    : batch mode (default)

Notes:
  Please edit the vars script to reflect your configuration,
  then source it with "source ./vars".
  Next, to start with a fresh PKI configuration and to delete any
  previous certificates and keys, run "./clean-all".
  Finally, you can run this tool (pkitool) to build certificates/keys.
  In order to use PKCS#11 interface you must have opensc-0.10.0 or higher.

Typical usage for initial PKI setup.  Build myserver, client1, and client2 cert/keys.
Protect client2 key with a password.  Build DH parms.  Generated files in ./keys :
  [edit vars with your site-specific info]
  source ./vars
  ./clean-all
  ./build-dh     -> takes a long time, consider backgrounding
  ./pkitool --initca
  ./pkitool --server myserver
  ./pkitool client1
  ./pkitool --pass client2

Typical usage for adding client cert to existing PKI:
  source ./vars
  ./pkitool client-new

Ок, смотрим в vars grep -v "^#\|^$" ./vars

export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"

Становится ясно как приготовить ответы для утилиты. Осталось приготовить файл ответов (vars), для этого к примеру изучаем модуль template или lineinfile.

Это если просто.

А по хорошему используем модуль openssl_csr и генерим сразу им всё что нужно.

В ансибле главное меньше шел использовать и больше модули. build-key, build-ca, etc, это все обёртки для openssl.

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