2017-01-22 3 views
0

Ich versuche, ein Playbook zum Ausführen von Oracle-Skripts auszuführen.Ansible-Playbook zum Ausführen von Oracle-Skript

--- 
- hosts: localhost 
- tasks: 
    - set_fact: 
     execute_command: "sqlplus {{ Oracle_Username }}/{{ Oracle_Password }} @{{ sqlfile.sql }}" 

    - name: Get Object_details 
    shell: "echo exit | {{ execute_command }} >> ./Oracle_Output.csv" 
    environment: 
     ORACLE_HOME: "{{ Oracle_DBServer }}" 
     ORACLE_SID: "{{ Oracle_SID }}" 

Ich habe erklärt, alle Variablen in vars.When ich es ausführen, sind immer Fehler „set_fact ist nicht gültiges Attribut für ein Spiel“. Welches ist der beste Weg, um SQL-Skript mit Ansible auszuführen? Ich muss alle Verbindungsdetails in Variable deklarieren.

Antwort

1

Sie haben vergessen tasks Abschnitt zu deklarieren:

--- 
- hosts: localhost 
- tasks: 
    - set_fact: 
     execute_command: "sqlplus {{ Oracle_Username }}/{{ Oracle_Password }} @{{ sqlfile.sql }}" 

    - name: Get Object_details 
     shell: "echo exit | {{ execute_command }} >> ./Oracle_Output.csv" 
     environment: 
     ORACLE_HOME: "{{ Oracle_DBServer }}" 
     ORACLE_SID: "{{ Oracle_SID }}" 

P. S. und ich bin mir nicht bewusst, wait Attribut für Aufgaben.

+0

Ich benutzte Ansible Rollen und dieses Yml-Skript ist in Aufgaben. Also keine Notwendigkeit zu erwähnen Aufgaben Abschnitt –

+0

Die Fehlermeldung schlägt vor, dass Sie diese Yml-Skript als Playbook ausführen. Und wenn dies eine main.yml-Rolle ist, ist 'hosts' dort nicht erlaubt. –

0
--- 
- hosts: localhost 
- tasks: 
    - name: Get Object_details 
    shell: echo exit |sqlplus "{{ oracle_username }}/ {{ oracle_pwd}} @(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host={{ oracle_hostname }})(Port={{ oracle_port }}))(CONNECT_DATA=(SERVICE_NAME= {{ service_name }})))"@sqlfile.sql; 

Mit dem obigen Code werden wir direkt in der Lage sein, eine Verbindung zu Oracle Host herzustellen und sql-Skript auszuführen. Wenn die Oracle-Umgebungsvariablen nicht standardmäßig definiert sind, können wir dies auch in der Playbook-Aufgabe selbst festlegen. Unten ist das Beispiel dafür:

--- 
- hosts: localhost 
- tasks: 
    - name: Get Object_details 
    shell: echo exit |sqlplus "{{ oracle_username }}/ {{ oracle_pwd}} @(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host={{ oracle_hostname }})(Port={{ oracle_port }}))(CONNECT_DATA=(SERVICE_NAME= {{ service_name }})))"@sqlfile.sql; 
    environment: 
      ORACLE_HOME: <<Oracle Home path >> 
      PATH: << bin path >> 
      LD_LIBRARY_PATH: << lib path >> 
Verwandte Themen