cisco_node_utils 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +13 -0
  5. data/.travis.yml +4 -1
  6. data/CHANGELOG.md +81 -2
  7. data/CONTRIBUTING.md +2 -17
  8. data/Gemfile +5 -0
  9. data/README.md +92 -47
  10. data/Rakefile +23 -1
  11. data/bin/git/hooks/hook_lib +7 -0
  12. data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
  13. data/bin/git/hooks/pre-commit/rubocop +7 -2
  14. data/bin/git/hooks/pre-commit/validate-diffs +18 -4
  15. data/bin/git/hooks/pre-commit/validate-yaml +18 -0
  16. data/bin/git/update-hooks +64 -6
  17. data/cisco_node_utils.gemspec +9 -6
  18. data/docs/README-develop-best-practices.md +149 -50
  19. data/docs/README-develop-node-utils-APIs.md +92 -42
  20. data/docs/README-maintainers.md +7 -4
  21. data/docs/README-test-execution.md +57 -0
  22. data/docs/cisco_node_utils.yaml.example +30 -0
  23. data/docs/template-router.rb +4 -0
  24. data/ext/mkrf_conf.rb +63 -0
  25. data/lib/.rubocop.yml +2 -2
  26. data/lib/cisco_node_utils.rb +5 -0
  27. data/lib/cisco_node_utils/aaa_authentication_login.rb +5 -6
  28. data/lib/cisco_node_utils/aaa_authorization_service.rb +1 -1
  29. data/lib/cisco_node_utils/ace.rb +165 -12
  30. data/lib/cisco_node_utils/acl.rb +2 -1
  31. data/lib/cisco_node_utils/bgp.rb +184 -21
  32. data/lib/cisco_node_utils/bgp_af.rb +94 -249
  33. data/lib/cisco_node_utils/bgp_neighbor.rb +94 -14
  34. data/lib/cisco_node_utils/bgp_neighbor_af.rb +75 -8
  35. data/lib/cisco_node_utils/bridge_domain.rb +183 -0
  36. data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
  37. data/lib/cisco_node_utils/cisco_cmn_utils.rb +85 -2
  38. data/lib/cisco_node_utils/client.rb +35 -0
  39. data/lib/cisco_node_utils/client/client.rb +234 -0
  40. data/lib/cisco_node_utils/client/grpc.rb +33 -0
  41. data/lib/cisco_node_utils/client/grpc/client.rb +311 -0
  42. data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
  43. data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
  44. data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
  45. data/lib/cisco_node_utils/client/nxapi.rb +31 -0
  46. data/lib/cisco_node_utils/client/nxapi/client.rb +305 -0
  47. data/lib/cisco_node_utils/client/utils.rb +164 -0
  48. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +222 -254
  49. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +11 -8
  50. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +22 -15
  51. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +11 -8
  52. data/lib/cisco_node_utils/cmd_ref/acl.yaml +21 -16
  53. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +239 -109
  54. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +114 -55
  55. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +76 -52
  56. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +106 -62
  57. data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +71 -0
  58. data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
  59. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +35 -14
  60. data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
  61. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +23 -17
  62. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +94 -83
  63. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +22 -17
  64. data/lib/cisco_node_utils/cmd_ref/feature.yaml +76 -26
  65. data/lib/cisco_node_utils/cmd_ref/images.yaml +3 -2
  66. data/lib/cisco_node_utils/cmd_ref/interface.yaml +381 -153
  67. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +21 -11
  68. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +21 -21
  69. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +30 -21
  70. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +18 -13
  71. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +26 -31
  72. data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
  73. data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
  74. data/lib/cisco_node_utils/cmd_ref/memory.yaml +17 -6
  75. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +10 -3
  76. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +17 -5
  77. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +33 -29
  78. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +12 -10
  79. data/lib/cisco_node_utils/cmd_ref/pim.yaml +16 -19
  80. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +40 -25
  81. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +17 -12
  82. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +71 -35
  83. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +10 -5
  84. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +6 -2
  85. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +47 -43
  86. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +13 -11
  87. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +4 -2
  88. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +23 -21
  89. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +26 -22
  90. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +19 -17
  91. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +18 -6
  92. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +234 -0
  93. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +24 -9
  94. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +5 -3
  95. data/lib/cisco_node_utils/cmd_ref/system.yaml +4 -3
  96. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +22 -20
  97. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +27 -15
  98. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +45 -16
  99. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +21 -11
  100. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +3 -2
  101. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +60 -32
  102. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +118 -101
  103. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +54 -58
  104. data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +118 -0
  105. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +19 -25
  106. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +28 -18
  107. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +34 -17
  108. data/lib/cisco_node_utils/cmd_ref/yum.yaml +6 -4
  109. data/lib/cisco_node_utils/command_reference.rb +261 -142
  110. data/lib/cisco_node_utils/constants.rb +33 -0
  111. data/lib/cisco_node_utils/encapsulation.rb +112 -0
  112. data/lib/cisco_node_utils/environment.rb +102 -0
  113. data/lib/cisco_node_utils/evpn_vni.rb +5 -3
  114. data/lib/cisco_node_utils/exceptions.rb +111 -0
  115. data/lib/cisco_node_utils/fabricpath_global.rb +52 -35
  116. data/lib/cisco_node_utils/fabricpath_topology.rb +44 -57
  117. data/lib/cisco_node_utils/feature.rb +165 -3
  118. data/lib/cisco_node_utils/interface.rb +1051 -260
  119. data/lib/cisco_node_utils/interface_channel_group.rb +11 -10
  120. data/lib/cisco_node_utils/interface_ospf.rb +1 -2
  121. data/lib/cisco_node_utils/interface_portchannel.rb +4 -12
  122. data/lib/cisco_node_utils/interface_service_vni.rb +7 -7
  123. data/lib/cisco_node_utils/itd_device_group.rb +248 -0
  124. data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
  125. data/lib/cisco_node_utils/itd_service.rb +523 -0
  126. data/lib/cisco_node_utils/logger.rb +75 -0
  127. data/lib/cisco_node_utils/node.rb +62 -192
  128. data/lib/cisco_node_utils/node_util.rb +56 -10
  129. data/lib/cisco_node_utils/overlay_global.rb +2 -2
  130. data/lib/cisco_node_utils/pim.rb +2 -13
  131. data/lib/cisco_node_utils/pim_group_list.rb +1 -1
  132. data/lib/cisco_node_utils/pim_rp_address.rb +1 -1
  133. data/lib/cisco_node_utils/platform.rb +52 -21
  134. data/lib/cisco_node_utils/portchannel_global.rb +89 -19
  135. data/lib/cisco_node_utils/radius_server.rb +168 -37
  136. data/lib/cisco_node_utils/router_ospf.rb +20 -35
  137. data/lib/cisco_node_utils/router_ospf_vrf.rb +4 -4
  138. data/lib/cisco_node_utils/snmpserver.rb +1 -6
  139. data/lib/cisco_node_utils/snmpuser.rb +6 -4
  140. data/lib/cisco_node_utils/stp_global.rb +676 -0
  141. data/lib/cisco_node_utils/syslog_server.rb +77 -18
  142. data/lib/cisco_node_utils/syslog_settings.rb +1 -1
  143. data/lib/cisco_node_utils/tacacs_server_group.rb +8 -4
  144. data/lib/cisco_node_utils/tacacs_server_host.rb +115 -25
  145. data/lib/cisco_node_utils/vdc.rb +12 -0
  146. data/lib/cisco_node_utils/version.rb +1 -1
  147. data/lib/cisco_node_utils/vlan.rb +147 -29
  148. data/lib/cisco_node_utils/vpc.rb +55 -3
  149. data/lib/cisco_node_utils/vrf.rb +72 -11
  150. data/lib/cisco_node_utils/vrf_af.rb +114 -29
  151. data/lib/cisco_node_utils/vtp.rb +34 -52
  152. data/lib/cisco_node_utils/vxlan_vtep.rb +34 -8
  153. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +36 -4
  154. data/lib/minitest/environment_plugin.rb +31 -0
  155. data/lib/minitest/log_level_plugin.rb +41 -0
  156. data/spec/client_spec.rb +7 -0
  157. data/spec/environment_spec.rb +263 -0
  158. data/spec/grpc_client_spec.rb +23 -0
  159. data/spec/isolate/all_clients_spec.rb +9 -0
  160. data/spec/isolate/grpc_only_spec.rb +16 -0
  161. data/spec/isolate/no_clients_spec.rb +26 -0
  162. data/spec/isolate/nxapi_only_spec.rb +16 -0
  163. data/spec/nxapi_client_spec.rb +42 -0
  164. data/spec/schema.yaml +75 -0
  165. data/spec/shared_examples_for_clients.rb +14 -0
  166. data/spec/spec_helper.rb +91 -0
  167. data/spec/whitespace_spec.rb +10 -0
  168. data/spec/yaml_spec.rb +42 -0
  169. data/tests/.rubocop.yml +2 -2
  170. data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
  171. data/tests/basetest.rb +96 -36
  172. data/tests/ciscotest.rb +220 -12
  173. data/tests/cmd_config.yaml +71 -49
  174. data/tests/cmd_config_invalid.yaml +1 -1
  175. data/tests/test_aaa_authentication_login.rb +1 -0
  176. data/tests/test_aaa_authentication_login_service.rb +9 -0
  177. data/tests/test_aaa_authorization_service.rb +173 -367
  178. data/tests/test_ace.rb +171 -100
  179. data/tests/test_acl.rb +10 -1
  180. data/tests/test_bgp_af.rb +395 -728
  181. data/tests/test_bgp_neighbor.rb +274 -115
  182. data/tests/test_bgp_neighbor_af.rb +178 -77
  183. data/tests/test_bridge_domain.rb +191 -0
  184. data/tests/test_bridge_domain_vni.rb +116 -0
  185. data/tests/test_client_utils.rb +111 -0
  186. data/tests/test_command_config.rb +9 -5
  187. data/tests/test_command_reference.rb +380 -102
  188. data/tests/test_dns_domain.rb +13 -3
  189. data/tests/test_domain_name.rb +13 -3
  190. data/tests/test_encapsulation.rb +77 -0
  191. data/tests/test_evpn_vni.rb +25 -7
  192. data/tests/test_fabricpath_global.rb +167 -163
  193. data/tests/test_fabricpath_topology.rb +12 -33
  194. data/tests/test_feature.rb +215 -0
  195. data/tests/test_grpc.rb +166 -0
  196. data/tests/test_interface.rb +585 -344
  197. data/tests/test_interface_bdi.rb +80 -0
  198. data/tests/test_interface_channel_group.rb +6 -3
  199. data/tests/test_interface_ospf.rb +26 -24
  200. data/tests/test_interface_portchannel.rb +1 -0
  201. data/tests/test_interface_private_vlan.rb +724 -0
  202. data/tests/test_interface_service_vni.rb +37 -66
  203. data/tests/test_interface_svi.rb +98 -101
  204. data/tests/test_interface_switchport.rb +419 -549
  205. data/tests/test_itd_device_group.rb +145 -0
  206. data/tests/test_itd_device_group_node.rb +199 -0
  207. data/tests/test_itd_service.rb +298 -0
  208. data/tests/test_logger.rb +43 -0
  209. data/tests/test_name_server.rb +11 -2
  210. data/tests/test_node.rb +16 -75
  211. data/tests/test_node_ext.rb +174 -163
  212. data/tests/test_node_util.rb +119 -0
  213. data/tests/test_ntp_config.rb +5 -1
  214. data/tests/test_ntp_server.rb +2 -2
  215. data/tests/test_nxapi.rb +221 -0
  216. data/tests/test_overlay_global.rb +47 -38
  217. data/tests/test_pim.rb +2 -0
  218. data/tests/test_pim_group_list.rb +2 -0
  219. data/tests/test_pim_rp_address.rb +2 -0
  220. data/tests/test_platform.rb +86 -39
  221. data/tests/test_portchannel_global.rb +211 -135
  222. data/tests/test_radius_global.rb +13 -5
  223. data/tests/test_radius_server.rb +256 -104
  224. data/tests/test_radius_server_group.rb +2 -0
  225. data/tests/test_router_bgp.rb +781 -485
  226. data/tests/test_router_ospf.rb +26 -103
  227. data/tests/test_router_ospf_vrf.rb +52 -57
  228. data/tests/test_snmp_notification_receiver.rb +2 -0
  229. data/tests/test_snmpcommunity.rb +2 -0
  230. data/tests/test_snmpgroup.rb +2 -0
  231. data/tests/test_snmpnotification.rb +40 -21
  232. data/tests/test_snmpserver.rb +2 -0
  233. data/tests/test_snmpuser.rb +2 -0
  234. data/tests/test_stp_global.rb +563 -0
  235. data/tests/test_syslog_server.rb +32 -8
  236. data/tests/test_syslog_settings.rb +22 -9
  237. data/tests/test_tacacs_server.rb +32 -27
  238. data/tests/test_tacacs_server_group.rb +100 -45
  239. data/tests/test_tacacs_server_host.rb +135 -43
  240. data/tests/test_vdc.rb +2 -16
  241. data/tests/test_vlan.rb +106 -54
  242. data/tests/test_vlan_mt_full.rb +11 -21
  243. data/tests/test_vlan_private.rb +669 -0
  244. data/tests/test_vpc.rb +312 -159
  245. data/tests/test_vrf.rb +122 -113
  246. data/tests/test_vrf_af.rb +238 -0
  247. data/tests/test_vtp.rb +58 -102
  248. data/tests/test_vxlan_vtep.rb +38 -17
  249. data/tests/test_vxlan_vtep_vni.rb +61 -9
  250. data/tests/test_yum.rb +49 -25
  251. metadata +122 -36
  252. data/lib/cisco_node_utils/cmd_ref/fex.yaml +0 -9
  253. data/lib/cisco_node_utils/cmd_ref/vni.yaml +0 -76
  254. data/lib/cisco_node_utils/vni.rb +0 -227
  255. data/tests/test_vni.rb +0 -106
