2017-04-10 93 views
-1

我的要求是我能夠從主機獲取主機名和Java版本,將這些值存入本地主機並將其存儲在數據庫中。 我能夠獲取本地主機上的Java版本,最後一步是存儲在數據庫中的這些變量的值..任何人都可以建議我怎麼能繼續與Ansible:需要有關與數據庫(Oracle/MySql)連接的信息

--- 
- hosts: myserver 
    tasks: 

    - name: Get the Host Name 
    shell: host $(hostname -i) | awk '{print $NF }'|sed 's/\.$//' 
    register: hosts 
    - set_fact: the_hosts=hosts.stdout 
    - debug: var={{the_hosts}} 

    - name: Fetch Java Version 
    shell: /opt/app/java/jdk/jdk180_66/ 
64bit/bin/java -version 2>&1 | grep version | awk '{print $3}' | sed 's/"//g' 
    register: result 
    - set_fact: the_count=result.stdout 
    - debug: var={{the_count}} 

- hosts: localhost 
    tasks: 

    - debug: var=hostvars['zlp12036']['result']['stdout'] 
    - debug: var=hostvars['zlp12037']['result']['stdout'] 
    - debug: var=hostvars['zlp12036']['hosts']['stdout'] 
    - debug: var=hostvars['zlp12037']['hosts']['stdout'] 

回答

0

首先,什麼是確定java版本的一點,如果你有jdk180_66硬編碼?另外,請考慮使用ansible_hostname變量來確定機器的主機名。

如果你有你的本地主機安裝數據庫客戶端,從那裏你想運行查詢,你可以使用shell模塊,在mysql中的情況下,這可能看起來像

- name: insert ansible result shell: mysql -u {{ db.user }} -p {{ db.password }} -e "use {{ db.name }}; INSERT INTO {{ db.table }} values('{{ hostvars[item].hosts.stdout}}','{{ hostvars[item].result.stdout}}');" with_items: groups['myserver']

db.userdb.passworddb.name變量正在存儲與數據庫的連接(但最好將密碼存儲在服務器上的~/.my.cnf內),db.table是表格的名稱,而myserver是存儲服務器的庫存組的名稱。由於您尚未指定表格的佈局,因此請爲您自己的模式調整此命令。

對於oracle,您應該使用等效的sqlplus命令。