project-template.yml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. ---
  2. apiVersion: v1
  3. kind: List
  4. metadata: {}
  5. items:
  6. - apiVersion: project.openshift.io/v1
  7. kind: Project
  8. metadata:
  9. {% if (role.state | default("present")) == "present" %}
  10. annotations:
  11. openshift.io/description: "ICHP Namespace Requested For {{ role.requester }}"
  12. openshift.io/display-name: "{{ role.displayname | default(role.name) }}"
  13. openshift.io/requester: {{ role.requester }}
  14. labels:
  15. ichp.ing.net/generated: ''
  16. {% endif %}
  17. name: {{ role.name }}
  18. spec: {}
  19. {% if (role.state | default("present")) == "present" %}
  20. - apiVersion: rbac.authorization.k8s.io/v1
  21. kind: RoleBinding
  22. metadata:
  23. name: {{ role.rbac_level }}
  24. namespace: {{ role.name }}
  25. labels:
  26. ichp.ing.net/requester-rolebinding: ''
  27. ichp.ing.net/generated: ''
  28. roleRef:
  29. apiGroup: rbac.authorization.k8s.io
  30. kind: ClusterRole
  31. name: {{ role.rbac_level }}
  32. subjects:
  33. - apiGroup: rbac.authorization.k8s.io
  34. kind: User
  35. name: {{ role.requester }}
  36. - apiVersion: networking.k8s.io/v1
  37. kind: NetworkPolicy
  38. metadata:
  39. name: allow-from-ichp-infra
  40. namespace: {{ role.name }}
  41. labels:
  42. ichp.ing.net/generated: ''
  43. spec:
  44. ingress:
  45. - from:
  46. - namespaceSelector:
  47. matchLabels:
  48. ichp_infra: "true"
  49. podSelector: {}
  50. policyTypes:
  51. - Ingress
  52. - apiVersion: networking.k8s.io/v1
  53. kind: NetworkPolicy
  54. metadata:
  55. name: allow-from-openshift-ingress
  56. namespace: {{ role.name }}
  57. labels:
  58. ichp.ing.net/generated: ''
  59. spec:
  60. ingress:
  61. - from:
  62. - namespaceSelector:
  63. matchLabels:
  64. network.openshift.io/policy-group: ingress
  65. podSelector: {}
  66. policyTypes:
  67. - Ingress
  68. - apiVersion: networking.k8s.io/v1
  69. kind: NetworkPolicy
  70. metadata:
  71. name: allow-from-same-namespace
  72. namespace: {{ role.name }}
  73. labels:
  74. ichp.ing.net/generated: ''
  75. spec:
  76. ingress:
  77. - from:
  78. - podSelector: {}
  79. podSelector: {}
  80. policyTypes:
  81. - Ingress
  82. - apiVersion: networking.k8s.io/v1
  83. kind: NetworkPolicy
  84. metadata:
  85. name: deny-from-all
  86. namespace: {{ role.name }}
  87. labels:
  88. ichp.ing.net/generated: ''
  89. spec:
  90. podSelector: {}
  91. policyTypes:
  92. - Ingress
  93. - apiVersion: v1
  94. kind: ResourceQuota
  95. metadata:
  96. name: compute-quota
  97. namespace: {{ role.name }}
  98. labels:
  99. ichp.ing.net/generated: ''
  100. spec:
  101. hard:
  102. requests.cpu: {{ role.quota.requests.cpu | default("1500m") }}
  103. requests.memory: {{ role.quota.requests.memory | default("2048Mi") }}
  104. limits.cpu: {{ role.quota.limits.cpu | default("4000m") }}
  105. limits.memory: {{ role.quota.limits.memory | default("4096Mi") }}
  106. - apiVersion: v1
  107. kind: ResourceQuota
  108. metadata:
  109. name: storage-quota
  110. namespace: {{ role.name }}
  111. labels:
  112. ichp.ing.net/generated: ''
  113. spec:
  114. hard:
  115. persistentvolumeclaims: 0
  116. requests.storage: "0"
  117. requests.ephemeral-storage: 2048Mi
  118. limits.ephemeral-storage: 4096Mi
  119. - apiVersion: v1
  120. kind: LimitRange
  121. metadata:
  122. name: limit-ranges
  123. namespace: {{ role.name }}
  124. labels:
  125. ichp.ing.net/generated: ''
  126. spec:
  127. limits:
  128. - type: Container
  129. max:
  130. cpu: {{ role.lrange.max.cpu | default("4000m") }}
  131. memory: {{ role.lrange.max.memory | default("4096Mi") }}
  132. min:
  133. cpu: {{ role.lrange.min.cpu | default("50m") }}
  134. memory: {{ role.lrange.min.memory| default("64Mi") }}
  135. maxLimitRequestRatio:
  136. cpu: {{ role.lrange.ratio.cpu | default(4) }}
  137. memory: {{ role.lrange.ratio.memory | default(4) }}
  138. default:
  139. cpu: {{ role.lrange.default.limit.cpu | default((role.lrange.min.cpu | default("50m") | regex_replace('m$', '') | int) * (role.lrange.ratio.cpu | default(4))) | regex_replace('m$', '') }}m
  140. memory: {{ role.lrange.default.limit.memory | default((role.lrange.min.memory | default("64Mi") | regex_replace('Mi$', '') | int) * (role.lrange.ratio.memory | default(4))) | regex_replace('Mi$', '') }}Mi
  141. defaultRequest:
  142. cpu: {{ role.lrange.default.request.cpu | default(role.lrange.min.cpu | default("50m")) }}
  143. memory: {{ role.lrange.default.request.memory | default(role.lrange.min.memory | default("64Mi")) }}
  144. {% endif %}
  145. - apiVersion: k8s.ovn.org/v1
  146. kind: EgressIP
  147. metadata:
  148. name: egress-ns-{{ role.name }}
  149. labels:
  150. egress.for.namespace: {{ role.name }}
  151. ichp.ing.net/generated: ''
  152. {% if (role.state | default("present")) == "present" %}
  153. spec:
  154. egressIPs:
  155. - {{ allocated_egressip }}
  156. namespaceSelector:
  157. matchLabels:
  158. kubernetes.io/metadata.name: {{ role.name }}
  159. podSelector: {}
  160. {% endif %}
  161. ...