用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即可,省时省力。
欢迎补充。
本文出自 “天涯海阁” 博客,请务必保留此出处http://shanker.blog.51cto.com/1189689/1783379