@@ -1,7 +1,8 @@
1
1
  # images
2
2
  ---
3
3
  packages:
4
+ _exclude: [ios_xr]
4
5
  multiple: true
5
- config_get: 'show install patches'
6
+ get_command: 'show install patches'
6
7
  # Package state should always be some variant of Active or Inactive
7
- config_get_token: '/^(\S+)\s+(\S*[aA]ctive.*)\s*$/'
8
+ get_value: '/^(\S+)\s+(\S*[aA]ctive.*)\s*$/'
@@ -1,186 +1,243 @@
1
1
  # interface
2
2
  ---
3
3
  _template:
4
- config_set: ["interface %s"]
5
- config_get_token: '/^interface %s$/i'
6
- cli_nexus:
7
- config_get: "show running interface all"
4
+ context: ["interface <name>"]
5
+ ios_xr:
6
+ get_command: "show running interface"
7
+ nexus:
8
+ get_command: "show running interface all"
8
9
 
9
10
  access_vlan:
10
- config_get_token_append: '/^switchport access vlan (.*)$/'
11
- config_set_append: "switchport access vlan %s"
11
+ _exclude: [ios_xr]
12
12
  kind: int
13
+ get_value: '/^switchport access vlan (.*)$/'
14
+ set_value: "switchport access vlan <vlan>"
13
15
  default_value: 1
