main.yml 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. ---
  2. - name: Add VLAN definition
  3. nxos_vlan:
  4. vlan_id: "{{ vlan_id }}"
  5. admin_state: up
  6. name: "{{ vlan_name }}"
  7. when: delete_vlan is not defined or not delete_vlan|bool
  8. tags:
  9. - nxos
  10. - vlan
  11. - nxos-vlan
  12. - add-vlan
  13. - add-nxos-vlan
  14. - name: Generate list of interfaces (stretched)
  15. set_fact: iflist="{{ iflist }} + [{{ item.key }}]"
  16. with_items: "{{ lookup('dict', port_channels) }}"
  17. when: generate_iflist|bool and is_stretched|bool
  18. tags:
  19. - nxos
  20. - vlan
  21. - nxos-vlan
  22. - allow-vlan
  23. - remove-vlan
  24. - remove-ucs-vlan
  25. - name: Generate list of interfaces (non-stretched)
  26. set_fact: iflist="{{ iflist }} + [{{ item.key }}]"
  27. with_items: "{{ lookup('dict', port_channels) }}"
  28. when: generate_iflist|bool and not is_stretched|bool and not port_channels[item.key]|bool
  29. tags:
  30. - nxos
  31. - vlan
  32. - nxos-vlan
  33. - allow-vlan
  34. - remove-vlan
  35. - remove-ucs-vlan
  36. - name: Associate interfaces to VLAN
  37. nxos_config:
  38. lines:
  39. - switchport trunk allowed vlan add {{ vlan_id }}
  40. parents: interface {{ item }}
  41. with_items: "{{ iflist }}"
  42. when: (delete_vlan is not defined or not delete_vlan|bool) and iflist is defined
  43. tags:
  44. - nxos
  45. - vlan
  46. - nxos-vlan
  47. - allow-vlan
  48. - allow-nxos-vlan
  49. - name: Add SVI definition
  50. nxos_interfaces:
  51. config:
  52. - name: Vlan{{ vlan_id }}
  53. enabled: True
  54. mtu: "{{ svi_mtu }}"
  55. description: "{{ svi_descr }}"
  56. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_mtu is defined and svi_descr is defined
  57. tags:
  58. - nxos
  59. - vlan
  60. - nxos-vlan
  61. - add-svi
  62. - name: Set per-DC v4 IDF ID
  63. set_fact: v4_idf_id={{ idf_id }}
  64. when: (delete_vlan is not defined or not delete_vlan|bool) and not is_stretched|bool and build_v4|bool
  65. tags:
  66. - nxos
  67. - vlan
  68. - nxos-vlan
  69. - add-svi-l3
  70. - add-svi-l3-v4
  71. - name: Set stretched v4 IDF ID
  72. set_fact: v4_idf_id={{ stretched_idf_id }}
  73. when: (delete_vlan is not defined or not delete_vlan|bool) and is_stretched|bool and build_v4|bool
  74. tags:
  75. - nxos
  76. - vlan
  77. - nxos-vlan
  78. - add-svi-l3
  79. - add-svi-l3-v4
  80. - name: Construct SVI IPv4 address
  81. set_fact: svi_v4_prefix={{ base_major_net }}.{{ vlan_id }}.{{ v4_idf_id }} svi_subnet_len="24"
  82. when: (delete_vlan is not defined or not delete_vlan|bool) and build_v4|bool
  83. tags:
  84. - nxos
  85. - vlan
  86. - nxos-vlan
  87. - add-svi-l3
  88. - add-svi-l3-v4
  89. - name: Add SVI v4 L3 parameters
  90. nxos_l3_interfaces:
  91. config:
  92. - name: Vlan{{ vlan_id }}
  93. ipv4:
  94. - address: "{{ svi_v4_prefix }}.{{ core_svi_v4_suffix }}/{{ svi_subnet_len }}"
  95. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined
  96. tags:
  97. - nxos
  98. - vlan
  99. - nxos-vlan
  100. - add-svi-l3
  101. - add-svi-l3-v4
  102. - name: Set per-DC v6 IDF ID
  103. set_fact: v6_idf_id="{{ '%0x' % idf_id|int }}"
  104. when: (delete_vlan is not defined or not delete_vlan|bool) and not is_stretched|bool and build_v6|bool
  105. tags:
  106. - nxos
  107. - vlan
  108. - nxos-vlan
  109. - add-svi-l3
  110. - add-svi-l3-v6
  111. - name: Set stretched v6 IDF ID
  112. set_fact: v6_idf_id="{{ '%0x' % stretched_idf_id|int }}"
  113. when: (delete_vlan is not defined or not delete_vlan|bool) and is_stretched|bool and build_v6|bool
  114. tags:
  115. - nxos
  116. - vlan
  117. - nxos-vlan
  118. - add-svi-l3
  119. - add-svi-l3-v6
  120. - name: Construct SVI v6 address
  121. set_fact: svi_v6_network="{{ base_v6_prefix }}:{{ '%0x' % vlan_id|int }}{{ v6_idf_id }}::"
  122. when: (delete_vlan is not defined or not delete_vlan|bool) and build_v6|bool
  123. tags:
  124. - nxos
  125. - vlan
  126. - nxos-vlan
  127. - add-svi-l3
  128. - add-svi-l3-v6
  129. - name: Add SVI v6 L3 parameters
  130. nxos_l3_interfaces:
  131. config:
  132. - name: Vlan{{ vlan_id }}
  133. ipv6:
  134. - address: "{{ svi_v6_network }}{{ core_svi_v6_suffix }}/64"
  135. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v6_network is defined
  136. tags:
  137. - nxos
  138. - vlan
  139. - nxos-vlan
  140. - add-svi-l3
  141. - add-svi-l3-v6
  142. - name: Add SVI v6 L3 parameters
  143. nxos_config:
  144. lines:
  145. - ipv6 address use-link-local-only
  146. parents: interface Vlan{{ vlan_id }}
  147. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v6_link_local is defined
  148. tags:
  149. - nxos
  150. - vlan
  151. - nxos-vlan
  152. - add-svi-l3
  153. - add-svi-l3-v6
  154. - name: Add SVI OSPFv2 parameters
  155. nxos_interface_ospf:
  156. area: 0.0.0.0
  157. ospf: "{{ ospf_pid }}"
  158. interface: Vlan{{ vlan_id }}
  159. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined
  160. tags:
  161. - nxos
  162. - vlan
  163. - nxos-vlan
  164. - add-ospf
  165. - add-ospfv2
  166. - name: Add additional SVI OSPFv2 parameters
  167. nxos_config:
  168. lines:
  169. - ip ospf network {{ ospf_type }}
  170. parents: interface Vlan{{ vlan_id }}
  171. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined
  172. tags:
  173. - nxos
  174. - vlan
  175. - nxos-vlan
  176. - add-ospf
  177. - add-ospfv2
  178. - name: Disable SVI OSPFv2 passive interface
  179. nxos_config:
  180. lines:
  181. - no ip ospf passive-interface
  182. parents: interface Vlan{{ vlan_id }}
  183. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined and not passive_interface is defined
  184. tags:
  185. - nxos
  186. - vlan
  187. - nxos-vlan
  188. - add-ospf
  189. - add-ospfv2
  190. - name: Add SVI OSPFv3 parameters
  191. nxos_config:
  192. lines:
  193. - ipv6 router ospfv3 1 area 0.0.0.0
  194. - ospfv3 network {{ ospf_type }}
  195. parents: interface Vlan{{ vlan_id }}
  196. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v6_network is defined or svi_v6_link_local is defined
  197. tags:
  198. - nxos
  199. - vlan
  200. - nxos-vlan
  201. - add-ospf
  202. - add-ospfv3
  203. - name: Disable SVI OSPFv3 passive interface
  204. nxos_config:
  205. lines:
  206. - no ospfv3 passive-interface
  207. parents: interface Vlan{{ vlan_id }}
  208. when: (delete_vlan is not defined or not delete_vlan|bool) and (svi_v6_network is defined or svi_v6_link_local is defined) and not passive_interface is defined
  209. tags:
  210. - nxos
  211. - vlan
  212. - nxos-vlan
  213. - add-ospf
  214. - add-ospfv3
  215. - name: Add addition SVI parameters
  216. nxos_config:
  217. lines:
  218. - no ip redirects
  219. - no ipv6 redirects
  220. parents: interface Vlan{{ vlan_id }}
  221. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined or svi_v6_network is defined
  222. tags:
  223. - nxos
  224. - vlan
  225. - nxos-vlan
  226. - add-svi-l3
  227. - name: Enable HSRP
  228. nxos_config:
  229. lines:
  230. - hsrp version 2
  231. parents: interface Vlan{{ vlan_id }}
  232. when: (delete_vlan is not defined or not delete_vlan|bool) and (svi_v4_prefix is defined or svi_v6_network is defined) and use_hsrp is defined
  233. tags:
  234. - nxos
  235. - vlan
  236. - nxos-vlan
  237. - add-hsrp
  238. - name: Add HSRP v4 configuration
  239. nxos_config:
  240. lines:
  241. - authentication md5 key-chain HSRP_KEY
  242. - preempt
  243. - priority {{ core_hsrp_priority }}
  244. - timers 1 3
  245. - ip {{ svi_v4_prefix }}.{{ core_hsrp_vip_v4_suffix }}
  246. - track {{ core_hsrp_v4_track }} decrement 20
  247. parents:
  248. - interface Vlan{{ vlan_id }}
  249. - hsrp 1
  250. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined and use_hsrp is defined
  251. tags:
  252. - nxos
  253. - vlan
  254. - nxos-vlan
  255. - add-hsrp
  256. - add-hsrp-v4
  257. - name: Add HSRP v6 configuration
  258. nxos_config:
  259. lines:
  260. - authentication md5 key-chain HSRP_KEY
  261. - preempt
  262. - priority {{ core_hsrp_priority }}
  263. - timers 1 3
  264. - ip {{ svi_v6_network }}{{ core_hsrp_vip_v6_suffix }}
  265. - track {{ core_hsrp_v6_track }} decrement 20
  266. parents:
  267. - interface Vlan{{ vlan_id }}
  268. - hsrp 2 ipv6
  269. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v6_network is defined and use_hsrp is defined
  270. tags:
  271. - nxos
  272. - vlan
  273. - nxos-vlan
  274. - add-hsrp
  275. - add-hsrp-v6
  276. - name: Add DHCP relays
  277. nxos_config:
  278. lines:
  279. - ip dhcp relay address {{ item }}
  280. parents: interface Vlan{{ vlan_id }}
  281. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined
  282. with_items: "{{ dhcp_servers }}"
  283. tags:
  284. - nxos
  285. - vlan
  286. - nxos-vlan
  287. - add-dhcp-relay
  288. - name: Add v4 ACL
  289. nxos_acl_interface:
  290. direction: ingress
  291. interface: Vlan{{ vlan_id }}
  292. name: "{{ v4_acl_name }}"
  293. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v4_prefix is defined and add_acl|bool
  294. tags:
  295. - nxos
  296. - vlan
  297. - nxos-vlan
  298. - add-v4-acl
  299. - name: Add v6 ACL
  300. nxos_config:
  301. lines:
  302. - ipv6 traffic-filter {{ v6_acl_name }} in
  303. parents: interface Vlan{{ vlan_id }}
  304. when: (delete_vlan is not defined or not delete_vlan|bool) and svi_v6_network and add_acl|bool
  305. tags:
  306. - nxos
  307. - vlan
  308. - nxos-vlan
  309. - add-v6-acl
  310. - name: Remove SVI
  311. nxos_interfaces:
  312. config:
  313. - name: Vlan{{ vlan_id }}
  314. state: deleted
  315. when: delete_vlan is defined and delete_vlan|bool
  316. tags:
  317. - nxos
  318. - vlan
  319. - nxos-vlan
  320. - delete-svi
  321. - name: Remove VLAN from interfaces
  322. nxos_config:
  323. lines:
  324. - switchport trunk allowed vlan remove {{ vlan_id }}
  325. parents: interface {{ item }}
  326. with_items: "{{ iflist }}"
  327. when: delete_vlan is defined and delete_vlan|bool and iflist is defined
  328. tags:
  329. - nxos
  330. - vlan
  331. - nxos-vlan
  332. - remove-vlan
  333. - remove-ucs-vlan
  334. - name: Delete VLAN definition
  335. nxos_vlan:
  336. vlan_id: "{{ vlan_id }}"
  337. state: absent
  338. when: delete_vlan is defined and delete_vlan|bool
  339. tags:
  340. - nxos
  341. - vlan
  342. - nxos-vlan
  343. - delete-vlan
  344. - delete-nxos-vlan