web: Enable custom metadata for Service resources
Being able to add custom annotations and labels to generated resources helps to make the generated Zuul clusters more turnkey. For example, in clusters where Ambassador Edge stack is being employed, ingress configuration may be provided by a custom config annotation on the underlying resources. This change introduces annotation and label templates in such a way as to make this functionality more extensible later (eg: they exist in a template -> service sub-property of the respective configuration objects) so as to make it easier to apply similar behaviour later to other resource types. The functionality applies to all existing services (executor, web, fingergw, and preview). Change-Id: I202f01caa8f35d93d8ffa06931e476be330c8f48
This commit is contained in:
parent
32b7567673
commit
55a9aa1956
|
@ -101,6 +101,21 @@ spec:
|
|||
type: integer
|
||||
default: 21600
|
||||
minimum: 0
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
merger:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -118,12 +133,42 @@ spec:
|
|||
default: 1
|
||||
status_url:
|
||||
type: string
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
fingergw:
|
||||
type: object
|
||||
properties:
|
||||
count:
|
||||
type: integer
|
||||
default: 1
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
connections:
|
||||
type: object
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
|
@ -161,6 +206,21 @@ spec:
|
|||
count:
|
||||
type: integer
|
||||
default: 0
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
registry:
|
||||
type: object
|
||||
properties:
|
||||
|
|
|
@ -439,6 +439,26 @@ verbatim):
|
|||
|
||||
The key name in the secret should be ``sshkey``.
|
||||
|
||||
.. attr:: template
|
||||
|
||||
Template for generated resources
|
||||
|
||||
.. attr:: service
|
||||
|
||||
Template to apply to service resource
|
||||
|
||||
.. attr:: metadata
|
||||
|
||||
Template metadata to apply
|
||||
|
||||
.. attr:: labels
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: annotations
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: terminationGracePeriodSeconds
|
||||
:default: 21600
|
||||
|
||||
|
@ -466,6 +486,26 @@ verbatim):
|
|||
How many Zuul webservers to manage. This is a required
|
||||
component and should be at least 1.
|
||||
|
||||
.. attr:: template
|
||||
|
||||
Template for generated resources
|
||||
|
||||
.. attr:: service
|
||||
|
||||
Template to apply to service resource
|
||||
|
||||
.. attr:: metadata
|
||||
|
||||
Template metadata to apply
|
||||
|
||||
.. attr:: labels
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: annotations
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: fingergw
|
||||
|
||||
.. attr:: count
|
||||
|
@ -473,6 +513,26 @@ verbatim):
|
|||
|
||||
How many Zuul finger gateway servers to manage.
|
||||
|
||||
.. attr:: template
|
||||
|
||||
Template for generated resources
|
||||
|
||||
.. attr:: service
|
||||
|
||||
Template to apply to service resource
|
||||
|
||||
.. attr:: metadata
|
||||
|
||||
Template metadata to apply
|
||||
|
||||
.. attr:: labels
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: annotations
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: connections
|
||||
|
||||
This is a mapping designed to match the `connections` entries
|
||||
|
@ -617,6 +677,26 @@ verbatim):
|
|||
|
||||
How many Zuul Preview servers to manage.
|
||||
|
||||
.. attr:: template
|
||||
|
||||
Template for generated resources
|
||||
|
||||
.. attr:: service
|
||||
|
||||
Template to apply to service resource
|
||||
|
||||
.. attr:: metadata
|
||||
|
||||
Template metadata to apply
|
||||
|
||||
.. attr:: labels
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: annotations
|
||||
|
||||
Key-Value pairs of labels to be applied
|
||||
|
||||
.. attr:: registry
|
||||
|
||||
.. attr:: count
|
||||
|
|
|
@ -101,6 +101,21 @@ spec:
|
|||
type: integer
|
||||
default: 21600
|
||||
minimum: 0
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
merger:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -118,12 +133,42 @@ spec:
|
|||
default: 1
|
||||
status_url:
|
||||
type: string
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
fingergw:
|
||||
type: object
|
||||
properties:
|
||||
count:
|
||||
type: integer
|
||||
default: 1
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
connections:
|
||||
type: object
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
|
@ -161,6 +206,21 @@ spec:
|
|||
count:
|
||||
type: integer
|
||||
default: 0
|
||||
template:
|
||||
type: object
|
||||
properties:
|
||||
service:
|
||||
type: object
|
||||
properties:
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
labels:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
annotations:
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type: object
|
||||
registry:
|
||||
type: object
|
||||
properties:
|
||||
|
|
|
@ -32,6 +32,20 @@ metadata:
|
|||
app.kubernetes.io/instance: {{ instance_name }}
|
||||
app.kubernetes.io/part-of: zuul
|
||||
app.kubernetes.io/component: zuul-executor
|
||||
{%- for name, value in spec.executor.template.service.metadata.labels.items() %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endfor %}
|
||||
{%- if spec.executor.template.service.metadata.annotations %}
|
||||
annotations:
|
||||
{%- for name, value in spec.executor.template.service.metadata.annotations.items() %}
|
||||
{%- if '\n' in value %}
|
||||
{{ name }}: |
|
||||
{{ value | indent(6) }}
|
||||
{%- else %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
|
@ -55,6 +69,20 @@ metadata:
|
|||
app.kubernetes.io/instance: {{ instance_name }}
|
||||
app.kubernetes.io/part-of: zuul
|
||||
app.kubernetes.io/component: zuul-web
|
||||
{%- for name, value in spec.web.template.service.metadata.labels.items() %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endfor %}
|
||||
{%- if spec.web.template.service.metadata.annotations %}
|
||||
annotations:
|
||||
{%- for name, value in spec.web.template.service.metadata.annotations.items() %}
|
||||
{%- if '\n' in value %}
|
||||
{{ name }}: |
|
||||
{{ value | indent(6) }}
|
||||
{%- else %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
|
@ -77,6 +105,20 @@ metadata:
|
|||
app.kubernetes.io/instance: {{ instance_name }}
|
||||
app.kubernetes.io/part-of: zuul
|
||||
app.kubernetes.io/component: zuul-fingergw
|
||||
{%- for name, value in spec.fingergw.template.service.metadata.labels.items() %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endfor %}
|
||||
{%- if spec.fingergw.template.service.metadata.annotations %}
|
||||
annotations:
|
||||
{%- for name, value in spec.fingergw.template.service.metadata.annotations.items() %}
|
||||
{%- if '\n' in value %}
|
||||
{{ name }}: |
|
||||
{{ value | indent(6) }}
|
||||
{%- else %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
|
@ -444,6 +486,20 @@ metadata:
|
|||
app.kubernetes.io/instance: {{ instance_name }}
|
||||
app.kubernetes.io/part-of: zuul
|
||||
app.kubernetes.io/component: zuul-preview
|
||||
{%- for name, value in spec.preview.template.service.metadata.labels.items() %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endfor %}
|
||||
{%- if spec.preview.template.service.metadata.annotations %}
|
||||
annotations:
|
||||
{%- for name, value in spec.preview.template.service.metadata.annotations.items() %}
|
||||
{%- if '\n' in value %}
|
||||
{{ name }}: |
|
||||
{{ value | indent(6) }}
|
||||
{%- else %}
|
||||
{{ name }}: {{ value }}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
|
|
|
@ -28,6 +28,14 @@ from . import pxc
|
|||
from . import zookeeper
|
||||
|
||||
|
||||
def add_template_properties(spec):
|
||||
template = spec.setdefault('template', {})
|
||||
service_template = template.setdefault('service', {})
|
||||
service_metadata = service_template.setdefault('metadata', {})
|
||||
service_metadata.setdefault('labels', {})
|
||||
service_metadata.setdefault('annotations', {})
|
||||
|
||||
|
||||
class Zuul:
|
||||
def __init__(self, namespace, name, logger, spec, zuul_image_version):
|
||||
self.api = pykube.HTTPClient(pykube.KubeConfig.from_env())
|
||||
|
@ -70,13 +78,25 @@ class Zuul:
|
|||
'/etc/zuul/tenant/main.yaml'
|
||||
self.spec.setdefault('scheduler', {}).setdefault(
|
||||
'storageClassName', '')
|
||||
self.spec.setdefault('executor', {}).setdefault('count', 1)
|
||||
self.spec.setdefault('executor', {}).setdefault(
|
||||
'terminationGracePeriodSeconds', 21600)
|
||||
|
||||
executor = self.spec.setdefault('executor', {})
|
||||
executor.setdefault('count', 1)
|
||||
executor.setdefault('terminationGracePeriodSeconds', 21600)
|
||||
add_template_properties(executor)
|
||||
|
||||
self.spec.setdefault('merger', {}).setdefault('count', 0)
|
||||
self.spec.setdefault('web', {}).setdefault('count', 1)
|
||||
self.spec.setdefault('fingergw', {}).setdefault('count', 1)
|
||||
self.spec.setdefault('preview', {}).setdefault('count', 0)
|
||||
web = self.spec.setdefault('web', {})
|
||||
web.setdefault('count', 1)
|
||||
add_template_properties(web)
|
||||
|
||||
fingergw = self.spec.setdefault('fingergw', {})
|
||||
fingergw.setdefault('count', 1)
|
||||
add_template_properties(fingergw)
|
||||
|
||||
registry = self.spec.setdefault('preview', {})
|
||||
registry.setdefault('count', 0)
|
||||
add_template_properties(registry)
|
||||
|
||||
registry = self.spec.setdefault('registry', {})
|
||||
registry.setdefault('count', 0)
|
||||
registry.setdefault('volumeSize', '80Gi')
|
||||
|
|
Loading…
Reference in New Issue