14
16
 
15
- admin_state_ethernet_noswitchport_shutdown:
16
- # TODO: is this actually used?
17
- cli_nexus:
18
- /N7/:
19
- default_value: "shutdown"
20
-
21
17
  all_interfaces:
22
18
  multiple:
23
- config_get_token: '/^interface (.*)/'
19
+ ios_xr:
20
+ get_command: 'show running all-interfaces'
21
+ get_context: ~
22
+ get_value: '/^interface (.*)/'
23
+
24
+ capabilities:
25
+ _exclude: [ios_xr]
26
+ multiple:
27
+ get_context: ["<name>"]
28
+ get_command: "show interface capabilities"
29
+ get_value: '/(.*)/'
30
+ default_value: [] # :raw default
24
31
 
25
32
  create:
26
- config_set: "interface %s"
33
+ set_context: ~
34
+ set_value: "interface <name>"
27
35
 
28
36
  description:
29
37
  kind: string
30
- config_get_token_append: '/^description (.*)/'
31
- config_set_append: "%s description %s"
38
+ get_value: '/^description (.*)/'
39
+ set_value: "<state> description <desc>"
32
40
  default_value: ""
33
41
 
34
42
  destroy:
35
- config_set: "no interface %s"
43
+ set_context: ~
44
+ set_value: "no interface <name>"
36
45
 
