前言
ansile是用于批量化管理和运维的工具,主要解决的点在于批量实现命令运行。下面主要采用场景例子的方式简单说明一些常见选项的用法
环境说明
IP | 主机名 |
---|---|
192.168.1.31 | absible |
192.168.1.32 | web1 |
192.168.1.33 | web2 |
192.168.1.34 | db1 |
192.168.1.35 | db2 |
192.168.1.36 | cache |
[root@ansible ~]#ansible --version
ansible 2.4.2.0
python version = 2.7.5
基本使用
[root@ansible ~]# cat ping.yml
---
- hosts: all ---------> 将要执行playbook的远程集群
remote_user: root -------->远程的身份
tasks: --------->定义将要在远程主机上执行的任务列表
- ping: ---------->执行的模块
部署web服务
[root@ansible ~]# cat http.yml
---
- hosts: web
remote_user: root
tasks:
- yum:
name: httpd
- service:
name: httpd
state: started
enabled: yes
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen 80' --------> 匹配的行
line: 'Listen 8080' -------> 修改后的行
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '#ServerName www.example.com:80'
line: 'ServerName www.localhost.com'
- copy:
src: /root/index.html
dest: /var/www/html/index.html
- service:
name: httpd
state: restarted
集群的自动化部署
触发器设定
[root@ansible ~]# cat httpconf.yml
---
- hosts: web
remote_user: root
tasks:
- copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
tags: aa --------> 对copy的模块打标签
notify: abc
handlers:
- name: abc
service:
name: httpd
state: restarted
说明
notify可以触发多个条件
handlers当监控的资源达到阀值后要采取的操作
效果:
当远程的集群配置文件修改,自动重启服务
变量应用
[root@ansible ~]# cat user.yml
---
- hosts: cache
remote_user: root
vars:
username: haha -------> 定义变量名
tasks:
- user:
name: "{{username}}" -------------> 调用变量名
- shell: echo 1 | passwd --stdin "{{username}}"
- shell: chage -d 0 "{{username}}"
变量名的表示方法:”{{变量名}}“
远程集群批量创建用户
when 判断
[root@ansible ~]# cat load.yml
---
- hosts: web
remote_user: root
tasks:
- shell: uptime | awk '{printf ("%.2f", $(NF-2)) }'
register: load ---------> 收集shell命令的所有输出
- service:
name: httpd
state: stopped
when: load.stdout|float > 0.09 ---------> 判断标准输出的值是否大于阀值
- shell: wall help
when: load.stdout|float > 0.07
说明
load.stdout: 获取load的标准输出
|float : 调用浮点函数,将json输出转成浮点,和数值比较
执行playbook时获取负载值,达到触发值后执行对应动作
调用函数加密
[root@yaya ansible]# cat user02.yml
---
- hosts: web
remote_user: root
tasks:
- user:
name: z3
password: "{{'123'|password_hash('sha512')}}"
说明
在使用user的模块时,密码字串会以明文的方式写入到密码文件,因而必须要调用函数进行sha512加密
复杂的数据结构应用,循环
[root@yaya ansible]# cat user03.yml
---
- hosts: db
remote_user: root
tasks:
- user:
name: "{{item.username}}"
group: "{{item.group}}"
password: "{{item.password|password_hash('sha512')}}"
with_items:
-
username: nb
password: bn
group: users
-
username: wk
password: kw
group: man
-
username: dd
password: dd
group: daemon
-
username: jj
password: 123qqq...A
group: mysql
-
username: xx
password: oo
group: root
说明
ansible的文件格式:YAML数据的高级应用
with_items: 循环标签
效果:
可以使得不同的用户赋予个性化的设定
未完待续…