用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即可,省時省力。
歡迎補充。