37
46
  duplex:
47
+ _exclude: [ios_xr]
38
48
  kind: string
39
- config_get_token_append: '/^duplex (.*)$/'
40
- config_set_append: "duplex %s"
41
- default_value: "auto"
49
+ get_value: '/^duplex (.*)$/'
50
+ set_value: "duplex <duplex>"
51
+ C3064:
52
+ default_value: 'full'
53
+ else:
54
+ default_value: 'auto'
42
55
 
43
56
  encapsulation_dot1q:
44
57
  kind: int
45
- config_get_token_append: '/^encapsulation dot1q (.*)/i'
46
- config_set_append: "%s encapsulation dot1q %s"
47
58
  default_value: ""
59
+ get_value: '/^encapsulation dot1q (.*)/i'
60
+ set_value: "<state> encapsulation dot1q <vlan>"
48
61
 
49
62
  fabric_forwarding_anycast_gateway:
63
+ _exclude: [ios_xr, N3k]
50
64
  kind: boolean
51
- config_get_token_append: '/^fabric forwarding mode anycast-gateway$/'
52
- config_set_append: "%s fabric forwarding mode anycast-gateway"
65
+ get_value: '/^fabric forwarding mode anycast-gateway$/'
66
+ set_value: "<state> fabric forwarding mode anycast-gateway"
53
67
  default_value: false
54
68
 
55
69
  feature_lacp:
56
70
  kind: boolean
57
- config_get: "show running | i ^feature"
58
- config_get_token: '/^feature lacp$/'
59
- config_set: "%s feature lacp"
71
+ nexus:
72
+ get_command: "show running | i ^feature"
73
+ context: ~
74
+ get_value: '/^feature lacp$/'
75
+ set_value: "<state> feature lacp"
76
+ ios_xr:
77
+ default_only: true
60
78
 
61
79
  feature_vlan:
62
- kind: boolean
63
- cli_nexus:
64
- config_get: "show running | i ^feature"
65
- config_get_token: '/^feature interface-vlan$/'
66
- config_set: "%s feature interface-vlan"
80
+ _exclude: [ios_xr]
81
+ nexus:
82
+ kind: boolean
83
+ get_command: "show running | i ^feature"
84
+ context: ~
85
+ get_value: '/^feature interface-vlan$/'
86
+ set_value: "<state> feature interface-vlan"
67
87
 
68
88
  ipv4_acl_in:
69
- config_get_token_append: '/^ip access-group (\S+) in/'
70
- config_set_append: "%s ip access-group %s in"
89
+ ios_xr:
90
+ get_value: '/^ipv4 access-group (\S+) ingress/'
91
+ set_value: "<state> ipv4 access-group <acl> ingress"
92
+ nexus:
93
+ get_value: '/^ip access-group (\S+) in/'
94
+ set_value: "<state> ip access-group <acl> in"
71
95
  default_value: ""
72
96
 
73
97
  ipv4_acl_out:
74
- config_get_token_append: '/^ip access-group (\S+) out/'
75
- config_set_append: "%s ip access-group %s out"
98
+ ios_xr:
99
+ get_value: '/^ipv4 access-group (\S+) egress/'
100
+ set_value: "<state> ipv4 access-group <acl> egress"
101
+ nexus:
102
+ get_value: '/^ip access-group (\S+) out/'
103
+ set_value: "<state> ip access-group <acl> out"
76
104
  default_value: ""
77
105
 
78
106
  ipv4_addr_mask:
79
107
  # This handles both primary and secondary addresses
80
108
  multiple:
81
- cli_nexus:
82
- config_get_token_append: '/^ip address ([0-9\.]+)[\s\/](.*)/'
83
- config_set_append: "%s ip address %s %s"
109
+ nexus:
110
+ get_value: '/^ip address ([0-9\.]+)[\s\/](.*)/'
111
+ set_value: "<state> ip address <addr> <secondary>"
112
+ ios_xr:
113
+ get_value: '/^ipv4 address ([0-9\.]+) (.*)/'
114
+ set_value: '<state> ipv4 address <addr> <secondary>'
84
115
 
85
116
  ipv4_address:
86
117
  default_value: ~
87
118
 
88
119
  ipv4_arp_timeout:
89
120
  kind: int
90
- config_get_token_append: '/^ip arp timeout (\d+)$/'
91
- config_set_append: "%s ip arp timeout %s"
121
+ get_value: '/^ip arp timeout (\d+)$/'
122
+ set_value: "<state> ip arp timeout <timeout>"
92
123
  default_value: 700
93
124
 
94
125
  ipv4_arp_timeout_non_vlan_interfaces:
95
126
  default_only: ~
96
127
 
128
+ ipv4_forwarding:
129
+ _exclude: [ios_xr]
130
+ kind: boolean
131
+ default_value: false
132
+ get_value: '/^ip forward$/'
133
+ set_value: '<state> ip forward'
134
+
97
135
  ipv4_netmask_length:
98
136
  default_value: ~
99
137
 
100
138
  ipv4_pim_sparse_mode:
139
+ _exclude: [ios_xr]
101
140
  kind: boolean
102
141
  default_value: false
