作者 主題: Ansible 小記 - ping module 與 command module  (閱讀 1981 次)

0 會員 與 1 訪客 正在閱讀本文。

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2584
  • 性別: 男
    • 檢視個人資料
    • sakananote
原文在 http://sakananote2.blogspot.com/2015/11/ansible-ping-module-command-module.html

接下來就開始介紹 Ansible Module

 Ansible 的 Module 可以在官網找到所有的 Module, 這邊是按照分類的 Index http://docs.ansible.com/ansible/modules_by_category.html

 今天先來介紹兩個 module

 首先是 ping module
ping

這大概是我在使用 Ansible 第一個會執行的 module, 測試與遠端主機是否有連線成功

 使用 ansible 的指令語法就是
ansible  對象  -m  module名稱
  • -m 是 moudle 的意思

範例為對所有的主機執行 ping module, 成功就會回覆 pong
$ ansible  all   -m   ping
cenic_slave | success >> {
    "changed": false,
    "ping": "pong"
}


接下來介紹  command module
command module 適合執行單一指令, 沒有做其他處理的狀況

 command
  • http://docs.ansible.com/ansible/command_module.html
  • 執行 command, 但是如果是會用到 pipe | 這樣的方式就要透過 shell module 來執行
    • 例如
      • ansible  testserver  -m command  -a  'uptime'
    • 但是如果要執行指令進行二次處理
      • ansible  testserver  -m  command  -a  'dpkg -l | grep nginx'   這樣是不行的, 要使用 shell module

範例
ansible 指令方式

 ansible  對象  -m  module名稱  -a  “參數”
  • -m 是 module 的意思
  • -a  是 module arguments

所以這邊對機器執行 command module 去執行 uptime 指令
$ ansible  cenic_master   -m   command   -a   'uptime'
cenic_master | success | rc=0 >>
 06:38:13 up 20 days,  2:08,  2 users,  load average: 0.00, 0.01, 0.05

 範例
ansible-playbook 方式

 建立一個 yml 檔案, debug 的部分日後再講
$ vi  4_output_of_command.yml
代碼: [選擇]
- name: show return value of command module
  hosts: testserver
  tasks:
    - name: capture output of id command
      command: id -un
      register: login
# 使用 變數 {{ xxx.stdout }} 將輸入導到螢幕前
# - debug 後面的 msg 也是有規定名稱, 不能用自定命名
    - debug: msg="Logged in as user {{ login.stdout }}"

使用 ansible-playbook 指令執行

 使用 ansible 的指令語法就是

 ansible-playbook  指定的yml檔案

 $ ansible-playbook  4_output_of_command.yml

 PLAY [show return value of command module] ************************************

 GATHERING FACTS ***************************************************************
ok: [cenic_master]

 TASK: [capture output of id command] ******************************************
changed: [cenic_master]

 TASK: [debug msg="Logged in as user {{ login.stdout }}"] **********************
ok: [cenic_master] => {
    "msg": "Logged in as user maxhuang"
}

 PLAY RECAP ********************************************************************
cenic_master               : ok=3    changed=1    unreachable=0    failed=0   

 okay, 今天先到這邊

~ enjoy it
專心投入研究才是王道!!
http://sakananote2.blogspot.com

byblas

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
Re: Ansible 小記 - ping module 與 command module
« 回覆 #1 於: 2015-12-08 14:18 »
sakana大 你好,
小弟剛好這陣子也在使用Ansible這套工具, 但遇到一些問題一直找不到如何解決, 不知sakana大能否替我解惑一下...

