目录

ansible

ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。


安装

  1. yum install ansible

注意事项

  1. 被管理的服务器需要安装python2.4以上的版本。如果版本是2.5一下还需额外安装python-simplejson(centos5.x),centos6没有问题

关键配置文件

[lan]  #组名
10.0.2.220 ansible_ssh_user=root   #没有指定密码默认用ssh密钥登录
10.0.2.178 ansible_ssh_user=root
10.0.1.[179:180] ansible_ssh_user=root  #指定ip范围

[local_host]  #组名
10.0.2.220 ansible_ssh_user=root ansible_ssh_pass=******  #指定帐号密码登录

[local:children]  #父组
local_1
local_2

[local_2]  #子组
10.0.2.178 ansible_ssh_user=root

[local_1]  #子组
10.0.1.179 ansible_ssh_user=root

最佳配置

host_key_checking = False #如果用ssh验证,且服务器重装系统之后,会因为服务器的ssh key与本机的known_hosts文件中内容不同,而引发生错。这个参数的作用是不去check本机的known_hosts文件

基本用法

ansible -i 清单文件 目标组 -m 模块名 -a 传递给模块的参数

下面是一些常用模块的使用方法:


主机匹配


playbook

---
- hosts: local
  remote_user: root
  tasks:
    - name: first
      shell: echo "first" >> file.fang
      notify:
        - fang  #第一次触发任务fang
    - name: second
      shell: echo "second" >>file.fang
      notify:
        - fang  #第二次触发任务fang
  handlers:
    - name: fang #但是最终只执行一次
      shell: echo "fang" >> file.fang

ansible-playbook fang.yml #执行playbook

cat file.fang #登录服务器,查看执行结果

first
second
fang

执行playbook前用ansible-playbook fang.yml –list-hosts命令查看会被影响的主机列表

role 例子

虽然叫role,其实更准确的说法应该是子任务。role之间还可以有依赖关系。更多见:http://docs.ansible.com/playbooks_roles.html

目录结构

├── first.yml
├── foo.yml
├── hosts.file
└── roles
    ├── ro1
    │   └── tasks
    │       ├── init.yml
    │       └── main.yml
first.yml

---
- hosts: local
  remote_user: root
  tasks:
    - include: foo.yml   # 包含其他yml文件
    - name: first
      shell: echo "first" >> file.fang
  roles:   # 优先于tasks执行
    - ro1  # 自include  ./roles/ro1/tasks/main.yml文件(描素task)
           # 同理,会自动include ./roles/ro1/vars/main.yml文件(描素变量)
foo.yml

- name: foo
  shell: echo "include" >> file.fang
roles/ro1/tasks/main.yml

- include: init.yml  # 包含其他yml文件
  tags:   # 为这个任务设置标签
    - init

- name: ro1
  shell: echo "ro1" >> file.fang
  tags:   # 为这个任务设置标签
    - main
roles/ro1/tasks/init.yml

- name: ro11
  shell: echo "ro11" >> file.fang