103
- cli_nexus:
104
- config_get_token_append: '/^ip pim sparse-mode$/'
105
- config_set_append: "%s ip pim sparse-mode"
142
+ nexus:
143
+ get_value: '/^ip pim sparse-mode$/'
144
+ set_value: "<state> ip pim sparse-mode"
106
145
 
107
146
  ipv4_proxy_arp:
108
147
  kind: boolean
109
148
  default_value: false
110
- cli_nexus:
111
- config_get_token_append: '/^ip proxy-arp$/'
112
- config_set_append: "%s ip proxy-arp"
149
+ nexus:
150
+ get_value: '/^ip proxy-arp$/'
151
+ set_value: "<state> ip proxy-arp"
152
+ ios_xr:
153
+ get_value: '/^proxy-arp$/'
154
+ set_value: "<state> proxy-arp"
113
155
 
114
156
  ipv4_redirects_loopback:
115
157
  kind: boolean
116
- cli_nexus:
158
+ nexus:
117
159
  default_only: false
160
+ ios_xr:
161
+ get_value: '/^((?:no )?ipv4 redirects)$/'
162
+ set_value: "<state> ipv4 redirects"
163
+ default_value: false
118
164
 
119
165
  ipv4_redirects_other_interfaces:
120
166
  kind: boolean
121
- test_config_result:
122
- false: false
123
- true: true
124
- cli_nexus:
125
- config_get_token_append: '/^((?:no )?ip redirects)$/'
126
- config_set_append: "%s ip redirects"
167
+ nexus:
168
+ get_value: '/^((?:no )?ip redirects)$/'
169
+ set_value: "<state> ip redirects"
127
170
  default_value: true
128
- test_config_get_regex: [
129
- '/^\s+ip redirects/',
130
- '/^\s+no ip redirects/'
131
- ]
171
+ ios_xr:
172
+ get_value: '/^((?:no )?ipv4 redirects)$/'
173
+ set_value: "<state> ipv4 redirects"
174
+ default_value: false
132
175
 
133
176
  ipv6_acl_in:
134
- config_get_token_append: '/^ipv6 traffic-filter (\S+) in/'
135
- config_set_append: "%s ipv6 traffic-filter %s in"
177
+ ios_xr:
178
+ get_value: '/^ipv6 access-group (\S+) ingress/'
179
+ set_value: "<state> ipv6 access-group <acl> ingress"
180
+ nexus:
181
+ get_value: '/^ipv6 traffic-filter (\S+) in/'
182
+ set_value: "<state> ipv6 traffic-filter <acl> in"
136
183
  default_value: ""
137
184
 
138
185
  ipv6_acl_out:
139
- config_get_token_append: '/^ipv6 traffic-filter (\S+) out/'
140
- config_set_append: "%s ipv6 traffic-filter %s out"
186
+ ios_xr:
187
+ get_value: '/^ipv6 access-group (\S+) egress/'
188
+ set_value: "<state> ipv6 access-group <acl> egress"
189
+ nexus:
190
+ get_value: '/^ipv6 traffic-filter (\S+) out/'
191
+ set_value: "<state> ipv6 traffic-filter <acl> out"
141
192
  default_value: ""
142
- mtu:
193
+
194
+ mtu_loopback:
195
+ kind: boolean
196
+ default_only: ~
197
+
198
+ mtu_other_interfaces:
143
199
  kind: int
144
- config_get_token_append: '/^mtu (.*)$/'
145
- config_set_append: "%s mtu %s"
146
- default_value: 1500
200
+ get_value: '/^mtu (.*)$/'
201
+ set_value: "<state> mtu <mtu>"
202
+ nexus:
203
+ default_value: 1500
204
+ ios_xr:
205
+ default_value: 1514
147
206
 
148
207
  negotiate_auto_ethernet:
149
208
  kind: boolean
150
- cli_nexus:
151
- test_config_get_regex: [
152
- '/^\s+no negotiate auto/',
153
- '/^\s+negotiate auto/'
154
- ]
155
- /(N7|C3064)/:
156
- default_only: false
157
- else:
158
- config_get_token_append: '/^(no )?negotiate auto$/'
159
- config_set_append: "%s negotiate auto"
160
- default_value: true
209
+ _exclude: [ios_xr, C3064, N7k]
210
+ get_value: '/^(no )?negotiate auto$/'
211
+ set_value: "<state> negotiate auto"
212
+ default_value: true
161
213
 
162
214
  negotiate_auto_other_interfaces:
163
215
  kind: boolean
216
+ _exclude: [ios_xr]
164
217
  default_only: false
165
218
 
166
219
  negotiate_auto_portchannel:
167
220
  kind: boolean
168
- cli_nexus:
169
- test_config_get_regex: [
170
- '/^\s+no negotiate auto/',
171
- '/^\s+negotiate auto/'
172
- ]
173
- /N7/:
174
- default_only: false
175
- else:
176
- config_get_token_append: '/^(no )?negotiate auto$/'
177
- config_set_append: "%s negotiate auto"
178
- default_value: true
221
+ _exclude: [ios_xr, N7k]
222
+ get_value: '/^(no )?negotiate auto$/'
223
+ set_value: "<state> negotiate auto"
224
+ default_value: true
225
+
226
+ private_vlan_any:
227
+ multiple:
228
+ get_value: '/switchport private-vlan/'
229
+
230
+ private_vlan_mapping:
231
+ _exclude: [ios_xr, N8k]
232
+ multiple: true
233
+ get_value: '/^private-vlan mapping (.*)$/'
234
+ set_value: "<state> private-vlan mapping <vlans>"
235
+ default_value: []
179
236
 
