project-template.yml 4.2 KB

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