环境准备阶段,利用EVE模拟器桥接Centos 7 系统实现此次实验
整体网络拓扑
eve桥接设置
一.创建网络yum源
1.进入yum源所在文件路径
cd /etc/yum.repos.d/
2.用wget命令下载repo文件
wget https://mirrors.aliyun.com/repo/Centos-7.repo
3.若没有wget命令,则要安装wget命令
yum install -y wget
4.执行yum源更新命令
yum clean all
yum makecache
yum update -y
如果不使用网络yum源那么有些插件可能会导致没有yum源安装失败
二、安装Ansible
1.设置EPEL仓库
Ansible仓库默认不在yum仓库中,因此我们需要使用下面的命令启用epel仓库。
[root@xuegod63 ~]# yum install epel-release -y
2. 使用yum安装Ansible
[root@xuegod63 ~]# yum install ansible -y
安装完成后,检查ansible版本:
[root@xuegod63 ~]# ansible --version
三、Cisco 开启SSH
hostname R1 ;配置设备名称
ip domain name xxx.com ;设置域名
crypto key generate rsa modulus 1024 ;生成密钥对
lin vty 0 4 ;进入虚拟终端
login local ;使用本地认证
transport input ssh ;允许登入
username huawei password hcie ;创建本地用户名密码
enable password CCIE ;设置enable模式密码
四、linux系统配置域名
vi /etc/hosts
[root@localhost ~]# ssh huawei@R1 ;测试
Password:
R1>
R1>
五、设置ansible主机清单&忽略接收指纹信息
5.1 设置主机清单
(1)修改配置文件
vi /etc/ansible/hosts **;编辑主机清单文件**
[cisco] **;创建cisco组**
[cisco:vars] **;定义cisco组模块变量**
ansible_ssh_user="cisco" **;ssh用户名为cisco**
ansible_ssh_pass="CCIE" **;ssh用户组名为CCIE**
ansible_connection=network_cli **;连接方式使用cli**
ansible_network_os=ios **;操作系统为cisco ios**
ansible_become=yes **;是否获取高级权限**
ansible_become_method=enable **;获取enable 的权限**
ansible_become_pass=CCIE **;enable的密码为CCIE**
[cisco:children] **;定义cisco组的孩子**
router **;cisco组中有Router 组**
switch **;cisco组中有switch组**
[router] **;定义router组**
R1 **;router组中有R1,与R2**
R2
[switch] **;定义switch组**
sw1 **;switch组中有sw1与sw2**
sw2
(2)查看主机清单
[root@localhost ~]# ansible-inventory --list **;查看主机清单信息**
(3)ping 测试
ansible cisco -m ping
**;针对cisco组设备使用ping模块,在组中的设备会回复pong ,与正常的不一样**
ps:这只是一个cisco组,同样情况下,可以定义很多很多组,针对不同型号的设备**
5.2 设置忽略接受指纹信息
vi /etc/ansible/ansible.cfg **;编辑ansible配置文件**
[defaults]
host_key_checking = False
六、ad-hoc模式测试
ansible cisco -m ios_command -a "commands='show run '"
**;针对cisco组中设备,-m调用ios_command模块,-a指定参数,参数为查看所有配置**
ansible cisco -m ios_command -a "commands='show ip int br '" -u huawei -k hcie
**;-u指定登入用户名,-k指定登入密码,凌驾在主机清单上**
ansible R1 -m ios_static_route -a "prefix=2.2.2.2 mask=255.255.255.255 interface=ethernet0/1 next_hop=12.1.1.2 "
**;利用ios_static_route 模块配置静态路由**
ansible cisco -m ios_config -a "backup=True"
**;调用 ios_config模块 执行backup参数备份cisco组中所有配置**
查看
七、Ansible play book 部署
(1)典型Ansible 配置
配置需求:
针对R1
- 使用ios_system模块配置设备名称
- 使用ios_config模块给R1配置环回口
- 使用ios_config模块给R1E0/1接口配置ip地址
- 运行OSPF 设置RID 1.1.1.1并宣告网段
- 给R1创建一个新的用户名密码,admin123 密码admin123
编写剧本文件:
vim lab_R1.yml
---
- hosts: R1
tasks:
- name: R1 hostname
ios_system: hostname=R1
- name: R1 lookpback config
ios_config:
lines:
- ip add 1.1.1.1 255.255.255.0
- no shutdown
parents:
- int loo 0
- name: R1 e0/1 config
ios_config:
lines:
- ip add 12.1.1.1 255.255.255.0
- no shutdown
parents:
- int e0/1
- name: R1 ospf config
ios_config:
lines:
- router-id 1.1.1.1
- network 12.1.1.0 0.0.0.255 area 0
- network 1.1.1.0 0.0.0.255 area 0
parents:
- router ospf 110
- name: R1 useradd
ios_config:
lines:
- username admin123 password admin123
ansible-playbook lab_R2.yml #执行剧本
针对R2
- 使用ios_system模块配置设备名称
- 使用ios_config模块给R2 配置环回口
- 使用ios_config模块给R2 E0/1接口配置ip地址
- 运行OSPF 设置RID 2.2.2.2 并宣告网段
- 给R2创建一个新的用户名密码,admin123 密码admin123
编写剧本文件:
ps:与R1大同小异,直接复制粘贴,修改细节即可
vim lab_R2.yml
---
- hosts: R2
tasks:
- name: R2 hostname
ios_system: hostname=R1
- name: R2 lookpback config
ios_config:
lines:
- ip add 2.2.2.2 255.255.255.0
- no shutdown
parents:
- int loo 0
- name: R2 e0/1 config
ios_config:
lines:
- ip add 12.1.1.2 255.255.255.0
- no shutdown
parents:
- int e0/1
- name: R2 ospf config
ios_config:
lines:
- router-id 2.2.2.2
- network 12.1.1.0 0.0.0.255 area 0
- network 2.2.2.0 0.0.0.255 area 0
parents:
- router ospf 110
- name: R2 useradd
ios_config:
lines:
- username admin123 password admin123
ansible-playbook lab_R2.yml #执行剧本
查看验证
(2)使用数组,与变量定义Ansible剧本
配置需求:
针对R1
分别在e0/1口,e0/0口,lookpback 0口配置DHCP中继,中继地址为 3.3.3.3与2.2.2.2
编写剧本文件:
vim dhcp_relay.yml
---
- hosts: R1
tasks:
- name: config config DHCP relay for all inter on R1
ios_config:
lines:
["ip helper-address 3.3.3.3","ip helper-address 2.2.2.2"]
parents: "{{ item }}" #调用变量
with_items: #定义变量
- interface loopback 0
- interface e0/1
- interface e0/0
知识点解析:
- [“ip helper-address 3.3.3.3”,“ip helper-address 2.2.2.2”]
#定义数组,可以在数组中定义N条命令; - “{{ item }}” #调用变量 item
- with_items: #定义变量,变量中可以包含多个内容 利用数组和变量,可以节省play-book的代码量,节省时间
(3)调用外部变量,
配置需求:
针对R2
- 创建账号为Tigerlab ,密码为XCIE,优先级为15的账号
- 创建账号为 CISCO1,密码为CCIE,优先级为10的账号
- 创建账号为HUAWEI1,密码为HCIE,优先级为5的账号
编写变量文件:
users: #变量名称为users
- {username: Tigerlab,password: XCIE,privilege: 15}
- {username: CISCO1,password: CCIE,privilege: 10}
- {username: HUAWEI1,password: HCIE,privilege: 5}
编写剧本文件:
vim user.yml
- hosts: R2
vars_files: uservars.yml #调用外部变量指定文件名,可以是绝对路径或相对路径
tasks:
- name: add user on R2
ios_user:
name: "{{ item.username }}" #调用item变量
configured_password: "{{ item.password }}"
password_type: password
privilege: "{{ item.privilege }}"
with_items: "{{ users }}" #调用user变量到items
知识点解析:
- 通过外部变量特性,如果在需要增加新的用户直接修改外部变量文件即可