180
237
  shutdown:
181
238
  kind: boolean
182
- config_get_token_append: '/^shutdown$/'
183
- config_set_append: "%s shutdown"
239
+ get_value: '/^shutdown$/'
240
+ set_value: "<state> shutdown"
184
241
 
185
242
  shutdown_ether_channel:
186
243
  default_value: false
@@ -204,136 +261,307 @@ shutdown_unknown:
204
261
  default_value: true
205
262
 
206
263
  shutdown_vlan:
207
- cli_nexus:
264
+ nexus:
208
265
  default_value: true
209
266
 
210
267
  speed:
211
- config_get_token_append: '/^speed (.*)$/'
212
- config_set_append: "speed %s"
213
- default_value: "auto"
268
+ _exclude: [ios_xr, C3132]
269
+ kind: string
270
+ get_value: '/^speed (.*)$/'
271
+ set_value: "speed <speed>"
272
+ C3064: &non_auto
273
+ default_value: '10000'
274
+ C3172: *non_auto
275
+ N5k: *non_auto
276
+ N6k: *non_auto
277
+ else:
278
+ default_value: 'auto'
279
+
280
+ stp_bpdufilter:
281
+ kind: string
282
+ get_value: '/^spanning-tree bpdufilter (.*)$/'
283
+ set_value: "<state> spanning-tree bpdufilter <filter>"
284
+ default_value: false
285
+
286
+ stp_bpduguard:
287
+ kind: string
288
+ get_value: '/^spanning-tree bpduguard (.*)$/'
289
+ set_value: "<state> spanning-tree bpduguard <guard>"
290
+ default_value: false
291
+
292
+ stp_cost:
293
+ kind: string
294
+ get_value: '/^spanning-tree cost (.*)$/'
295
+ set_value: "spanning-tree cost <cost>"
296
+ default_value: 'auto'
297
+
298
+ stp_guard:
299
+ kind: string
300
+ get_value: '/^spanning-tree guard (.*)$/'
301
+ set_value: "<state> spanning-tree guard <guard>"
302
+ default_value: false
303
+
304
+ stp_link_type:
305
+ kind: string
306
+ get_value: '/^spanning-tree link-type (.*)$/'
307
+ set_value: "spanning-tree link-type <type>"
308
+ default_value: 'auto'
309
+
310
+ stp_mst_cost:
311
+ multiple:
312
+ get_command: "show running interface"
313
+ get_value: '/^spanning-tree mst (.*) cost (.*)$/'
314
+ set_value: "<state> spanning-tree mst <range> cost <val>"
315
+ default_value: []
316
+
317
+ stp_mst_port_priority:
318
+ multiple:
319
+ get_command: "show running interface"
320
+ get_value: '/^spanning-tree mst (.*) port-priority (.*)$/'
321
+ set_value: "<state> spanning-tree mst <range> port-priority <val>"
322
+ default_value: []
323
+
324
+ stp_mst_range:
325
+ kind: string
326
+ default_only: "0-4094"
327
+
328
+ stp_port_priority:
329
+ kind: int
330
+ get_value: '/^spanning-tree port-priority (\d+)$/'
331
+ set_value: "spanning-tree port-priority <pp>"
332
+ default_value: 128
333
+
334
+ stp_port_type:
335
+ kind: string
336
+ get_command: "show running interface"
337
+ get_value: '/^spanning-tree port type (.*)$/'
338
+ set_value: "<state> spanning-tree port type <type>"
339
+ default_value: false
340
+
341
+ stp_vlan_cost:
342
+ multiple:
343
+ get_command: "show running interface"
344
+ get_value: '/^spanning-tree vlan (.*) cost (.*)$/'
345
+ set_value: "<state> spanning-tree vlan <range> cost <val>"
346
+ default_value: []
347
+
348
+ stp_vlan_port_priority:
349
+ multiple:
350
+ get_command: "show running interface"
351
+ get_value: '/^spanning-tree vlan (.*) port-priority (.*)$/'
352
+ set_value: "<state> spanning-tree vlan <range> port-priority <val>"
353
+ default_value: []
354
+
355
+ stp_vlan_range:
356
+ kind: string
357
+ default_only: "1-3967"
214
358
 
215
359
  svi_autostate:
216
- _exclude: [/N(5|6)/]
360
+ _exclude: [ios_xr, N5k, N6k]
217
361
  kind: boolean
218
- config_get_token_append: '/^(?:no )?autostate$/'
219
- config_set_append: "%s autostate"
362
+ get_value: '/^(?:no )?autostate$/'
363
+ set_value: "<state> autostate"
220
364
  default_value: true
221
- test_config_result:
222
- false: false
223
- true: true
224
365
 
225
366
  svi_management:
367
+ _exclude: [ios_xr]
226
368
  kind: boolean
227
- config_get_token_append: '/^management$/'
228
- config_set_append: "%s management"
369
+ get_value: '/^management$/'
370
+ set_value: "<state> management"
229
371
  default_value: false
230
372
 
231
373
  switchport:
374
+ _exclude: [ios_xr]
232
375
  kind: boolean
233
- config_get_token_append: '/^switchport$/'
234
- config_set_append: "%s switchport"
376
+ get_value: '/^switchport$/'
377
+ set_value: "<state> switchport"
235
378
  # default_value: n/a. This is derived from system_default_switchport
236
379
 
237
380
  switchport_autostate_exclude:
381
+ _exclude: [ios_xr]
238
382
  kind: boolean
