2017-01-22 186 views
0

我試圖運行一個手冊來執行Oracle腳本。Ansible playbook執行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 }}" 

我已經宣佈vars.When所有的變量我執行它,我得到錯誤「set_fact不是一齣戲有效的屬性」。 使用Ansible運行SQL腳本的最佳方法是什麼?我必須在變量中聲明所有的連接細節。

回答

1

你忘了申報tasks部分:

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

附:我不知道任務的wait屬性。

+0

我使用Ansible角色和這個yml腳本是內部任務。所以不需要提及任務部分 –

+0

錯誤消息表明您將此yml腳本作爲playbook運行。如果這是角色任務中的main.yml,那麼'主機'不允許在那裏。 –

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