Saltstack Official Linux Formula
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

252 lines
6.6KB

  1. {%- from "linux/map.jinja" import network with context %}
  2. {%- from "linux/map.jinja" import system with context %}
  3. {%- if network.enabled %}
  4. {%- macro set_param(param_name, param_dict) -%}
  5. {%- if param_dict.get(param_name, False) -%}
  6. - {{ param_name }}: {{ param_dict[param_name] }}
  7. {%- endif -%}
  8. {%- endmacro -%}
  9. {%- if network.bridge != 'none' %}
  10. linux_network_bridge_pkgs:
  11. pkg.installed:
  12. {%- if network.bridge == 'openvswitch' %}
  13. - names: {{ network.ovs_pkgs }}
  14. {%- else %}
  15. - names: {{ network.bridge_pkgs }}
  16. {%- endif %}
  17. {%- endif %}
  18. {%- for interface_name, interface in network.interface.iteritems() %}
  19. {%- if interface.get('managed', True) %}
  20. {%- if grains.os_family in ['RedHat', 'Debian'] %}
  21. {%- if interface.type == 'ovs_bridge' %}
  22. ovs_bridge_{{ interface_name }}:
  23. openvswitch_bridge.present:
  24. - name: {{ interface_name }}
  25. {%- elif interface.type == 'ovs_port' %}
  26. {#
  27. ovs_port_{{ interface_name }}:
  28. openvswitch_port.present:
  29. - name: {{ interface_name }}
  30. - bridge: {{ interface.bridge }}
  31. - require:
  32. - openvswitch_bridge: ovs_bridge_{{ interface.bridge }}
  33. #}
  34. linux_interfaces_include:
  35. file.prepend:
  36. - name: /etc/network/interfaces
  37. - text: 'source /etc/network/interfaces.d/*'
  38. ovs_port_{{ interface_name }}:
  39. file.managed:
  40. - name: /etc/network/interfaces.d/ifcfg-{{ interface_name }}
  41. - source: salt://linux/files/ovs_port
  42. - defaults:
  43. port: {{ interface|yaml }}
  44. port_name: {{ interface_name }}
  45. - template: jinja
  46. ovs_port_{{ interface_name }}_line1:
  47. file.replace:
  48. - name: /etc/network/interfaces
  49. - pattern: auto {{ interface_name }}
  50. - repl: ""
  51. ovs_port_{{ interface_name }}_line2:
  52. file.replace:
  53. - name: /etc/network/interfaces
  54. - pattern: iface {{ interface_name }} inet manual
  55. - repl: ""
  56. ovs_port_up_{{ interface_name }}:
  57. cmd.run:
  58. - name: ifup {{ interface_name }}
  59. - require:
  60. - file: ovs_port_{{ interface_name }}
  61. - file: ovs_port_{{ interface_name }}_line1
  62. - file: ovs_port_{{ interface_name }}_line2
  63. - openvswitch_bridge: ovs_bridge_{{ interface.bridge }}
  64. {%- else %}
  65. linux_interface_{{ interface_name }}:
  66. network.managed:
  67. - enabled: {{ interface.enabled }}
  68. - name: {{ interface.get('name', interface_name) }}
  69. - type: {{ interface.type }}
  70. {%- if interface.address is defined %}
  71. {%- if grains.os_family == 'Debian' %}
  72. - proto: {{ interface.get('proto', 'static') }}
  73. {% endif %}
  74. {%- if grains.os_family == 'RedHat' %}
  75. {%- if interface.get('proto', 'none') == 'manual' %}
  76. - proto: 'none'
  77. {%- else %}
  78. - proto: {{ interface.get('proto', 'none') }}
  79. {%- endif %}
  80. {% endif %}
  81. - ipaddr: {{ interface.address }}
  82. - netmask: {{ interface.netmask }}
  83. {%- else %}
  84. - proto: {{ interface.get('proto', 'dhcp') }}
  85. {%- endif %}
  86. {%- if interface.name_servers is defined %}
  87. - dns: {{ interface.name_servers }}
  88. {%- endif %}
  89. {%- if interface.wireless is defined and grains.os_family == 'Debian' %}
  90. {%- if interface.wireless.security == "wpa" %}
  91. - wpa-ssid: {{ interface.wireless.essid }}
  92. - wpa-psk: {{ interface.wireless.key }}
  93. {%- else %}
  94. - wireless-ssid: {{ interface.wireless.essid }}
  95. - wireless-psk: {{ interface.wireless.key }}
  96. {%- endif %}
  97. {%- endif %}
  98. {%- for param in network.interface_params %}
  99. {{ set_param(param, interface) }}
  100. {%- endfor %}
  101. {%- if interface.type == 'bridge' %}
  102. - bridge: {{ interface_name }}
  103. - delay: 0
  104. - bypassfirewall: True
  105. - use:
  106. {%- for network in interface.use_interfaces %}
  107. - network: linux_interface_{{ network }}
  108. {%- endfor %}
  109. - ports: {% for network in interface.get('use_interfaces', []) %}{{ network }} {% endfor %}{% for network in interface.get('use_ovs_ports', []) %}{{ network }} {% endfor %}
  110. - require:
  111. {%- for network in interface.get('use_interfaces', []) %}
  112. - network: linux_interface_{{ network }}
  113. {%- endfor %}
  114. {%- for network in interface.get('use_ovs_ports', []) %}
  115. - cmd: ovs_port_up_{{ network }}
  116. {%- endfor %}
  117. {%- endif %}
  118. {%- if interface.type == 'bond' %}
  119. - slaves: {{ interface.slaves }}
  120. - mode: {{ interface.mode }}
  121. {%- endif %}
  122. {%- for network in interface.get('use_ovs_ports', []) %}
  123. remove_interface_{{ network }}_line1:
  124. file.replace:
  125. - name: /etc/network/interfaces
  126. - pattern: auto {{ network }}
  127. - repl: ""
  128. remove_interface_{{ network }}_line2:
  129. file.replace:
  130. - name: /etc/network/interfaces
  131. - pattern: iface {{ network }} inet manual
  132. - repl: ""
  133. {%- endfor %}
  134. {%- if interface.gateway is defined %}
  135. linux_system_network:
  136. network.system:
  137. - enabled: {{ interface.enabled }}
  138. - hostname: {{ network.fqdn }}
  139. {%- if interface.gateway is defined %}
  140. - gateway: {{ interface.gateway }}
  141. - gatewaydev: {{ interface_name }}
  142. {%- endif %}
  143. - nozeroconf: True
  144. - nisdomain: {{ system.domain }}
  145. - require_reboot: False
  146. {%- endif %}
  147. {%- endif %}
  148. {%- endif %}
  149. {%- if interface.wireless is defined %}
  150. {%- if grains.os_family == 'Arch' %}
  151. linux_network_packages:
  152. pkg.installed:
  153. - names: {{ network.pkgs }}
  154. /etc/netctl/network_{{ interface.wireless.essid }}:
  155. file.managed:
  156. - source: salt://linux/files/wireless
  157. - mode: 755
  158. - template: jinja
  159. - require:
  160. - pkg: linux_network_packages
  161. - defaults:
  162. interface_name: {{ interface_name }}
  163. switch_profile_{{ interface.wireless.essid }}:
  164. cmd.run:
  165. - name: netctl switch-to network_{{ interface.wireless.essid }}
  166. - cwd: /root
  167. - unless: "iwconfig {{ interface_name }} | grep -e 'ESSID:\"{{ interface.wireless.essid }}\"'"
  168. - require:
  169. - file: /etc/netctl/network_{{ interface.wireless.essid }}
  170. enable_profile_{{ interface.wireless.essid }}:
  171. cmd.run:
  172. - name: netctl enable network_{{ interface.wireless.essid }}
  173. - cwd: /root
  174. - unless: test -e /etc/systemd/system/multi-user.target.wants/netctl@network_{{ interface.wireless.essid }}.service
  175. - require:
  176. - file: /etc/netctl/network_{{ interface.wireless.essid }}
  177. {%- endif %}
  178. {%- endif %}
  179. {%- endif %}
  180. {%- if interface.route is defined %}
  181. linux_network_{{ interface_name }}_routes:
  182. network.routes:
  183. - name: {{ interface_name }}
  184. - routes:
  185. {%- for route_name, route in interface.route.iteritems() %}
  186. - name: {{ route_name }}
  187. ipaddr: {{ route.address }}
  188. netmask: {{ route.netmask }}
  189. gateway: {{ route.gateway }}
  190. {%- endfor %}
  191. {%- endif %}
  192. {%- endfor %}
  193. {%- if network.bridge != 'none' %}
  194. linux_interfaces_final_include:
  195. file.prepend:
  196. - name: /etc/network/interfaces
  197. - text: 'source /etc/network/interfaces.d/*'
  198. {%- endif %}
  199. {%- endif %}
  200. {%- if network.network_manager.disable is defined and network.network_manager.disable == True %}
  201. NetworkManager:
  202. service.dead:
  203. - enable: false
  204. {%- endif %}