Ansible运维自动化

最近想把手上上百多台的vps全部纳入公司的管理平台统一管理,管理方式是通过snmp的方式进行通信。现在问题来了,这些vps的snmp配置参差不齐,有些连snmp都没有安装。上百多台机器要手动一台台去配置效率太低。这时候ansible就体现出它的价值了。

一、ansible结构

├── hosts
├── roles
│   └── snmp
│       ├── files
│       │   ├── snmpd
│       │   └── snmpd.conf
│       ├── tasks
│       │   ├── copy.yml
│       │   ├── delete.yml
│       │   ├── install.yml
│       │   └── main.yml
│       ├── templates
│       └── main.yml
└── site.yml

PS:

hosts:里面是需要更改的机器IP

roles:是规则文件夹,下面可以根据不同的规则定义不同的文件夹,如:snmp

files:存放需要同步到其他机器的文件

tasks:工作脚本

main.yml:主脚本

site.yml:指定hosts和roles的规则文件夹

二、脚本内容

site.yml

---

- hosts: all

roles:

- snmp

PS:运行hosts里的全部ip和调用snmp文件夹下的脚本

main.yml

- include: install.yml

- include: copy.yml

PS:运行install.yml和copy.yml脚本

copy.yml

- name: Copy configure file
copy: src={{ item }} dest=/etc/snmp/
with_items:
- snmpd.conf

- name: restart snmpd
shell: /etc/init.d/snmpd restart

PS:

-name:相当于注释

copy:src后面跟的是一个变量,方便修改;dest的路径是copy到目标机器的路径

with_items:src上的变量

shell:脚本命令

install.yml

- name: install snmpd
shell: yum install -y {{ item }} {{ item }}
with_items:
- net-snmp
- net-snmp-utils

三、语法命令

1、基本命令

ansible-playbook -i hosts site.yml

2、不想一次全部运行hosts里的ip

ansible-playbook -i hosts site.yml --extra-vars "hosts=db"

PS:--extra-vars指定运行的ip组

这时候还需要更改以下几个地方:

1、hosts文件的格式(把IP分成了db和ap两组)

[db]

192.168.1.10

[ap]

192.168.1.11

2、site.yml格式(hosts后面的all替换成'{{hosts}}')

---

- hosts: '{{ hosts }}'

roles:

- snmp

3、main.yml格式(添加when语句,指定运行db组)

- include: install.yml

when:"hosts == 'db'"

- include: copy.yml

when:"hosts == 'db'"

 

weinxin
聂扬帆博客
一个分享IT运维相关工作经验和实战技巧的个人博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: