2017-01-22 182 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 >>