Запуск сценариев Oracle SQL с помощью Ansible playbook
Взгляд на основные модули базы данных в документации Ansible не показывает никаких признаков наличия модуля для Oracle. Каков наилучший способ обработки развертываний SQL/PLSQL через Ansible для баз данных Oracle?
Ожидается ли, что мы будем использовать роли из Ansible Galaxy для этого? Похоже, очень немногие загружали роли, перечисленные в Galaxy for Oracle.
1 ответ
Я создал роль для установки Apex 5 (где я сначала удалить Apex 4). Я использую такие модули, как "скрипт" и "оболочка". Я не слишком доволен инициализацией среды, но все еще учусь. Для любой задачи SQL/PLSQL sqlplus - правильный инструмент. (возможно, SQLcl может сделать лучше..?)
- name: Determine apex version
become: yes
become_user: oracle
shell: source /etc/profile && sqlplus -S / as sysdba @"{{ temp_dir }}/apexver.sql"
register: apexver
args:
executable: /bin/bash
changed_when: "'APEX_040000' in apexver.stdout"
- name: oracle apex remove
become: yes
become_user: oracle
script: apex_remove.sh {{ item }}
with_items:
- 'XE'
ignore_errors: yes
register: result
when: "'APEX_040000' in apexver.stdout"
22:18 $ cat apex_remove.sh
#!/bin/sh
# set oracle environment
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
ORACLE_SID=$1
sqlplus -s /nolog <<EOF
connect / as sysdba
@?/apex/apxremov.sql
exit
EOF
Я не уверен, связано ли это с вашим вопросом, но изначально я искал модули Ansible для запуска / остановки и получения статуса базы данных Oracle. Я не смог найти ничего подходящего, поэтому написал свои собственные доступные модули. Модули дают вам возможность определять стандартный интерфейс с ответами OK/Failed/Changed на задачи, при этом выполняя столько низкоуровневых действий / команд, сколько вам нужно (таким образом, они намного более гибкие, чем простые модули оболочки / команд). Я написал модули как идемпотентные - они не будут пытаться запускать уже запущенные базы данных и не будут пытаться останавливать базы данных, которые уже остановлены. И если функция остановки / остановки не удалась, она возвращает Failed with stdout/stderr.
Наряду с базами данных Oracle я также написал модули для предоставления интерфейсов для служб Business Objects и Weblogic. Модули представляют собой значительную предварительную работу, но, как только они станут стабильными, их можно будет использовать в широком спектре программ.
Я не смотрел на Galaxy, чтобы узнать, есть ли еще что-нибудь подобное, и, к сожалению, из-за характера моего клиента / контракта я не уверен, что могу поделиться модулями, которые мы разработали. Я просто подумал, что предлагаю вам это как возможное направление для изучения.