Я нахожу множество примеров того, как управлять posgresql с помощью ansible (Linux), однако все они содержат самые основные вещи (установить пакет, запустить службу, создать базу данных, создать пользователя), но не самое главное: создать столы.
У меня есть файл SQL с таблицами для моей базы данных, но я не знаю, как правильно использовать его в качестве входных данных в моей доступной роли. Я надеюсь, мне не нужно использовать shell
модуль, чтобы просто выполнить SQL, потому что, насколько я понимаю, это недопустимо в доступном мире (особенно потому, что нам может потребоваться способ сначала проверить, были ли таблицы уже созданы в предыдущем запуске).
Как это сделать? Есть образцы? Ура
Обычно задача приложения - управлять таблицами внутри заданной базы данных (схемы), поэтому модулей для работы с таблицами из Ansible нет.
Вы правы, что вам следует избегать shell
модуль если родной модуль для рассматриваемой задачи существует. Но если такого модуля нет, shell
это хороший выбор.
Вы можете проверить этот ответ https://stackoverflow.com/a/39117576/2795592 чтобы получить представление о том, как создать идемпотентный скрипт, который создает что-то внутри postgres.
На данный момент (01/2020) доступен модуль:
https://docs.ansible.com/ansible/latest/modules/postgresql_table_module.html
(но это зависит от пакета python "psycopg2" или альтернативного "psycopg2-binary", который необходимо установить заранее)
например.:
- name: Ensure db table for temp is present
postgresql_table:
db: myDatabase
table: myTable
columns:
- someColumn TEXT COLLATE "C" NOT NULL
- anotherColumn TEXT COLLATE "C" PRIMARY KEY
- bla BYTEA PRIMARY KEY
- CONSTRAINT mykey PRIMARY KEY (anotherColumn, bla)
- name: Ensure temp-db-index is present
postgresql_idx:
db: myDatabase
table: myTable
columns: anotherColumn
name: anotherColumn_idx