### [筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info

2019-04-23 筆記 Eric Chang

最近因為一直碰到硬碟故障的問題，算起來那一批同時購買的5X顆 seagate 2T硬碟，已經有一半以上故障返修了….

然後又因為一直沒有添購新的硬碟，只能用這些快過保/已過保的撐著

所以最近不斷的在更換機器內的硬碟，而且還沒有熱插拔！

也導致原本負責處理盤點資產的同事困擾，因為跟手邊的紀錄已經對不起來了

然後就變成要對資產的時候，需要一台一台登入，然後去下不同的指令，取得想要的硬體資訊，超級麻煩的！

幾次之後，終於決定透過ansible來做這件事

一開始的想法很簡單，就用 lshw/dmidecode這些指令去做

可是因為手邊的機器有ubuntu 18.04/16.04/14.04 , Debian 9 , Proxmox (based on debian ) , CentOS , FreeNAS

而有些系統預設沒有 lshw / dmidecode (對，FreeNAS 就是說你)

所以變成要依照系統不同，去下不同的指令，雖然都是ansible在跑，但是看到playbook的內容就很煩啊！

然後就不小心讓我翻到了 inxi 這個指令，根本就是救星啊！

直接來看輸出的範例

有沒有，是不是很優！

而且簡單易懂，還能抓到同事想看的資料，像是廠牌、型號、序號、記憶體類型(DDR2/3/4)

所以馬上捨棄 lshw/dmidecode ，改用 inxi 來跑

ansible role 的內容也很簡單

就偵測完之後，把結果送出給設定好的收件人

只是因為系統不同，大致上要分成 ubuntu/debian/centos 以及 freebsd 兩種

所以同樣的task 要跑兩次，一個要帶sudo 一個不用帶

然後BSD系列的機器，在inventory 裡面要帶入 ansible_ssh_user

就這樣，沒有什麼太困難的

    ######### use inxi instead ##################
    - name: copy inxi binary to remote Ubnutu/Debian
      become: yes
      become_method: sudo
      copy:
       src: inxi
       dest: /usr/local/bin/inxi
       mode: a+rx,u+rwx
      when: ansible_distribution == "Ubuntu" or ansible_distribution == "Debian" or ansible_distribution == "CentOS"

    - name: copy inxi binary to remote FreeBSD
      copy:
       src: inxi
       dest: /usr/local/bin/inxi
       mode: a+rx,u+rwx
      when: ansible_distribution == "FreeBSD"

    - name: run inxi to collect Ubuntu/Debian hardware info
      become: yes
      become_method: sudo
      shell: "/usr/local/bin/inxi -c -Dxx -C -m -Z"
      register: du_hw_info
      when: ansible_distribution == "Ubuntu" or ansible_distribution == "Debian" or ansible_distribution == "CentOS"

    - name: run inxi to collect FreeBSD hardware info
      shell: "/usr/local/bin/inxi -c -Dxx -C -m -Z"
      register: bsd_hw_info
      when: ansible_distribution == "FreeBSD"

    - name: set Ubuntu/Debian inventory file
      template:
       src: etc/inventory.txt.j2
       dest: "/tmp/{{ ansible_hostname }}_inventory.txt"
       mode: a+r,u+rw
      when: ansible_distribution == "Ubuntu" or ansible_distribution == "Debian" or ansible_distribution == "CentOS"

    - name: set FreeBSD inventory file
      template:
       src: etc/freenas_inventory.txt.j2
       dest: "/tmp/{{ ansible_hostname }}_inventory.txt"
       mode: a+r,u+rw
      when: ansible_distribution == "FreeBSD"

    - name: send inventory file via mail
      tags: mail
      mail:
        host: 192.168.11.173
        port: 25
        secure: starttls
        subject: "{{ ansible_hostname }} inventory file"
        from: ansible
        to: "{{ recipient }}"
        #body: "{{ mail_body.stdout_lines }}"
        attach: "/tmp/{{ ansible_hostname }}_inventory.txt"

inventory 內容

    hqs01.abc.com ansible_ssh_host=192.168.11.1
    hqs210.abc.com
    hqs230.abc.com
    hqs231.abc.com
    hqs234.abc.com
    hqs03.abc.com
    hqs020.abc.com
    hqs019.abc.com
    hqs010.abc.com
    hqs05.abc.com
    hqs173.abc.com
    ###BSD Hosts ###
    hqs099.abc.com ansible_ssh_host=192.168.11.99 ansible_ssh_port=22 ansible_ssh_user=root
    hqs202.abc.com ansible_ssh_host=192.168.11.202 ansible_ssh_port=22 ansible_ssh_user=root
    bbs089.abc.com ansible_ssh_host=192.168.0.89 ansible_ssh_user=root

ansible 又發揮了一次，另外，感覺這個指令可以用來寫資產管理系統耶…威力強大

而且又不用管作業系統是什麼，反正有執行檔，直接派過去 remote 端就好了！

真是讓我相見恨晚啊！

comments powered by Disqus
© 2017 by Lednerb
Bilberry Hugo Theme