239
- config_get_token_append: '/(^switchport autostate exclude)/'
240
- config_set_append: "%s switchport autostate exclude"
383
+ get_value: '/(^switchport autostate exclude)/'
384
+ set_value: "<state> switchport autostate exclude"
241
385
  default_value: false
242
386
 
243
387
  switchport_mode_dot1q_tunnel:
244
- test_config_result:
245
- false: RuntimeError
388
+ _exclude: [ios_xr]
389
+ default_only: ""
246
390
 
247
391
  switchport_mode_ethernet:
392
+ _exclude: [ios_xr]
248
393
  auto_default: false
249
- config_get_token_append: '/^(?:no )?switchport mode ?(.*)$/'
250
- config_set_append: "%s switchport mode %s"
394
+ get_value: '/^(?:no )?switchport mode ?(.*)$/'
395
+ set_value: "<state> switchport mode <mode>"
251
396
  default_value: "access"
252
397
 
253
398
  switchport_mode_other_interfaces:
399
+ _exclude: [ios_xr]
254
400
  default_only: ""
255
401
 
256
402
  switchport_mode_port_channel:
257
- config_get_token_append: '/^switchport mode (.*)$/'
258
- config_set_append: "%s switchport mode %s"
403
+ _exclude: [ios_xr]
404
+ get_value: '/^switchport mode (.*)$/'
405
+ set_value: "<state> switchport mode <mode>"
259
406
  default_value: ""
260
407
 
408
+ switchport_mode_private_vlan_host:
409
+ _exclude: [ios_xr, N8k]
410
+ get_value: '/^switchport mode private-vlan (.*)$/'
411
+ set_value: "<state> switchport mode private-vlan <mode>"
412
+ default_value: :disabled
413
+
414
+ switchport_mode_private_vlan_host_association:
415
+ _exclude: [ios_xr, N8k]
416
+ multiple: true
417
+ get_value: '/^switchport private-vlan host-association (.*)$/'
418
+ set_value: "<state> switchport private-vlan host-association <vlan_pr> <vlan_sec>"
419
+ default_value: []
420
+
421
+ switchport_mode_private_vlan_host_promiscous:
422
+ _exclude: [ios_xr, N8k]
423
+ multiple: true
424
+ get_value: '/^switchport private-vlan mapping (\d+.*)$/'
425
+ set_value: "<state> switchport private-vlan mapping <vlan_pr> <vlans>"
426
+ default_value: []
427
+
428
+
429
+ switchport_mode_private_vlan_trunk_promiscuous:
430
+ _exclude: [ios_xr, N3k, N8k]
431
+ kind: boolean
432
+ get_value: '/^switchport mode private-vlan trunk promiscuous$/'
433
+ set_value: "<state> switchport mode private-vlan trunk promiscuous"
434
+ default_value: false
435
+
436
+ switchport_mode_private_vlan_trunk_secondary:
437
+ _exclude: [ios_xr, N3k, N8k]
438
+ kind: boolean
439
+ get_value: '/^switchport mode private-vlan trunk secondary$/'
440
+ set_value: "<state> switchport mode private-vlan trunk secondary"
441
+ default_value: false
442
+
443
+ switchport_private_vlan_association_trunk:
444
+ _exclude: [ios_xr, N3k, N8k]
445
+ multiple: true
446
+ #get_value: '/^switchport private-vlan association trunk (.*) (.*)$/'
447
+ get_value: '/^switchport private-vlan association trunk (.*)$/'
448
+ set_value: "<state> switchport private-vlan association trunk <vlan_pr> <vlan>"
449
+ default_value: []
450
+
451
+ switchport_private_vlan_mapping_trunk:
452
+ _exclude: [ios_xr, N3k, N8k]
453
+ multiple: true
454
+ get_value: '/^switchport private-vlan mapping trunk (.*)$/'
455
+ set_value: "<state> switchport private-vlan mapping trunk <vlan_pr> <vlans>"
456
+ default_value: []
457
+
458
+ switchport_private_vlan_trunk_allowed_vlan:
459
+ _exclude: [ios_xr, N8k]
460
+ multiple: true
461
+ get_value: '/^switchport private-vlan trunk allowed vlan (.*)$/'
462
+ set_value: "<state> switchport private-vlan trunk allowed vlan <oper> <vlans>"
463
+ default_value: []
464
+
465
+ switchport_private_vlan_trunk_native_vlan:
466
+ _exclude: [ios_xr, N8k]
467
+ kind: int
468
+ get_value: '/^switchport private-vlan trunk native vlan (.*)$/'
469
+ set_value: "<state> switchport private-vlan trunk native vlan <vlan>"
470
+ default_value: 1
471
+
261
472
  switchport_trunk_allowed_vlan:
262
- config_get_token_append: '/^switchport trunk allowed vlan (.*)$/'
263
- config_set_append: "%s switchport trunk allowed vlan %s"
473
+ _exclude: [ios_xr]
474
+ get_value: '/^switchport trunk allowed vlan (.*)$/'
475
+ set_value: "<state> switchport trunk allowed vlan <vlan>"
264
476
  default_value: "1-4094"
265
477
 
266
478
  switchport_trunk_native_vlan:
479
+ _exclude: [ios_xr]
267
480
  kind: int
268
- config_get_token_append: '/^switchport trunk native vlan (.*)$/'
269
- config_set_append: "%s switchport trunk native vlan %s"
481
+ get_value: '/^switchport trunk native vlan (.*)$/'
482
+ set_value: "<state> switchport trunk native vlan <vlan>"
270
483
  default_value: 1
