常用模块说明
- command : 在远程主机上执行命令操作 默认模块
- shell : 在远程主机上执行命令操作 万能模块 在剧本中有时不能反复执行!!!
- script : 批量执行本地脚本
- copy : 用于批量分发传输数据信息
- fetch : 用于将远程主机数据进行拉取到本地管理主机
- file : 修改数据属性信息/创建数据信息
- yum : 用于安装和卸载软件包
- service : 用于管理服务的运行状态
- user : 用于批量创建用户并设置密码信息
- mount : 用于批量挂载操作
- cron : 批量部署定时任务信息
- ping : 远程管理测试模块
ansible服务剧本功能
主机名称和IP地址规划
服务 | 主机名 | eth0网卡IP | eth1网卡IP | 软件 |
---|---|---|---|---|
防火墙服务器 | firewalld | 10.0.0.81 | 172.16.1.81 | firewalld |
负载均衡服务器 | lb01 | 10.0.0.5 | 172.16.1.5 | nginx,keepalived |
负载均衡服务器 | lb02 | 10.0.0.6 | 172.16.1.6 | nginx,keepalived |
web服务器 | web01 | 10.0.0.7 | 172.16.1.7 | nginx |
web服务器 | web02 | 10.0.0.8 | 172.16.1.8 | nginx |
web服务器 | web03 | 10.0.0.9 | 172.16.1.9 | nginx |
存储服务器 | nfs01 | 10.0.0.31 | 172.16.1.31 | nfs |
备份服务器 | backup | 10.0.0.41 | 172.16.1.41 | rsync |
数据库服务器 | db01 | 10.0.0.51 | 172.16.1.51 | mysql,mariaDB |
批量管理服务器 | m01 | 10.0.0.61 | 172.16.1.61 | ansible |
跳板机服务器 | jumpserver | 10.0.0.71 | 172.16.1.71 | jumpserver |
监控服务器 | zabbix | 10.0.0.72 | 172.16.1.72 | zabbix |
缓存服务器 | 暂无 | 暂无 | 暂无 | 暂无 |
剧本的组成部分
剧本的语法规范
- 空格规范: 实现缩进功能
- 冒号规范: 实现键值定义
- 横线规范: 实现列表显示
剧本编写常见错误
- 剧本语法规范是否符合(空格 冒号 短横线)
- 剧本中模块使用是否正确
- 剧本中一个name标识下面只能写一个模块任务信息
- 剧本中尽量不要大量使用shell模块
利用剧本完成服务一键化部署
一键配置rsync服务端和客户端
#服务端
- hosts: 172.16.1.41
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/tmp/rsyncd.conf dest=/etc/
- name: 03-useradd rsync
user: name=rsync shell=/sbin/nologin create_home=no
- name: 04-touch rsync.password
copy: content='rsync_backup:123456' dest=/etc/rsync.password mode=600
- name: 05-mkdir /backup
file: dest=/backup owner=rsync group=rsync state=directory
- name: 06-start enable rsyncd
service: name=rsyncd state=started enabled=yes
#客户端
- hosts: 172.16.1.31
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-touch rsync.password
copy: content='123456' dest=/etc/rsync.password mode=600
- name: 03-check hosts
shell: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
配置主机清单
/etc/ansible/hosts
分组配置主机信息
[data]
172.16.1.31
172.16.1.41
[web]
172.16.1.7
- 运行效果
[root@m01 ansible-playbook]# ansible data -a "hostname"
172.16.1.31 | CHANGED | rc=0 >>
nfs01
172.16.1.41 | CHANGED | rc=0 >>
backup
[root@m01 ansible-playbook]# ansible web -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
主机名符号匹配配置
[web]
172.16.1.[7:9]
#也可以在/etc/hosts文件配置好ip后使用主机名
#[web]
#web[01:03]
- 运行效果
[root@m01 ansible-playbook]# ansible web -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
172.16.1.8 | CHANGED | rc=0 >>
web02
172.16.1.9 | CHANGED | rc=0 >>
web03
跟上非标准远程端口
[web]
172.16.1.7:52113
#也可以在/etc/hosts文件配置好ip后使用主机名
#[web]
#web01:52113
- 运行效果
[root@m01 ansible-playbook]# ansible web -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
主机使用特殊的变量
#[web]
#172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#嵌入式变量信息,将配置写入hosts文件
#[web:vars]
#ansible_ssh_host=172.16.1.7
#ansible_ssh_port=22
#ansible_ssh_user=root
#ansible_ssh_pass=123456
#[web]
#web01
#也可以不在/etc/hosts文件配置好ip
[web]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
- 运行效果
[root@m01 ansible-playbook]# ansible web -a "hostname"
web01 | CHANGED | rc=0 >>
web01
主机组名嵌入配置
[rsync:children]
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.7
- 运行结果
[root@m01 ~]# ansible rsync -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
172.16.1.41 | CHANGED | rc=0 >>
backup
172.16.1.31 | CHANGED | rc=0 >>
nfs01
[root@m01 ~]# ansible rsync_server -a "hostname"
172.16.1.41 | CHANGED | rc=0 >>
backup
剧本的扩展功能配置
在剧本中设置变量信息
直接在剧本文件编写
#服务端
- hosts: rsync_server
vars:
backdir: /backup1
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/tmp/rsyncd.conf dest=/etc/
- name: 03-useradd rsync
user: name=rsync shell=/sbin/nologin create_home=no
- name: 04-touch rsync.password
copy: content='rsync_backup:123456' dest=/etc/rsync.password mode=600
- name: 05-mkdir /backup
file: dest={{ backdir }} owner=rsync group=rsync state=directory
- name: 06-start enable rsyncd
service: name=rsyncd state=started enabled=yes
在命令行中进行指定
ansible-playbook --extra-vars=backdir=/backup2 rsync.yaml
ansible-playbook -e backdir=/backup2 rsync.yaml
在主机清单文件编写
[rsync_server]
172.16.1.41
[rsync_server:vars]
backdir=/backup3
[rsync_client]
172.16.1.7
172.16.1.31
变量优先级排序
在主机清单文件编写
低直接在剧本文件编写
中在命令行中进行指定
高
如何全局设置变量
- roles 剧本整合
在剧本中设置注册信息
设置服务端剧本,使用
ss -lntup|grep rsync
查看rsync服务是否启动
#服务端
- hosts: rsync_server
# vars:
# backdir: /backup1
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/tmp/rsyncd.conf dest=/etc/
- name: 03-useradd rsync
user: name=rsync shell=/sbin/nologin create_home=no
- name: 04-touch rsync.password
copy: content='rsync_backup:123456' dest=/etc/rsync.password mode=600
- name: 05-mkdir /backup
file: dest={{ backdir }} owner=rsync group=rsync state=directory
- name: 06-start enable rsyncd
service: name=rsyncd state=started enabled=yes
- name: 07-check server
shell: ss -lntup|grep rsync
register: port_server
- name: print server
debug: msg={{port_server}}
其中会有一段结果为以下内容,选取
stdout_lines
的部分
TASK [print server] *************************************************************
ok: [172.16.1.41] => {
"msg": {
"changed": true,
"cmd": "ss -lntup|grep rsync",
"delta": "0:00:00.040566",
"end": "2019-12-19 20:11:16.812264",
"failed": false,
"rc": 0,
"start": "2019-12-19 20:11:16.771698",
"stderr": "",
"stderr_lines": [],
"stdout": "tcp LISTEN 0 5 *:873 *:* users:((\"rsync\",pid=1786,fd=3))\ntcp LISTEN 0 5 :::873 :::* users:((\"rsync\",pid=1786,fd=5))",
"stdout_lines": [
"tcp LISTEN 0 5 *:873 *:* users:((\"rsync\",pid=1786,fd=3))",
"tcp LISTEN 0 5 :::873 :::* users:((\"rsync\",pid=1786,fd=5))"
]
}
}
改动后的服务端剧本为以下内容
#服务端
- hosts: rsync_server
# vars:
# backdir: /backup1
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/tmp/rsyncd.conf dest=/etc/
- name: 03-useradd rsync
user: name=rsync shell=/sbin/nologin create_home=no
- name: 04-touch rsync.password
copy: content='rsync_backup:123456' dest=/etc/rsync.password mode=600
- name: 05-mkdir /backup
file: dest={{ backdir }} owner=rsync group=rsync state=directory
- name: 06-start enable rsyncd
service: name=rsyncd state=started enabled=yes
- name: 07-check server
shell: ss -lntup|grep rsync
register: port_server
- name: print server
debug: msg={{ port_server.stdout_lines }}
只显示rsync服务的内容,这样就可以确认rsync服务是否启动
TASK [print server] *************************************************************
ok: [172.16.1.41] => {
"msg": [
"tcp LISTEN 0 5 *:873 *:* users:((\"rsync\",pid=1786,fd=3))",
"tcp LISTEN 0 5 :::873 :::* users:((\"rsync\",pid=1786,fd=5))"
]
}
在剧本中设置判断信息
- 设置两个创建文件的操作,并设置when
- 设置debug输出ip信息
#客户端
- hosts: rsync_client
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-touch rsync.password
copy: content='123456' dest=/etc/rsync.password mode=600
- name: test touch
copy: content='{{ ansible_eth0.ipv4.address }}' dest=/tmp/nfs.txt
when: (ansible_hostname == "nfs01")
- name: test touch
copy: content='{{ ansible_eth0.ipv4.address }}' dest=/tmp/web.txt
when: (ansible_hostname == "web01")
- name: print server
debug: msg={{ ansible_eth0.ipv4.address }}
- name: 03-check hosts
shell: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
- 运行结果,有两个结果分别为
skipping
和changed
,一条执行一条跳过 - 输出结果中获得了ip
TASK [test touch] ***************************************************************
skipping: [172.16.1.7]
changed: [172.16.1.31]
TASK [test touch] ***************************************************************
skipping: [172.16.1.31]
changed: [172.16.1.7]
TASK [print server] *************************************************************
ok: [172.16.1.7] => {
"msg": "10.0.0.7"
}
ok: [172.16.1.31] => {
"msg": "10.0.0.31"
}
获取内置变量方法
ansible rsync_server -m setup -a "filter=ansible_hostname"
常见主机信息
- ansible_all_ipv4_addresses : 仅显示ipv4的信息
- ansible_devices : 仅显示磁盘设备信息
- ansible_distribution : 显示是什么系统
- ansible_distribution_major_version : 显示是系统主版本
- ansible_distribution_version : 仅显示系统版本
- ansible_machine : 显示系统类型,32位,64位
- ansible_eth0 : 仅显示eth0的信息
- ansible_hostname : 仅显示主机名
- ansible_kernel : 仅显示内核版本
- ansible_lvm : 显示lvm相关信息
- ansible_memtotal_mb : 显示系统总内存
- ansible_memfree_mb : 显示可用系统内存
- ansible_memory_mb : 详细显示内存情况
- ansible_swaptotal_mb : 显示总的swap内存
- ansible_swapfree_mb : 显示swap内存的可用内存
- ansible_mounts : 显示系统磁盘挂载情况
- ansible_processor : 显示cpu个数(具体显示每个cpu的型号)
- ansible_processor_vcpus : 显示cpu个数(只显示总的个数)
可以在剧本中使用
ansible_eth0.ipv4.address
获得ip
最后一次更新于2020-01-10 21:30
0 条评论