ansible:Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付。Ansible一般通过ssh协议实现linux服务器的管理,但从2.1版本开始,ansible core modules加入了对cisco ios设备的支持,对应的模块为ios_command, ios_config, ios_template。以下拓扑图是用于ansible测试的的

b9beb74dc78824963a37973bbc8199c1.png

    其中右上角的LinuxCacti里面是通过桥接至EVE-NG,此服务器里集成了cacti、ansible等工具。  

   7e84c8a632b5c15c5105cadbfa22171b.png    

一、 思科设备要设定ssh登录

aaa new-model

username admin privilege 15 password 7 142713181F1325392066626771

ip domain name vmise.com

crypto key generate rsa modulus 1024

line vty 0 4

transport input telnet ssh


二、ansible book 

1.建立switchhost文件,switchhost文件内容格式如下:

  1df9aefd0e1af31f26092e08dbc0267a.png

  备注:router表示设备分组,此可以自行定义,这个名字要跟后面的配置文档的名称一至。如下图就表示两个分组

 2dbd66043ddd0f2deb73ec2536bd8ed6.png 

2.建立三种类型的配置方案,文件结构如下:

  99ef89876460b9493a3586449644bb6d.png  56dd9920a509ca80f92b232ebd12d0b7.png  090e29c289fe467ce2173d92dc0a6a24.png

3. 配置设定以router_acl这个为案例说明,router_acl目录结构如下:

  aeb0c366e56c444fae7e08a615cd102d.png 

4. router_acl中的tasks(即是需要执行的任务),配置如下:

[root@host05 tasks]# cat main.yml 

---

  - name: description cli

    set_fact:  

      cli:

        host: "`ansible_host`"   

        username: "`username`"   --->从vars中配置的传过来参数

        password: "`password`"   --->从vars中配置的传过来参数

        transport: cli

 

  - name: configure acl

    ios_template:

      src: config.j2             ---->templates里的配置文件,即是路由器的配置脚本

      provider: "`cli`"

  

  - name: save running-config 

    ios_command:

      commands: write memory    ----> 配置保存命令

      provider: "`cli`"

    register: write_output


5. router_acl的vars配置文档

[root@host05 vars]# cat main.yml 

username: admin              ----->定义用户名

password: Password.123       ----->定义用户密码

router_interface:            --->定义路由器接口组名称,后面执行作任务是要调用

  - Ethernet1/0

  - Ethernet1/1

  - Ethernet1/2

6.router_acl中的templates 部分配置config.j2,即是路由器配置脚本

[root@host05 templates]# cat config.j2 

ip access-list extended ingress-filter

  remark Unassigned IANA address

  1 deny ip 1.0.0.0 0.255.255.255 any

  2 deny ip 2.0.0.0 0.255.255.255 any

  3 deny ip 5.0.0.0 0.255.255.255 any

  4 deny ip 7.0.0.0 0.255.255.255 any

  5 deny ip 23.0.0.0 0.255.255.255 any

  6 deny ip 27.0.0.0 0.255.255.255 any

  7 deny ip 31.0.0.0 0.255

{% for interface in router_interface %}  --->router_interface调用vars里的参数

interface `interface`

  ip access-group ingress-filter in  

{% endfor %}

7.router_acl.yml的配置如下:

[root@host05 ansible]# cat router_acl.yml 

---

 -  hosts: router        --->设备组,就是switchhost配置组

    gather_facts: no

    connection: local

    roles:

      - router_acl      

8. 执行脚本命令 ansible-playbook -i switchhost  router_acl.yml ,如成功如下图所示

  117ce7b233b2ebb77148b71f2791b399.png