2017-01-22 3 views
0

Oracleスクリプトを実行するためのプレイブックを実行しようとしています。私はそれを実行vars.When内のすべての変数を宣言したOracleスクリプトを実行するための可能なプレイブッブ

--- 
- 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 }}" 

は、エラー「set_factが遊びのための有効な属性ではありません」取得しています。 Anabilitiesを使用してSQLスクリプトを実行する最善の方法はどれですか?すべての接続の詳細を変数で宣言する必要があります。

--- 
- 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.:あなたはtasksセクションを宣言するのを忘れ

答えて

1

私は仕事のためにwait属性を知らない。

+0

私は使用可能な役割があり、このymlスクリプトはタスク内にあります。したがって、作業のセクションに言及する必要はありません。 –

+0

エラーメッセージは、このymlスクリプトを演劇として実行することを示唆しています。これが役割タスクの中のmain.ymlであれば、 'hosts'はそこでは許可されません。 –

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; 

上記のコードでは、Oracleホストに直接接続してsqlスクリプトを実行できます。 Oracle環境変数がデフォルトで定義されていない場合、これもプレイブック・タスク自体で設定できます。以下は、その例です。

--- 
- 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 >> 
関連する問題