diff --git a/ansible/roles/eos/templates/t0-64-32-leaf.j2 b/ansible/roles/eos/templates/t0-64-32-leaf.j2 index 9501152cf8d..f7a21f4d8b6 100644 --- a/ansible/roles/eos/templates/t0-64-32-leaf.j2 +++ b/ansible/roles/eos/templates/t0-64-32-leaf.j2 @@ -2,6 +2,9 @@ {% set mgmt_ip = ansible_host %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -12,13 +15,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! route-map DEFAULT_ROUTES permit ! @@ -62,6 +68,7 @@ exit ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! @@ -77,7 +84,7 @@ interface {{ name }} {% endif %} {% if iface['lacp'] is defined %} channel-group {{ iface['lacp'] }} mode active - lacp rate fast + lacp rate normal {% endif %} {% if iface['ipv4'] is defined %} ip address {{ iface['ipv4'] }} @@ -148,5 +155,3 @@ management api http-commands no shutdown ! end - - diff --git a/ansible/roles/eos/templates/t0-64-leaf.j2 b/ansible/roles/eos/templates/t0-64-leaf.j2 index 6cc500ac16b..f7a21f4d8b6 100644 --- a/ansible/roles/eos/templates/t0-64-leaf.j2 +++ b/ansible/roles/eos/templates/t0-64-leaf.j2 @@ -2,6 +2,9 @@ {% set mgmt_ip = ansible_host %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -12,13 +15,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! route-map DEFAULT_ROUTES permit ! @@ -62,6 +68,7 @@ exit ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! @@ -77,7 +84,7 @@ interface {{ name }} {% endif %} {% if iface['lacp'] is defined %} channel-group {{ iface['lacp'] }} mode active - lacp rate fast + lacp rate normal {% endif %} {% if iface['ipv4'] is defined %} ip address {{ iface['ipv4'] }} @@ -148,4 +155,3 @@ management api http-commands no shutdown ! end - diff --git a/ansible/roles/eos/templates/t0-leaf.j2 b/ansible/roles/eos/templates/t0-leaf.j2 index e7be97decc5..21d318d47b7 100644 --- a/ansible/roles/eos/templates/t0-leaf.j2 +++ b/ansible/roles/eos/templates/t0-leaf.j2 @@ -2,6 +2,9 @@ {% set mgmt_ip = ansible_host %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -12,13 +15,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! route-map DEFAULT_ROUTES permit ! @@ -62,6 +68,7 @@ exit ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! @@ -77,7 +84,7 @@ interface {{ name }} {% endif %} {% if iface['lacp'] is defined %} channel-group {{ iface['lacp'] }} mode active - lacp rate fast + lacp rate normal {% endif %} {% if iface['ipv4'] is defined %} ip address {{ iface['ipv4'] }} @@ -148,4 +155,3 @@ management api http-commands no shutdown ! end - diff --git a/ansible/roles/eos/templates/t1-lag-spine.j2 b/ansible/roles/eos/templates/t1-lag-spine.j2 index 8fa2aa90c2b..6c47ef6c331 100644 --- a/ansible/roles/eos/templates/t1-lag-spine.j2 +++ b/ansible/roles/eos/templates/t1-lag-spine.j2 @@ -2,6 +2,9 @@ {% set mgmt_ip = ansible_host %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -12,13 +15,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! route-map DEFAULT_ROUTES permit ! @@ -42,6 +48,7 @@ exit ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! diff --git a/ansible/roles/eos/templates/t1-lag-tor.j2 b/ansible/roles/eos/templates/t1-lag-tor.j2 index 91b1f49594b..a5ebd5b7454 100644 --- a/ansible/roles/eos/templates/t1-lag-tor.j2 +++ b/ansible/roles/eos/templates/t1-lag-tor.j2 @@ -3,6 +3,9 @@ {% set tornum = host['tornum'] %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -13,13 +16,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! {% for subnet in range(0, props.tor_subnet_number) %} ip route 172.16.{{ tornum }}.{{ subnet }}/32 {{ props.nhipv4 }} @@ -28,6 +34,7 @@ ipv6 route 20AC:10{{ '%02X' % tornum }}:0:{{ '%02X' % subnet }}::/64 {{ props.nh ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! diff --git a/ansible/roles/eos/templates/t1-spine.j2 b/ansible/roles/eos/templates/t1-spine.j2 index 6f308f2e018..5dcb10c3dda 100644 --- a/ansible/roles/eos/templates/t1-spine.j2 +++ b/ansible/roles/eos/templates/t1-spine.j2 @@ -2,6 +2,9 @@ {% set mgmt_ip = ansible_host %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -12,13 +15,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! route-map DEFAULT_ROUTES permit ! @@ -42,6 +48,7 @@ exit ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! diff --git a/ansible/roles/eos/templates/t1-tor.j2 b/ansible/roles/eos/templates/t1-tor.j2 index 91b1f49594b..a5ebd5b7454 100644 --- a/ansible/roles/eos/templates/t1-tor.j2 +++ b/ansible/roles/eos/templates/t1-tor.j2 @@ -3,6 +3,9 @@ {% set tornum = host['tornum'] %} hostname {{ hostname }} ! +vrf definition MGMT + rd 1:1 +! spanning-tree mode mstp ! aaa root secret 0 123456 @@ -13,13 +16,16 @@ clock timezone UTC ! lldp run lldp management-address Management1 +lldp management-address vrf MGMT ! snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT ! ip routing +ip routing vrf MGMT ipv6 unicast-routing ! -ip route 0.0.0.0/0 {{ mgmt_gw }} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} ! {% for subnet in range(0, props.tor_subnet_number) %} ip route 172.16.{{ tornum }}.{{ subnet }}/32 {{ props.nhipv4 }} @@ -28,6 +34,7 @@ ipv6 route 20AC:10{{ '%02X' % tornum }}:0:{{ '%02X' % subnet }}::/64 {{ props.nh ! interface Management 1 description TO LAB MGMT SWITCH + vrf forwarding MGMT ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} no shutdown ! diff --git a/ansible/roles/vm_set/library/kickstart.py b/ansible/roles/vm_set/library/kickstart.py index b9a270b44bc..a15a2dcdcca 100644 --- a/ansible/roles/vm_set/library/kickstart.py +++ b/ansible/roles/vm_set/library/kickstart.py @@ -126,41 +126,29 @@ def logout(self): return - -def session(port, login, password, new_params): - templates = { - 'hostname': [ - ('hostname %s' % str(new_params['hostname']), [r'\(config\)#']), - ], - 'mgmt_ip': [ - ('interface management 1', [r'\(config-if-Ma1\)#']), - ('no shutdown', [r'\(config-if-Ma1\)#']), - ('ip address %s' % str(new_params['mgmt_ip']), [r'\(config-if-Ma1\)#']), - ('exit', [r'\(config\)#']), - ], - 'mgmt_gw': [ - ('ip route 0.0.0.0/0 %s' % str(new_params['mgmt_gw']), [r'\(config\)#']), - ], - 'new_login': [ - ('username %s privilege 15 role network-admin secret 0 %s' % (str(new_params['new_login']), str(new_params['new_password'])), [r'\(config\)#']), - ], - 'new_password': [], # empty. All data in new_login - 'new_root_password': [ - ('aaa root secret 0 %s' % str(new_params['new_root_password']), [r'\(config\)#']), - ], - } - - seq = [] - for key, param in new_params.iteritems(): - if param is not None: - seq.extend(templates[key]) +def session(new_params): + seq = [ + ('hostname %s' % str(new_params['hostname']), [r'\(config\)#']), + ('vrf definition MGMT', [r'\(config-vrf-MGMT\)#']), + ('rd 1:1', [r'\(config-vrf-MGMT\)#']), + ('exit', [r'\(config\)#']), + ('ip routing vrf MGMT', [r'\(config\)#']), + ('interface management 1', [r'\(config-if-Ma1\)#']), + ('no shutdown', [r'\(config-if-Ma1\)#']), + ('vrf forwarding MGMT', [r'\(config-if-Ma1\)#']), + ('ip address %s' % str(new_params['mgmt_ip']), [r'\(config-if-Ma1\)#']), + ('exit', [r'\(config\)#']), + ('ip route vrf MGMT 0.0.0.0/0 %s' % str(new_params['mgmt_gw']), [r'\(config\)#']), + ('username %s privilege 15 role network-admin secret 0 %s' % (str(new_params['new_login']), str(new_params['new_password'])), [r'\(config\)#']), + ('aaa root secret 0 %s' % str(new_params['new_root_password']), [r'\(config\)#']), + ] debug = MyDebug('/tmp/debug.%s.txt' % new_params['hostname'], enabled=True) - ss = SerialSession(port, debug) - ss.login(login, password) + ss = SerialSession(new_params['telnet_port'], debug) + ss.login(new_params['login'], new_params['password']) ss.enable() ss.wait_for_warmup() - ss.rename_boot(seq) + ss.rename_boot(seq) # FIXME: do we need this rename? ss.configure(seq) ss.wait_for_warmup() ss.logout() @@ -170,28 +158,7 @@ def session(port, login, password, new_params): def core(module): - telnet_port = module.params.get('telnet_port', None) - login = module.params.get('login', None) - password = module.params.get('password', None) - - new_params = {} - new_params['hostname'] = module.params.get('hostname', None) - new_params['mgmt_ip'] = module.params.get('mgmt_ip', None) - new_params['mgmt_gw'] = module.params.get('mgmt_gw', None) - new_params['new_login'] = module.params.get('new_login', None) - new_params['new_password'] = module.params.get('new_password', None) - new_params['new_root_password'] = module.params.get('new_root_password', None) - - if (new_params['new_login'] is not None and new_params['new_password'] is None): - module.fail_json(msg = 'new_password is required') - - if (new_params['new_login'] is None and new_params['new_password'] is not None): - module.fail_json(msg = 'new_login is required') - - if telnet_port is None: - module.fail_json(msg = 'telnet port number is required') - - session(telnet_port, login, password, new_params) + session(module.params) return {'kickstart_code': 0, 'changed': True, 'msg': 'Kickstart completed'} @@ -202,12 +169,12 @@ def main(): telnet_port = dict(required=True), login = dict(required=True), password = dict(required=True), - hostname = dict(), - mgmt_ip = dict(), - mgmt_gw = dict(), - new_login = dict(), - new_password = dict(), - new_root_password = dict(), + hostname = dict(required=True), + mgmt_ip = dict(required=True), + mgmt_gw = dict(required=True), + new_login = dict(required=True), + new_password = dict(required=True), + new_root_password = dict(required=True), )) try: @@ -228,4 +195,3 @@ def main(): from ansible.module_utils.basic import * main() -