init.sls 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. #
  2. # Bird routing daemon
  3. #
  4. {%- set roles = salt['pillar.get']('nodes:' ~ grains['id'] ~ ':roles', []) %}
  5. {%- set status = salt['pillar.get']('nodes:' ~ grains['id'] ~ ':status', 'active') %}
  6. include:
  7. - network.interfaces
  8. bird-pkg:
  9. pkg.installed:
  10. - name: bird
  11. # Make sure both services are enabled
  12. bird:
  13. service.running:
  14. - enable: True
  15. - running: True
  16. bird6:
  17. service.running:
  18. - enable: True
  19. - running: True
  20. # Reload commands for bird{,6} to be tied to files which should trigger reconfiguration
  21. bird-configure:
  22. cmd.wait:
  23. - name: /usr/sbin/birdc configure
  24. - watch: []
  25. bird6-configure:
  26. cmd.wait:
  27. - name: /usr/sbin/birdc6 configure
  28. - watch: []
  29. /etc/bird:
  30. file.directory:
  31. - mode: 750
  32. - user: bird
  33. - group: bird
  34. - require:
  35. - pkg: bird
  36. /etc/bird/bird.d:
  37. file.directory:
  38. - makedirs: true
  39. - mode: 755
  40. - user: root
  41. - group: bird
  42. - require:
  43. - file: /etc/bird
  44. /etc/bird/bird.conf:
  45. file.managed:
  46. - source: salt://bird/bird.conf
  47. - template: jinja
  48. proto: v4
  49. - require:
  50. - file: /etc/bird/bird.d
  51. - require_in:
  52. - service: bird
  53. - watch_in:
  54. - cmd: bird-configure
  55. - mode: 644
  56. - user: root
  57. - group: bird
  58. /etc/bird/bird6.d:
  59. file.directory:
  60. - makedirs: true
  61. - mode: 755
  62. - user: root
  63. - group: bird
  64. - require:
  65. - file: /etc/bird
  66. /etc/bird/bird6.conf:
  67. file.managed:
  68. - source: salt://bird/bird.conf
  69. - template: jinja
  70. proto: v6
  71. - require:
  72. - file: /etc/bird/bird6.d
  73. - watch_in:
  74. - cmd: bird6-configure
  75. - mode: 644
  76. - user: root
  77. - group: bird
  78. - require_in:
  79. - service: bird6
  80. #
  81. # External VRF / Routing table?
  82. #
  83. /etc/bird/bird.d/VRF_external.conf:
  84. file.managed:
  85. - source: salt://bird/VRF_external.conf
  86. - template: jinja
  87. proto: v4
  88. - watch_in:
  89. - cmd: bird-configure
  90. - require:
  91. - file: /etc/bird/bird.d
  92. - require_in:
  93. - service: bird
  94. /etc/bird/bird6.d/VRF_external.conf:
  95. file.managed:
  96. - source: salt://bird/VRF_external.conf
  97. - template: jinja
  98. proto: v6
  99. - watch_in:
  100. - cmd: bird6-configure
  101. - require:
  102. - file: /etc/bird/bird6.d
  103. - require_in:
  104. - service: bird6
  105. /etc/bird/bird.d/external.conf:
  106. file.absent
  107. /etc/bird/bird6.d/external.conf:
  108. file.absent
  109. #
  110. # IGP / OSPF
  111. #
  112. /etc/bird/bird.d/IGP.conf:
  113. file.managed:
  114. - source: salt://bird/IGP.conf
  115. - template: jinja
  116. proto: v4
  117. - watch_in:
  118. - cmd: bird-configure
  119. - require:
  120. - file: /etc/bird/bird.d
  121. - require_in:
  122. - service: bird
  123. /etc/bird/bird6.d/IGP.conf:
  124. file.managed:
  125. - source: salt://bird/IGP.conf
  126. - template: jinja
  127. proto: v6
  128. - watch_in:
  129. - cmd: bird6-configure
  130. - require:
  131. - file: /etc/bird/bird6.d
  132. - require_in:
  133. - service: bird6
  134. # Compatibility glue
  135. /etc/bird/bird6.d/IGP6.conf:
  136. file.absent:
  137. - watch_in:
  138. - cmd: bird-configure
  139. #
  140. # iBGP
  141. #
  142. /etc/bird/ff-policy.conf:
  143. file.managed:
  144. - source: salt://bird/ff-policy.conf
  145. - template: jinja
  146. proto: v4
  147. - watch_in:
  148. - cmd: bird-configure
  149. - require:
  150. - file: /etc/bird/bird.d
  151. - require_in:
  152. - service: bird
  153. /etc/bird/ff-policy6.conf:
  154. file.managed:
  155. - source: salt://bird/ff-policy.conf
  156. - template: jinja
  157. proto: v6
  158. - watch_in:
  159. - cmd: bird6-configure
  160. - require:
  161. - file: /etc/bird/bird6.d
  162. - require_in:
  163. - service: bird6
  164. /etc/bird/bird.d/ibgp.conf:
  165. file.managed:
  166. - source: salt://bird/ibgp.conf
  167. - template: jinja
  168. proto: v4
  169. - watch_in:
  170. - cmd: bird-configure
  171. - require:
  172. - file: /etc/bird/bird.d
  173. - require_in:
  174. - service: bird
  175. /etc/bird/bird6.d/ibgp.conf:
  176. file.managed:
  177. - source: salt://bird/ibgp.conf
  178. - template: jinja
  179. proto: v6
  180. - watch_in:
  181. - cmd: bird6-configure
  182. - require:
  183. - file: /etc/bird/bird6.d
  184. - require_in:
  185. - service: bird6
  186. #
  187. # FFRL-exit
  188. #
  189. {% if 'ffrl-exit' in roles %}
  190. /etc/bird/bird.d/ffrl.conf:
  191. file.managed:
  192. - source: salt://bird/ffrl.conf
  193. - template: jinja
  194. proto: v4
  195. - watch_in:
  196. - cmd: bird-configure
  197. - require:
  198. - file: /etc/bird/bird.d
  199. - require_in:
  200. - service: bird
  201. /etc/bird/bird6.d/ffrl.conf:
  202. file.managed:
  203. - source: salt://bird/ffrl.conf
  204. - template: jinja
  205. proto: v6
  206. - watch_in:
  207. - cmd: bird6-configure
  208. - require:
  209. - file: /etc/bird/bird6.d
  210. - require_in:
  211. - service: bird6
  212. /etc/bird/bird.d/bogon_unreach.conf:
  213. file.managed:
  214. - source: salt://bird/bogon_unreach.conf
  215. - template: jinja
  216. proto: v4
  217. - watch_in:
  218. - cmd: bird-configure
  219. - require:
  220. - file: /etc/bird/bird.d
  221. - require_in:
  222. - service: bird
  223. /etc/bird/bird6.d/bogon_unreach.conf:
  224. file.managed:
  225. - source: salt://bird/bogon_unreach.conf
  226. - template: jinja
  227. proto: v6
  228. - watch_in:
  229. - cmd: bird6-configure
  230. - require:
  231. - file: /etc/bird/bird6.d
  232. - require_in:
  233. - service: bird6
  234. {% else %}
  235. /etc/bird/bird.d/ffrl.conf:
  236. file.absent:
  237. - watch_in:
  238. - cmd: bird-configure
  239. /etc/bird/bird6.d/ffrl.conf:
  240. file.absent:
  241. - watch_in:
  242. - cmd: bird6-configure
  243. /etc/bird/bird.d/bogon_unreach.conf:
  244. file.absent:
  245. - watch_in:
  246. - cmd: bird-configure
  247. /etc/bird/bird6.d/bogon_unreach.conf:
  248. file.absent:
  249. - watch_in:
  250. - cmd: bird6-configure
  251. {% endif %}
  252. #
  253. # B.A.T.M.A.N. Gateway
  254. #
  255. {% if 'batman_gw' in roles %}
  256. /etc/bird/bird.d/mesh_routes.conf:
  257. file.managed:
  258. - source: salt://bird/mesh_routes.conf
  259. - template: jinja
  260. - watch_in:
  261. - cmd: bird-configure
  262. - require:
  263. - file: /etc/bird/bird.d
  264. - require_in:
  265. - service: bird
  266. /etc/bird/bird6.d/mesh_routes.conf:
  267. file.managed:
  268. - source: salt://bird/mesh_routes.conf
  269. - template: jinja
  270. - watch_in:
  271. - cmd: bird6-configure
  272. - require:
  273. - file: /etc/bird/bird6.d
  274. - require_in:
  275. - service: bird6
  276. {% else %}
  277. /etc/bird/bird.d/mesh_routes.conf:
  278. file.absent:
  279. - watch_in:
  280. - cmd: bird-configure
  281. /etc/bird/bird6.d/mesh_routes.conf:
  282. file.absent:
  283. - watch_in:
  284. - cmd: bird6-configure
  285. {% endif %}
  286. #
  287. # L3 Access
  288. #
  289. {% if 'l3-access' in roles %}
  290. /etc/bird/bird.d/l3-access.conf:
  291. file.managed:
  292. - source: salt://bird/l3-access.conf
  293. - template: jinja
  294. - watch_in:
  295. - cmd: bird-configure
  296. - require:
  297. - file: /etc/bird/bird.d
  298. - require_in:
  299. - service: bird
  300. /etc/bird/bird6.d/l3-access.conf:
  301. file.managed:
  302. - source: salt://bird/l3-access.conf
  303. - template: jinja
  304. - watch_in:
  305. - cmd: bird6-configure
  306. - require:
  307. - file: /etc/bird/bird6.d
  308. - require_in:
  309. - service: bird6
  310. {% else %}
  311. /etc/bird/bird.d/l3-access.conf:
  312. file.absent:
  313. - watch_in:
  314. - cmd: bird-configure
  315. /etc/bird/bird6.d/l3-access.conf:
  316. file.absent:
  317. - watch_in:
  318. - cmd: bird6-configure
  319. {% endif %}
  320. #
  321. # RAdvd (for B.A.T.M.A.N. Gateways / L3-Access)
  322. #
  323. {% if status == 'active' and ('radv' in roles or 'l3-access' in roles or ('batman_gw' in roles and grains.id.startswith('gw'))) %}
  324. /etc/bird/bird6.d/radv.conf:
  325. file.managed:
  326. - source: salt://bird/radv.conf
  327. - template: jinja
  328. - watch_in:
  329. - cmd: bird6-configure
  330. - require:
  331. - file: /etc/bird/bird6.d
  332. - require_in:
  333. - service: bird6
  334. {% else %}
  335. /etc/bird/bird6.d/radv.conf:
  336. file.absent:
  337. - watch_in:
  338. - cmd: bird6-configure
  339. {% endif %}