小弟在Local有一台CentOS 7的系統安裝Asnible v2的版本, 使用起來一切正常, 透過krb5的AD驗證也都很正常(windows client)... :)
而另一個環境是在AWS的cloud server, 我的Local跟AWS有透過VPN透通, 所以用Local這台CentOS去deploy local/aws都可正常運作(client: linux/windows), 但後來我在AWS裝了一台AWS自己的AMI Linux, 裝了Ansible後(v2), 連線windows client卻一直無法成功(但Local的Centos可以),  :'( 後來查了很久覺得是python的版本問題, AWS的AMI Linux是安裝python-2.7.10(Local的CentOS是安裝2.7.6), 我後來另外裝了一台AWS AMI Linux是2.6.X的python後, 就可以連到我的windows client, 但python-2.6.x要透過krb5驗證AD也一樣出現問題... :'(, 不知sakana大大有沒有這方面了解, 可以提供小弟有個debug的方向, 不好意思來打擾了!

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2584
  • 性別: 男
    • 檢視個人資料
    • sakananote
Re: Ansible 小記 - ping module 與 command module
« 回覆 #2 於: 2015-12-09 00:55 »
byblas 您客氣了

大家一起討論, 我也是剛摸呢 ^^
目前是沒有用 AWS

不知道您 使用 -vvvv 秀出 verbose 資訊
$ ansbile  -vvvv 對象 -m ping
錯誤訊息有看到哪些錯誤嗎?

我 debug 會先使用 -vvvv

給您參考
專心投入研究才是王道!!
http://sakananote2.blogspot.com

byblas

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
Re: Ansible 小記 - ping module 與 command module
« 回覆 #3 於: 2015-12-09 15:05 »
sakana大,

我目前安裝python-2.7.10的機器已砍掉了, 而之前提到另一台安裝ansible v2+python-2.6.9, 如果是用client端的Local Account會正常, 但透過krb走AD驗證的話, 會出現以下錯誤...(但我用local的CentOS7都是正常的)

ansible all -m win_ping -vvvvv
Using /etc/ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<servername.domain.com> ESTABLISH WINRM CONNECTION FOR USER: myaccount@mydomain.com on PORT 5986 TO servername.domain.com
<servername.domain.com> WINRM CONNECT: transport=plaintext endpoint=https://servername.domain.com:5986/wsman
<servername.domain.com> WINRM CONNECTION ERROR: 401 Unauthorized. basic auth failed
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/ansible/plugins/connection/winrm.py", line 126, in _winrm_connect
    protocol.send_message('')
  File "/usr/local/lib/python2.6/site-packages/winrm/protocol.py", line 193, in send_message
    return self.transport.send_message(message)
  File "/usr/local/lib/python2.6/site-packages/winrm/transport.py", line 125, in send_message
    raise UnauthorizedError(transport='plaintext', message=ex.msg)
UnauthorizedError: 401 Unauthorized. basic auth failed
servername.domain.com | FAILED! => {
    "failed": true,
    "msg": "ERROR! plaintext: 401 Unauthorized. basic auth failed"
}

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2584
  • 性別: 男
    • 檢視個人資料
    • sakananote
Re: Ansible 小記 - ping module 與 command module
« 回覆 #4 於: 2015-12-10 01:17 »
他錯誤訊息是驗證錯誤
 plaintext: 401 Unauthorized. basic auth failed

ansible.cfg 他抓的是 global 的
 /etc/ansible/ansible.cfg

這個是你希望他抓的 ansible.cfg 嗎?


專心投入研究才是王道!!
http://sakananote2.blogspot.com

byblas

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
Re: Ansible 小記 - ping module 與 command module
« 回覆 #5 於: 2015-12-10 12:35 »
sakana大,

是的, 那是Global的default config cfg檔, 原則上我沒改太多設定, 我比較覺得奇怪的是,
因為我去我的windows client上看, 它的basic auth是有開啟的, 所以我Local的那台去打
是驗證OK的, 但client沒變動的狀況下, 用aws這台去打就是驗證不過, 2台server的cfg設
定都一樣, 版本也想同, 就是python跟OS版本不同而已

也試過ansible project有些同好說的, 去改transport.py這個檔案, 結果也是一樣沒辦法 ???

byblas

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
Re: Ansible 小記 - ping module 與 command module
« 回覆 #6 於: 2015-12-10 12:45 »
sakana大,

我之前用AWS AMI Linux(python-2.7.10), 透過client local account會出現以下的訊息,
WINRM CONNECTION ERROR: 500 WinRMTransport. [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

一樣試了很多方法, 還是不行(連local account都過不去), 所以才會改試用2.6.x的版本, 發現
改用2.6.x後, 用client local account就正常了, 所以才會覺得是python的版本問題