ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。
[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 传递给模块的参数
下面是一些常用模块的使用方法:
--- - 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
first second fang
执行playbook前用ansible-playbook fang.yml –list-hosts命令查看会被影响的主机列表
虽然叫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