271
484
 
272
485
  system_default_svi_autostate:
273
- _exclude: [/N(5|6)/]
486
+ _exclude: [N5k, N6k]
274
487
  kind: boolean
275
- config_get: "show running all | include 'system default'"
276
- /N7K/:
277
- # When enabled: Property does not nvgen.
278
- # When disabled: Property nvgens as 'system default interface-vlan no autostate'
279
- config_get_token: ['/^system default interface-vlan no autostate$/']
280
- # default_value: n/a. This is a user-configurable system default.
281
- else:
282
- # When enabled: Property nvgens as 'system default interface-vlan autostate'
283
- # When disabled: Property nvgens as 'no system default interface-vlan autostate'
284
- config_get_token: ['/^system default interface-vlan autostate$/']
488
+ nexus:
489
+ get_command: "show running all | include 'system default'"
490
+ get_context: ~
285
491
  # default_value: n/a. This is a user-configurable system default.
492
+ N7k:
493
+ # When enabled: Property does not nvgen.
494
+ # When disabled: Property nvgens as 'system default interface-vlan no autostate'
495
+ get_value: '/^system default interface-vlan no autostate$/'
496
+ else:
497
+ # When enabled: Property nvgens as 'system default interface-vlan autostate'
498
+ # When disabled: Property nvgens as 'no system default interface-vlan autostate'
499
+ get_value: '/^system default interface-vlan autostate$/'
500
+ ios_xr:
501
+ default_only: false
286
502
 
287
503
  system_default_switchport:
288
- # Note: This is a simple boolean state but there is a bug on some
289
- # platforms that causes the cli to nvgen twice; this causes config_get to
290
- # raise an error when it encounters the multiple. Therefore we define it
291
- # as a multiple to avoid the raise.
292
- multiple:
293
- config_get: "show running all | include 'system default'"
294
- config_get_token: ['/^no system default switchport$/']
295
- default_value: true
504
+ nexus:
505
+ # Note: This is a simple boolean state but there is a bug on some
506
+ # platforms that causes the cli to nvgen twice; this causes config_get to
507
+ # raise an error when it encounters the multiple. Therefore we define it
508
+ # as a multiple to avoid the raise.
509
+ multiple:
510
+ get_command: "show running all | include 'system default'"
511
+ get_context: ~
512
+ get_value: '/^no system default switchport$/'
513
+ default_value: true
514
+ ios_xr:
515
+ default_only: false
296
516
 
297
517
  system_default_switchport_shutdown:
298
518
  kind: boolean
299
- config_get: "show running all | include 'system default'"
300
- config_get_token: ['/^system default switchport shutdown$/']
301
- # default_value: n/a. This is a user-configurable system default.
519
+ nexus:
520
+ get_command: "show running all | include 'system default'"
521
+ get_context: ~
522
+ get_value: '/^system default switchport shutdown$/'
523
+ # default_value: n/a. This is a user-configurable system default.
524
+ ios_xr:
525
+ default_only: true
302
526
 
303
527
  vlan_mapping:
304
- _exclude: [/N(3|5|6|9)/]
528
+ _exclude: [N3k, N5k, N6k, N8k, N9k]
305
529
  multiple:
306
- config_get_token_append: '/^switchport vlan mapping (\d+) (\d+)/'
307
- config_set_append: '%s switchport vlan mapping %s %s'
530
+ get_value: '/^switchport vlan mapping (\d+) (\d+)/'
531
+ set_value: '<state> switchport vlan mapping <original> <translated>'
308
532
  default_value: []
309
533
 
310
534
  vlan_mapping_enable:
311
- _exclude: [/N(3|5|6|9)/]
535
+ _exclude: [N3k, N5k, N6k, N8k, N9k]
312
536
  kind: boolean
313
- config_get_token_append: '/^(no )?switchport vlan mapping enable/'
314
- config_set_append: '%s switchport vlan mapping enable'
537
+ get_value: '/^(no )?switchport vlan mapping enable/'
538
+ set_value: '<state> switchport vlan mapping enable'
315
539
  default_value: true
316
540
 
317
541
  vpc_id:
318
542
  kind: int
319
- config_get_token_append: '/^vpc (\d+)$/'
320
- config_set_append: '%s vpc %s'
543
+ get_value: '/^vpc (\d+)$/'
544
+ set_value: '<state> vpc <id>'
321
545
  default_value: false
322
546
 
323
547
  vpc_peer_link:
324
548
  kind: boolean
325
- config_get_token_append: '/^vpc peer\-link$/'
326
- config_set_append: '%s vpc peer-link'
549
+ get_value: '/^vpc peer\-link$/'
550
+ set_value: '<state> vpc peer-link'
327
551
  default_value: false
328
552
 
329
553
  vrf:
330
554
  default_value: ""
331
- cli_nexus:
332
- config_get_token_append: '/^vrf member (.*)/'
333
- config_set_append: "%s vrf member %s"
555
+ nexus:
556
+ get_value: '/^vrf member (.*)/'
557
+ set_value: "<state> vrf member <vrf>"
558
+ ios_xr:
559
+ get_value: '/^vrf (.*)/'
560
+ set_value: "<state> vrf <vrf>"
334
561
 
335
562
  vtp:
563
+ _exclude: [ios_xr]
336
564
  kind: boolean
337
- config_get_token_append: '/^vtp *$/'
338
- config_set_append: "%s vtp"
565
+ get_value: '/^vtp *$/'
566
+ set_value: "<state> vtp"
339
567
  default_value: false