Ansible批量快速初始化新機器運維環境

用Ansible也有兩年多時間了,之前做初始化工作都是在kickstart的配置文件里加上自己的shell腳本來初始化系統環境,現在的運維環境不同,前期的系統安裝工作交由IDC部門處理,我這邊能做的就是用腳本自己初始化自己喜歡的運維環境。沒用Ansible之前用shell也可以實現他的某些功能,比如用Ad-Hoc的場景下,基於生產環境的內網SSH Key 互信的環境,寫個for循環也可以實現簡單的功能,但是Ansible絕不止這點作用,使用好他的Playbook,可以讓你成爲一個出色的運維工程師的同時,拿到奧斯卡最佳系統運維導演獎(如果有的話)。


下面這個Playbook是我做的初始化新機器運維環境的,是一個all-in-one的文件,並沒有將vars, tasks, templates, handlers這些分開寫。 (老規矩,在我的github上可以下載。)

---
- hosts: new
  remote_user: shanker
  sudo: yes
  gather_facts: true
  vars:
    user: shanker
  tasks:
  - name: install provisioning tools, git and zsh dstat via yum
    yum: name={{ item }} state=installed
    when: ansible_os_family == "RedHat"
    with_items:
     - git
     - zsh
     - dstat
     - screen
  - name: install provisioning tools, git and zsh dstat via apt-get
    apt: name={{ item }} state=installed
    when: ansible_os_family == "Debian"
    with_items:
     - git
     - zsh
     - dstat
     - screen

  - name: install epel on centos6 
    yum: name=http://archive.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm state=present
    when: ansible_os_family == "RedHat" and ansible_distribution_version|int <7
  - name: install epel on centos7 
    yum: name=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm state=present
    when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=7

  - name: install zsh as default shell
    script: /etc/ansible/setuptools/init_zsh.sh
  - name: copy default screen file
    copy: src=/etc/ansible/setuptools/screenrc dest=/etc/screenrc mode=0644 owner=root group=root
  - name: copy ssh provate key
    copy: src=/etc/ansible/setuptools/shanker.pri dest=/home/`user`/.ssh/ mode=0600 owner=`user` group=`user`
  - name: copy ssh config
    copy: src=/etc/ansible/setuptools/config dest=/home/`user`/.ssh/ mode=0644 owner=`user` group=`user`

hosts: new, new是在/etc/ansible/hosts裏定義的組,這裏你可以隨便定義,格式是這樣的中括號裏面就是組名,然後下面的是機器名稱:

[new]

ukcent1

ukcent2


remote_user: shanker, 是指遠程執行Playbook的用戶名。

sudo: yes, 是運行shanker 用sudo的形式執行一些需要用到超級用戶權限的命令。

gather_facts: true, 是讓Ansible收取系統環境變量信息,爲下面的判斷系統是Redhead or Debian做鋪墊。

vars: 

    user: shanker, 是user這個變量值是shanker,在下面的copy ssh key到home目錄的時候需要用到。


tasks以下就是將要執行的一系列命令:


上半部分的安裝系統軟件這塊用到了Ansible的Loop 和 Conditionals 語法

{

具體可以參考官方文檔:

http://docs.ansible.com/ansible/playbooks_loops.html

http://docs.ansible.com/ansible/playbooks_conditionals.html

}

判斷如果該系統的family是Redhat系列的就用yum模塊來安裝軟件,如果是Debian系列的就用apt-get來安裝,並且with_items可以實現需要安裝那些軟件,可以自己擴容。


然後判斷如果是centos的系統,並且是centos6.*的話 用6的epel包,如果是7的系統就用7的epel包。


然後下面的scrip模塊,告訴Ansible在遠程機器上執行我的初始化zsh腳本,已經習慣了zsh的強大,這個一定要加上。


後面的copy模塊實現了,自己常用的配置文件的複製,比如可以自己加上vimrc, screen, tmux,bashrc等等。


最後就是copy我的私鑰到新機器的家目錄下,用到了上面vars設置的變量user。


完成之後每次有新機器給你維護,只需要添加機器到hosts裏面,然後運行改Playbook即可,省時省力。


歡迎補充。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章