Запуск сценариев 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, чтобы узнать, есть ли еще что-нибудь подобное, и, к сожалению, из-за характера моего клиента / контракта я не уверен, что могу поделиться модулями, которые мы разработали. Я просто подумал, что предлагаю вам это как возможное направление для изучения.

Другие вопросы по тегам