Saltstack Official Linux Formula
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

240 lines
7.7KB

  1. {%- from "linux/map.jinja" import system with context %}
  2. {%- if system.enabled %}
  3. {% if system.pkgs %}
  4. linux_repo_prereq_pkgs:
  5. pkg.installed:
  6. - pkgs: {{ system.pkgs }}
  7. {%- endif %}
  8. # global proxy setup
  9. {%- if system.proxy.get('pkg', {}).get('enabled', False) %}
  10. {%- if grains.os_family == 'Debian' %}
  11. /etc/apt/apt.conf.d/99proxies-salt:
  12. file.managed:
  13. - template: jinja
  14. - source: salt://linux/files/apt.conf.d_proxies
  15. - defaults:
  16. external_host: False
  17. https: {{ system.proxy.get('pkg', {}).get('https', None) | default(system.proxy.get('https', None), true) }}
  18. http: {{ system.proxy.get('pkg', {}).get('http', None) | default(system.proxy.get('http', None), true) }}
  19. ftp: {{ system.proxy.get('pkg', {}).get('ftp', None) | default(system.proxy.get('ftp', None), true) }}
  20. {%- else %}
  21. /etc/apt/apt.conf.d/99proxies-salt:
  22. file.absent
  23. {%- endif %}
  24. {%- endif %}
  25. {% set default_repos = {} %}
  26. {%- if system.purge_repos|default(False) %}
  27. purge_sources_list_d_repos:
  28. file.directory:
  29. - name: /etc/apt/sources.list.d/
  30. - clean: True
  31. {%- endif %}
  32. {%- for name, repo in system.repo.items() %}
  33. {%- set name=repo.get('name', name) %}
  34. {%- if grains.os_family == 'Debian' %}
  35. # per repository proxy setup
  36. {%- if repo.get('proxy', {}).get('enabled', False) %}
  37. {%- set external_host = repo.proxy.get('host', None) or repo.source.split('/')[2] %}
  38. /etc/apt/apt.conf.d/99proxies-salt-{{ name }}:
  39. file.managed:
  40. - template: jinja
  41. - source: salt://linux/files/apt.conf.d_proxies
  42. - defaults:
  43. external_host: {{ external_host }}
  44. https: {{ repo.proxy.get('https', None) or system.proxy.get('pkg', {}).get('https', None) | default(system.proxy.get('https', None), True) }}
  45. http: {{ repo.proxy.get('http', None) or system.proxy.get('pkg', {}).get('http', None) | default(system.proxy.get('http', None), True) }}
  46. ftp: {{ repo.proxy.get('ftp', None) or system.proxy.get('pkg', {}).get('ftp', None) | default(system.proxy.get('ftp', None), True) }}
  47. {%- else %}
  48. /etc/apt/apt.conf.d/99proxies-salt-{{ name }}:
  49. file.absent
  50. {%- endif %}
  51. {%- if repo.pin is defined %}
  52. linux_repo_{{ name }}_pin:
  53. file.managed:
  54. - name: /etc/apt/preferences.d/{{ name }}
  55. - source: salt://linux/files/preferences_repo
  56. - template: jinja
  57. - defaults:
  58. repo_name: {{ name }}
  59. {%- else %}
  60. linux_repo_{{ name }}_pin:
  61. file.absent:
  62. - name: /etc/apt/preferences.d/{{ name }}
  63. {%- endif %}
  64. {%- if repo.get('key') %} {# 2 #}
  65. linux_repo_{{ name }}_key:
  66. cmd.run:
  67. - name: |
  68. echo "{{ repo.key | indent(12) }}" | apt-key add -
  69. - require_in:
  70. {%- if repo.get('default', False) %}
  71. - file: default_repo_list
  72. {% else %}
  73. - pkgrepo: linux_repo_{{ name }}
  74. {% endif %}
  75. {# key_url fetch by curl when salt <2017.7, higher version of salt has
  76. fixed bug for using a proxy_host/port specified at minion.conf
  77. NOTE: curl/cmd.run usage to fetch gpg key has limited functionality behind proxy.
  78. Environments with salt >= 2017.7 should use key_url specified at
  79. pkgrepo.manage state (which uses properly configured http_host at
  80. minion.conf). Older versions of salt require to have proxy set at
  81. ENV and curl way to fetch gpg key here can have a sense for backward
  82. compatibility. Be aware that as of salt 2018.3 no_proxy option is
  83. not implemented at all.
  84. #}
  85. {%- elif repo.key_url|default(False) and grains['saltversioninfo'] < [2017, 7] and not repo.key_url.startswith('salt://') %}
  86. linux_repo_{{ name }}_key:
  87. cmd.run:
  88. - name: "curl -sL {{ repo.key_url }} | apt-key add -"
  89. - require_in:
  90. {%- if repo.get('default', False) %}
  91. - file: default_repo_list
  92. {% else %}
  93. - pkgrepo: linux_repo_{{ name }}
  94. {% endif %}
  95. {%- endif %}
  96. {%- if repo.get('default', False) %}
  97. {%- do default_repos.update({name: repo}) %}
  98. {%- else %}
  99. {%- if repo.get('enabled', True) %}
  100. linux_repo_{{ name }}:
  101. pkgrepo.managed:
  102. - refresh_db: False
  103. - require_in:
  104. - refresh_db
  105. {%- if repo.ppa is defined %}
  106. - ppa: {{ repo.ppa }}
  107. {%- else %}
  108. - humanname: {{ name }}
  109. - name: {{ repo.source }}
  110. {%- if repo.architectures is defined %}
  111. - architectures: {{ repo.architectures }}
  112. {%- endif %}
  113. - file: /etc/apt/sources.list.d/{{ name }}.list
  114. - clean_file: {{ repo.get('clean_file', True) }}
  115. {%- if repo.key_id is defined %}
  116. - keyid: {{ repo.key_id }}
  117. {%- endif %}
  118. {%- if repo.key_server is defined %}
  119. - keyserver: {{ repo.key_server }}
  120. {%- endif %}
  121. {%- if repo.key_url is defined and (grains['saltversioninfo'] >= [2017, 7] or repo.key_url.startswith('salt://')) %}
  122. - key_url: {{ repo.key_url }}
  123. {%- endif %}
  124. - consolidate: {{ repo.get('consolidate', False) }}
  125. {%- if repo.get('proxy', {}).get('enabled', False) or system.proxy.get('pkg', {}).get('enabled', False) or system.purge_repos|default(False) %}
  126. - require:
  127. {%- if repo.get('proxy', {}).get('enabled', False) %}
  128. - file: /etc/apt/apt.conf.d/99proxies-salt-{{ name }}
  129. {%- endif %}
  130. {%- if system.proxy.get('pkg', {}).get('enabled', False) %}
  131. - file: /etc/apt/apt.conf.d/99proxies-salt
  132. {%- endif %}
  133. {%- if system.purge_repos|default(False) %}
  134. - file: purge_sources_list_d_repos
  135. {%- endif %}
  136. {%- endif %}
  137. {%- endif %}
  138. {%- else %}
  139. linux_repo_{{ name }}_absent:
  140. pkgrepo.absent:
  141. - refresh_db: False
  142. - require_in:
  143. - refresh_db
  144. {%- if repo.ppa is defined %}
  145. - ppa: {{ repo.ppa }}
  146. {%- if repo.key_id is defined %}
  147. - keyid_ppa: {{ repo.keyid_ppa }}
  148. {%- endif %}
  149. {%- else %}
  150. - file: /etc/apt/sources.list.d/{{ name }}.list
  151. {%- if repo.key_id is defined %}
  152. - keyid: {{ repo.key_id }}
  153. {%- endif %}
  154. {%- endif %}
  155. file.absent:
  156. - names:
  157. - /etc/apt/sources.list.d/{{ name }}.list
  158. - /etc/apt/apt.conf.d/99proxies-salt-{{ name }}
  159. {%- endif %}
  160. {%- endif %}
  161. {%- endif %}
  162. {%- if grains.os_family == "RedHat" %}
  163. {%- if repo.get('enabled', True) %}
  164. {%- if repo.get('proxy', {}).get('enabled', False) %}
  165. # PLACEHOLDER
  166. # TODO, implement per proxy configuration for Yum
  167. {%- endif %}
  168. {%- if not repo.get('default', False) %}
  169. linux_repo_{{ name }}:
  170. pkgrepo.managed:
  171. - refresh_db: False
  172. - require_in:
  173. - refresh_db
  174. - name: {{ name }}
  175. - humanname: {{ repo.get('humanname', name) }}
  176. {%- if repo.mirrorlist is defined %}
  177. - mirrorlist: {{ repo.mirrorlist }}
  178. {%- else %}
  179. - baseurl: {{ repo.source }}
  180. {%- endif %}
  181. - gpgcheck: {% if repo.get('gpgcheck', False) %}1{% else %}0{% endif %}
  182. {%- if repo.gpgkey is defined %}
  183. - gpgkey: {{ repo.gpgkey }}
  184. {%- endif %}
  185. {%- endif %}
  186. {%- else %}
  187. pkgrepo.absent:
  188. - refresh_db: False
  189. - require_in:
  190. - refresh_db
  191. - name: {{ repo.source }}
  192. {%- endif %}
  193. {%- endif %}
  194. {%- endfor %}
  195. {%- if default_repos|length > 0 and grains.os_family == 'Debian' %}
  196. default_repo_list:
  197. file.managed:
  198. - name: /etc/apt/sources.list
  199. - source: salt://linux/files/sources.list
  200. - template: jinja
  201. - user: root
  202. - group: root
  203. - mode: 0644
  204. {%- if system.purge_repos|default(False) %}
  205. - replace: True
  206. {%- endif %}
  207. - defaults:
  208. default_repos: {{ default_repos }}
  209. {%- endif %}
  210. refresh_db:
  211. {%- if system.get('refresh_repos_meta', True) %}
  212. module.run:
  213. - name: pkg.refresh_db
  214. {%- else %}
  215. test.succeed_without_changes
  216. {%- endif %}
  217. {%- endif %}