Ansible-新装系统初始化
介绍
ansible是一个自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible架构相对比较简单,无需agnet,仅需通过SSH连接客户机即可执行任务。
简单任务可以直接使用命令行方式运行,较复杂任务可以通过编写playbook方式运行,以下例子通过编写palybook方式,使用角色区分,简单初始化centos7。
语法参考:https://docs.ansible.com/ansible/latest/modules/modules_by_category.htm
Ansible Galaxy命令,用于安装指定的角色或集合:https://galaxy.ansible.com/
初始化文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| mkdir ansible-init cd ansible-init mkdir roles touch ansible-host.lst
cd roles ansible-galaxy init common
ansible-init/ ├── ansible-host.lst └── roles └── common ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml
10 directories, 9 files
|
配置主机清单 ansible/ansible-host.lst
将主机分组,并定义变量,指定运行的用户或明文密码
1 2 3 4 5 6 7 8 9 10
| [all] 192.168.8.252 hostname=vm252 server_type=app 192.168.8.253 hostname=vm252 server_type=db
[db] 192.168.8.253 hostname=vm252 server_type=db
[all:vars] ansible_user=root ansible_password=12341234
|
入口脚本 ansible/init.yml
这个是整个playbook入口,可以按不同主机组运行不同角色(roles)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ---
- hosts: all user: root gather_facts: true roles: - common
- hosts: db user: root gather_facts: true roles: - db1 - db2
|
配置主脚本 ansible/roles/common/task/main.yml
主脚本默认为main.yml,里面可以包含各种子任务
1 2 3 4 5 6 7 8
| --- - include_tasks: set-hosts.yml
- include_tasks: set-yum-repo-cdrom.yml - include_tasks: set-centos7.yml
- include_tasks: install-base-tools.yml
|
子任务1,ansible/roles/common/task/set-hosts.yml
这里用到copy,表示会在当前roles的files文件夹里查找hosts文件,并复制到目标主机
1 2 3
| --- - name: set /etc/hosts copy: src=hosts dest=/etc/hosts
|
子任务2,ansible/roles/common/task/set-yum-repo-local.yml
这里用到template,表示会将当前roles的templates文件夹查找local.repo.j2文件,并替换里面的变量后,复制到目标主机。需要修改为变量的场景,适合使用template模块。template使用jinja2语法。
1 2 3
| {{ }} :用来装载表达式,比如变量、运算表达式、比较表达式等。 {% %} :用来装载控制语句,比如 if 控制结构,for循环控制结构。 {# #} :用来装载注释,模板文件被渲染后,注释不会包含在最终生成的文件中。
|
1 2 3 4 5 6
| --- - name: backup yum repo files shell: 'find /etc/yum.repos.d/ -name "*.repo" -exec mv {} {}.$(date +"%Y%m%d%H%M") \;'
- name: set yum repo template: src=local.repo.j2 dest=/etc/yum.repos.d/local.repo
|
用到的变量在vars/main.yml里定义
1 2 3 4 5 6 7 8 9
| prometheus: base_path: /data/moni server: 192.168.8.201:9090 consul: 192.168.8.201:18500 chrony: server: 192.168.8.201 priority_networks: 192.168.8.0/24 yum: server: 192.168.8.251:18001
|
template放在templates文件夹里,上面用到的是local.repo.j2
1 2 3 4 5
| [base] name=local baseurl=http://{{ yum.server }}/ gpgcheck=0 enabled=1
|
运行
1 2 3 4
| ansible-playbook -i ansible_host.lst -C init.yml
ansible-playbook -i ansible_host.lst init.yml
|
总结
整个初始化脚本框架搭建完毕
接下来需要添加各种子脚本,然后在主脚本main.yml引入即可
老年佛系运维 | biglovewheat@126.com