runner-controller: do not delete runner if it is busy (#103)
Currently, after refreshing the token, the controller re-creates the runner with the new token. This results in jobs being interrupted. This PR makes sure the pod is not restarted if it is busy. Closes #74
This commit is contained in:
parent
7b5e62e266
commit
7a2fa7fbce
|
|
@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.2.4
|
controller-gen.kubebuilder.io/version: v0.3.0
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
name: horizontalrunnerautoscalers.actions.summerwind.dev
|
name: horizontalrunnerautoscalers.actions.summerwind.dev
|
||||||
spec:
|
spec:
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.2.4
|
controller-gen.kubebuilder.io/version: v0.3.0
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
name: runnerdeployments.actions.summerwind.dev
|
name: runnerdeployments.actions.summerwind.dev
|
||||||
spec:
|
spec:
|
||||||
|
|
@ -788,10 +788,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -1256,6 +1260,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness.
|
description: 'Periodic probe of container service readiness.
|
||||||
Container will be removed from service endpoints if
|
Container will be removed from service endpoints if
|
||||||
|
|
@ -1381,13 +1389,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -1847,9 +1863,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -2033,10 +2053,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -2611,13 +2635,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -3127,10 +3159,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -3595,6 +3631,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness.
|
description: 'Periodic probe of container service readiness.
|
||||||
Container will be removed from service endpoints if
|
Container will be removed from service endpoints if
|
||||||
|
|
@ -3720,13 +3760,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -4135,13 +4183,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute
|
description: 'Limits describes the maximum amount of compute
|
||||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute
|
description: 'Requests describes the minimum amount of compute
|
||||||
resources required. If Requests is omitted for a container,
|
resources required. If Requests is omitted for a container,
|
||||||
it defaults to Limits if that is explicitly specified,
|
it defaults to Limits if that is explicitly specified,
|
||||||
|
|
@ -4385,10 +4441,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -4853,6 +4913,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness.
|
description: 'Periodic probe of container service readiness.
|
||||||
Container will be removed from service endpoints if
|
Container will be removed from service endpoints if
|
||||||
|
|
@ -4978,13 +5042,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -5800,10 +5872,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -5826,6 +5902,9 @@ spec:
|
||||||
string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir'
|
string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir'
|
||||||
type: string
|
type: string
|
||||||
sizeLimit:
|
sizeLimit:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: 'Total amount of local storage required
|
description: 'Total amount of local storage required
|
||||||
for this EmptyDir volume. The size limit is also
|
for this EmptyDir volume. The size limit is also
|
||||||
applicable for memory medium. The maximum usage
|
applicable for memory medium. The maximum usage
|
||||||
|
|
@ -5834,7 +5913,8 @@ spec:
|
||||||
of memory limits of all containers in a pod. The
|
of memory limits of all containers in a pod. The
|
||||||
default is nil which means that the limit is undefined.
|
default is nil which means that the limit is undefined.
|
||||||
More info: http://kubernetes.io/docs/user-guide/volumes#emptydir'
|
More info: http://kubernetes.io/docs/user-guide/volumes#emptydir'
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
fc:
|
fc:
|
||||||
description: FC represents a Fibre Channel resource that
|
description: FC represents a Fibre Channel resource that
|
||||||
|
|
@ -6321,10 +6401,14 @@ spec:
|
||||||
for env vars'
|
for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output
|
description: Specifies the output
|
||||||
format of the exposed resources,
|
format of the exposed resources,
|
||||||
defaults to "1"
|
defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource
|
description: 'Required: resource
|
||||||
to select'
|
to select'
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.2.4
|
controller-gen.kubebuilder.io/version: v0.3.0
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
name: runnerreplicasets.actions.summerwind.dev
|
name: runnerreplicasets.actions.summerwind.dev
|
||||||
spec:
|
spec:
|
||||||
|
|
@ -788,10 +788,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -1256,6 +1260,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness.
|
description: 'Periodic probe of container service readiness.
|
||||||
Container will be removed from service endpoints if
|
Container will be removed from service endpoints if
|
||||||
|
|
@ -1381,13 +1389,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -1847,9 +1863,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -2033,10 +2053,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -2611,13 +2635,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -3127,10 +3159,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -3595,6 +3631,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness.
|
description: 'Periodic probe of container service readiness.
|
||||||
Container will be removed from service endpoints if
|
Container will be removed from service endpoints if
|
||||||
|
|
@ -3720,13 +3760,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -4135,13 +4183,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute
|
description: 'Limits describes the maximum amount of compute
|
||||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute
|
description: 'Requests describes the minimum amount of compute
|
||||||
resources required. If Requests is omitted for a container,
|
resources required. If Requests is omitted for a container,
|
||||||
it defaults to Limits if that is explicitly specified,
|
it defaults to Limits if that is explicitly specified,
|
||||||
|
|
@ -4385,10 +4441,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -4853,6 +4913,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness.
|
description: 'Periodic probe of container service readiness.
|
||||||
Container will be removed from service endpoints if
|
Container will be removed from service endpoints if
|
||||||
|
|
@ -4978,13 +5042,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount
|
description: 'Limits describes the maximum amount
|
||||||
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount
|
description: 'Requests describes the minimum amount
|
||||||
of compute resources required. If Requests is omitted
|
of compute resources required. If Requests is omitted
|
||||||
for a container, it defaults to Limits if that is
|
for a container, it defaults to Limits if that is
|
||||||
|
|
@ -5800,10 +5872,14 @@ spec:
|
||||||
volumes, optional for env vars'
|
volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -5826,6 +5902,9 @@ spec:
|
||||||
string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir'
|
string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir'
|
||||||
type: string
|
type: string
|
||||||
sizeLimit:
|
sizeLimit:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: 'Total amount of local storage required
|
description: 'Total amount of local storage required
|
||||||
for this EmptyDir volume. The size limit is also
|
for this EmptyDir volume. The size limit is also
|
||||||
applicable for memory medium. The maximum usage
|
applicable for memory medium. The maximum usage
|
||||||
|
|
@ -5834,7 +5913,8 @@ spec:
|
||||||
of memory limits of all containers in a pod. The
|
of memory limits of all containers in a pod. The
|
||||||
default is nil which means that the limit is undefined.
|
default is nil which means that the limit is undefined.
|
||||||
More info: http://kubernetes.io/docs/user-guide/volumes#emptydir'
|
More info: http://kubernetes.io/docs/user-guide/volumes#emptydir'
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
fc:
|
fc:
|
||||||
description: FC represents a Fibre Channel resource that
|
description: FC represents a Fibre Channel resource that
|
||||||
|
|
@ -6321,10 +6401,14 @@ spec:
|
||||||
for env vars'
|
for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output
|
description: Specifies the output
|
||||||
format of the exposed resources,
|
format of the exposed resources,
|
||||||
defaults to "1"
|
defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource
|
description: 'Required: resource
|
||||||
to select'
|
to select'
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.2.4
|
controller-gen.kubebuilder.io/version: v0.3.0
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
name: runners.actions.summerwind.dev
|
name: runners.actions.summerwind.dev
|
||||||
spec:
|
spec:
|
||||||
|
|
@ -723,9 +723,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -1160,6 +1164,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness. Container
|
description: 'Periodic probe of container service readiness. Container
|
||||||
will be removed from service endpoints if the probe fails. Cannot
|
will be removed from service endpoints if the probe fails. Cannot
|
||||||
|
|
@ -1282,13 +1290,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute
|
description: 'Limits describes the maximum amount of compute
|
||||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute
|
description: 'Requests describes the minimum amount of compute
|
||||||
resources required. If Requests is omitted for a container,
|
resources required. If Requests is omitted for a container,
|
||||||
it defaults to Limits if that is explicitly specified, otherwise
|
it defaults to Limits if that is explicitly specified, otherwise
|
||||||
|
|
@ -1722,9 +1738,13 @@ spec:
|
||||||
for env vars'
|
for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the exposed
|
description: Specifies the output format of the exposed
|
||||||
resources, defaults to "1"
|
resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -1894,9 +1914,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -2440,13 +2464,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute
|
description: 'Limits describes the maximum amount of compute
|
||||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute
|
description: 'Requests describes the minimum amount of compute
|
||||||
resources required. If Requests is omitted for a container,
|
resources required. If Requests is omitted for a container,
|
||||||
it defaults to Limits if that is explicitly specified, otherwise
|
it defaults to Limits if that is explicitly specified, otherwise
|
||||||
|
|
@ -2930,9 +2962,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -3367,6 +3403,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness. Container
|
description: 'Periodic probe of container service readiness. Container
|
||||||
will be removed from service endpoints if the probe fails. Cannot
|
will be removed from service endpoints if the probe fails. Cannot
|
||||||
|
|
@ -3489,13 +3529,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute
|
description: 'Limits describes the maximum amount of compute
|
||||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute
|
description: 'Requests describes the minimum amount of compute
|
||||||
resources required. If Requests is omitted for a container,
|
resources required. If Requests is omitted for a container,
|
||||||
it defaults to Limits if that is explicitly specified, otherwise
|
it defaults to Limits if that is explicitly specified, otherwise
|
||||||
|
|
@ -3883,13 +3931,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute resources
|
description: 'Limits describes the maximum amount of compute resources
|
||||||
allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute resources
|
description: 'Requests describes the minimum amount of compute resources
|
||||||
required. If Requests is omitted for a container, it defaults
|
required. If Requests is omitted for a container, it defaults
|
||||||
to Limits if that is explicitly specified, otherwise to an implementation-defined
|
to Limits if that is explicitly specified, otherwise to an implementation-defined
|
||||||
|
|
@ -4118,9 +4174,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -4555,6 +4615,10 @@ spec:
|
||||||
- containerPort
|
- containerPort
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- containerPort
|
||||||
|
- protocol
|
||||||
|
x-kubernetes-list-type: map
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
description: 'Periodic probe of container service readiness. Container
|
description: 'Periodic probe of container service readiness. Container
|
||||||
will be removed from service endpoints if the probe fails. Cannot
|
will be removed from service endpoints if the probe fails. Cannot
|
||||||
|
|
@ -4677,13 +4741,21 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
limits:
|
limits:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Limits describes the maximum amount of compute
|
description: 'Limits describes the maximum amount of compute
|
||||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
|
||||||
type: object
|
type: object
|
||||||
requests:
|
requests:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
description: 'Requests describes the minimum amount of compute
|
description: 'Requests describes the minimum amount of compute
|
||||||
resources required. If Requests is omitted for a container,
|
resources required. If Requests is omitted for a container,
|
||||||
it defaults to Limits if that is explicitly specified, otherwise
|
it defaults to Limits if that is explicitly specified, otherwise
|
||||||
|
|
@ -5451,9 +5523,13 @@ spec:
|
||||||
optional for env vars'
|
optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format of the
|
description: Specifies the output format of the
|
||||||
exposed resources, defaults to "1"
|
exposed resources, defaults to "1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -5476,6 +5552,9 @@ spec:
|
||||||
More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir'
|
More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir'
|
||||||
type: string
|
type: string
|
||||||
sizeLimit:
|
sizeLimit:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: 'Total amount of local storage required for this
|
description: 'Total amount of local storage required for this
|
||||||
EmptyDir volume. The size limit is also applicable for memory
|
EmptyDir volume. The size limit is also applicable for memory
|
||||||
medium. The maximum usage on memory medium EmptyDir would
|
medium. The maximum usage on memory medium EmptyDir would
|
||||||
|
|
@ -5483,7 +5562,8 @@ spec:
|
||||||
and the sum of memory limits of all containers in a pod.
|
and the sum of memory limits of all containers in a pod.
|
||||||
The default is nil which means that the limit is undefined.
|
The default is nil which means that the limit is undefined.
|
||||||
More info: http://kubernetes.io/docs/user-guide/volumes#emptydir'
|
More info: http://kubernetes.io/docs/user-guide/volumes#emptydir'
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
fc:
|
fc:
|
||||||
description: FC represents a Fibre Channel resource that is attached
|
description: FC represents a Fibre Channel resource that is attached
|
||||||
|
|
@ -5940,10 +6020,14 @@ spec:
|
||||||
for volumes, optional for env vars'
|
for volumes, optional for env vars'
|
||||||
type: string
|
type: string
|
||||||
divisor:
|
divisor:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
description: Specifies the output format
|
description: Specifies the output format
|
||||||
of the exposed resources, defaults to
|
of the exposed resources, defaults to
|
||||||
"1"
|
"1"
|
||||||
type: string
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
resource:
|
resource:
|
||||||
description: 'Required: resource to select'
|
description: 'Required: resource to select'
|
||||||
type: string
|
type: string
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,10 @@ package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/summerwind/actions-runner-controller/github/fake"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/summerwind/actions-runner-controller/github/fake"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
|
|
@ -44,7 +45,7 @@ func SetupIntegrationTest(ctx context.Context) *testEnvironment {
|
||||||
Status: 200,
|
Status: 200,
|
||||||
Body: workflowRunsFor3Replicas,
|
Body: workflowRunsFor3Replicas,
|
||||||
}
|
}
|
||||||
server := fake.NewServer(fake.WithFixedResponses(responses))
|
fakeGithubServer := fake.NewServer(fake.WithFixedResponses(responses))
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
stopCh = make(chan struct{})
|
stopCh = make(chan struct{})
|
||||||
|
|
@ -58,11 +59,16 @@ func SetupIntegrationTest(ctx context.Context) *testEnvironment {
|
||||||
mgr, err := ctrl.NewManager(cfg, ctrl.Options{})
|
mgr, err := ctrl.NewManager(cfg, ctrl.Options{})
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to create manager")
|
Expect(err).NotTo(HaveOccurred(), "failed to create manager")
|
||||||
|
|
||||||
|
runnersList = fake.NewRunnersList()
|
||||||
|
server = runnersList.GetServer()
|
||||||
|
ghClient := newGithubClient(server)
|
||||||
|
|
||||||
replicasetController := &RunnerReplicaSetReconciler{
|
replicasetController := &RunnerReplicaSetReconciler{
|
||||||
Client: mgr.GetClient(),
|
Client: mgr.GetClient(),
|
||||||
Scheme: scheme.Scheme,
|
Scheme: scheme.Scheme,
|
||||||
Log: logf.Log,
|
Log: logf.Log,
|
||||||
Recorder: mgr.GetEventRecorderFor("runnerreplicaset-controller"),
|
Recorder: mgr.GetEventRecorderFor("runnerreplicaset-controller"),
|
||||||
|
GitHubClient: ghClient,
|
||||||
}
|
}
|
||||||
err = replicasetController.SetupWithManager(mgr)
|
err = replicasetController.SetupWithManager(mgr)
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to setup controller")
|
Expect(err).NotTo(HaveOccurred(), "failed to setup controller")
|
||||||
|
|
@ -76,7 +82,7 @@ func SetupIntegrationTest(ctx context.Context) *testEnvironment {
|
||||||
err = deploymentsController.SetupWithManager(mgr)
|
err = deploymentsController.SetupWithManager(mgr)
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to setup controller")
|
Expect(err).NotTo(HaveOccurred(), "failed to setup controller")
|
||||||
|
|
||||||
client := newGithubClient(server)
|
client := newGithubClient(fakeGithubServer)
|
||||||
|
|
||||||
autoscalerController := &HorizontalRunnerAutoscalerReconciler{
|
autoscalerController := &HorizontalRunnerAutoscalerReconciler{
|
||||||
Client: mgr.GetClient(),
|
Client: mgr.GetClient(),
|
||||||
|
|
@ -99,7 +105,7 @@ func SetupIntegrationTest(ctx context.Context) *testEnvironment {
|
||||||
AfterEach(func() {
|
AfterEach(func() {
|
||||||
close(stopCh)
|
close(stopCh)
|
||||||
|
|
||||||
server.Close()
|
fakeGithubServer.Close()
|
||||||
|
|
||||||
err := k8sClient.Delete(ctx, ns)
|
err := k8sClient.Delete(ctx, ns)
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace")
|
Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace")
|
||||||
|
|
|
||||||
|
|
@ -203,12 +203,16 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if pod.Spec.Containers[0].Image != newPod.Spec.Containers[0].Image {
|
runnerBusy, err := r.isRunnerBusy(ctx, runner.Spec.Organization, runner.Spec.Repository, runner.Name)
|
||||||
restart = true
|
if err != nil {
|
||||||
}
|
log.Error(err, "Failed to check if runner is busy")
|
||||||
if !reflect.DeepEqual(pod.Spec.Containers[0].Env, newPod.Spec.Containers[0].Env) {
|
return ctrl.Result{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if !runnerBusy && (!reflect.DeepEqual(pod.Spec.Containers[0].Env, newPod.Spec.Containers[0].Env) || pod.Spec.Containers[0].Image != newPod.Spec.Containers[0].Image) {
|
||||||
restart = true
|
restart = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if !restart {
|
if !restart {
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|
@ -225,6 +229,21 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
|
||||||
return ctrl.Result{}, nil
|
return ctrl.Result{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *RunnerReconciler) isRunnerBusy(ctx context.Context, org, repo, name string) (bool, error) {
|
||||||
|
runners, err := r.GitHubClient.ListRunners(ctx, org, repo)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, runner := range runners {
|
||||||
|
if runner.GetName() == name {
|
||||||
|
return runner.GetBusy(), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, fmt.Errorf("runner not found")
|
||||||
|
}
|
||||||
|
|
||||||
func (r *RunnerReconciler) unregisterRunner(ctx context.Context, org, repo, name string) (bool, error) {
|
func (r *RunnerReconciler) unregisterRunner(ctx context.Context, org, repo, name string) (bool, error) {
|
||||||
runners, err := r.GitHubClient.ListRunners(ctx, org, repo)
|
runners, err := r.GitHubClient.ListRunners(ctx, org, repo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -234,6 +253,9 @@ func (r *RunnerReconciler) unregisterRunner(ctx context.Context, org, repo, name
|
||||||
id := int64(0)
|
id := int64(0)
|
||||||
for _, runner := range runners {
|
for _, runner := range runners {
|
||||||
if runner.GetName() == name {
|
if runner.GetName() == name {
|
||||||
|
if runner.GetBusy() {
|
||||||
|
return false, fmt.Errorf("runner is busy")
|
||||||
|
}
|
||||||
id = runner.GetID()
|
id = runner.GetID()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,14 +31,16 @@ import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
"github.com/summerwind/actions-runner-controller/api/v1alpha1"
|
"github.com/summerwind/actions-runner-controller/api/v1alpha1"
|
||||||
|
"github.com/summerwind/actions-runner-controller/github"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RunnerReplicaSetReconciler reconciles a Runner object
|
// RunnerReplicaSetReconciler reconciles a Runner object
|
||||||
type RunnerReplicaSetReconciler struct {
|
type RunnerReplicaSetReconciler struct {
|
||||||
client.Client
|
client.Client
|
||||||
Log logr.Logger
|
Log logr.Logger
|
||||||
Recorder record.EventRecorder
|
Recorder record.EventRecorder
|
||||||
Scheme *runtime.Scheme
|
Scheme *runtime.Scheme
|
||||||
|
GitHubClient *github.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
// +kubebuilder:rbac:groups=actions.summerwind.dev,resources=runnerreplicasets,verbs=get;list;watch;create;update;patch;delete
|
// +kubebuilder:rbac:groups=actions.summerwind.dev,resources=runnerreplicasets,verbs=get;list;watch;create;update;patch;delete
|
||||||
|
|
@ -96,8 +98,25 @@ func (r *RunnerReplicaSetReconciler) Reconcile(req ctrl.Request) (ctrl.Result, e
|
||||||
if available > desired {
|
if available > desired {
|
||||||
n := available - desired
|
n := available - desired
|
||||||
|
|
||||||
|
// get runners that are currently not busy
|
||||||
|
var notBusy []v1alpha1.Runner
|
||||||
|
for _, runner := range myRunners {
|
||||||
|
busy, err := r.isRunnerBusy(ctx, runner.Spec.Organization, runner.Spec.Repository, runner.Name)
|
||||||
|
if err != nil {
|
||||||
|
log.Error(err, "Failed to check if runner is busy")
|
||||||
|
return ctrl.Result{}, err
|
||||||
|
}
|
||||||
|
if !busy {
|
||||||
|
notBusy = append(notBusy, runner)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(notBusy) < n {
|
||||||
|
n = len(notBusy)
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
if err := r.Client.Delete(ctx, &myRunners[i]); err != nil {
|
if err := r.Client.Delete(ctx, ¬Busy[i]); err != nil {
|
||||||
log.Error(err, "Failed to delete runner resource")
|
log.Error(err, "Failed to delete runner resource")
|
||||||
|
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
|
|
@ -166,3 +185,19 @@ func (r *RunnerReplicaSetReconciler) SetupWithManager(mgr ctrl.Manager) error {
|
||||||
Owns(&v1alpha1.Runner{}).
|
Owns(&v1alpha1.Runner{}).
|
||||||
Complete(r)
|
Complete(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *RunnerReplicaSetReconciler) isRunnerBusy(ctx context.Context, org, repo, name string) (bool, error) {
|
||||||
|
runners, err := r.GitHubClient.ListRunners(ctx, org, repo)
|
||||||
|
r.Log.Info("runners", "github", runners)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, runner := range runners {
|
||||||
|
if runner.GetName() == name {
|
||||||
|
return runner.GetBusy(), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, fmt.Errorf("runner not found")
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,14 @@ package controllers
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"net/http/httptest"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/go-github/v32/github"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
|
"k8s.io/utils/pointer"
|
||||||
ctrl "sigs.k8s.io/controller-runtime"
|
ctrl "sigs.k8s.io/controller-runtime"
|
||||||
logf "sigs.k8s.io/controller-runtime/pkg/log"
|
logf "sigs.k8s.io/controller-runtime/pkg/log"
|
||||||
|
|
||||||
|
|
@ -17,6 +20,12 @@ import (
|
||||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||||
|
|
||||||
actionsv1alpha1 "github.com/summerwind/actions-runner-controller/api/v1alpha1"
|
actionsv1alpha1 "github.com/summerwind/actions-runner-controller/api/v1alpha1"
|
||||||
|
"github.com/summerwind/actions-runner-controller/github/fake"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
runnersList *fake.RunnersList
|
||||||
|
server *httptest.Server
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetupTest will set up a testing environment.
|
// SetupTest will set up a testing environment.
|
||||||
|
|
@ -41,11 +50,16 @@ func SetupTest(ctx context.Context) *corev1.Namespace {
|
||||||
mgr, err := ctrl.NewManager(cfg, ctrl.Options{})
|
mgr, err := ctrl.NewManager(cfg, ctrl.Options{})
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to create manager")
|
Expect(err).NotTo(HaveOccurred(), "failed to create manager")
|
||||||
|
|
||||||
|
runnersList = fake.NewRunnersList()
|
||||||
|
server = runnersList.GetServer()
|
||||||
|
ghClient := newGithubClient(server)
|
||||||
|
|
||||||
controller := &RunnerReplicaSetReconciler{
|
controller := &RunnerReplicaSetReconciler{
|
||||||
Client: mgr.GetClient(),
|
Client: mgr.GetClient(),
|
||||||
Scheme: scheme.Scheme,
|
Scheme: scheme.Scheme,
|
||||||
Log: logf.Log,
|
Log: logf.Log,
|
||||||
Recorder: mgr.GetEventRecorderFor("runnerreplicaset-controller"),
|
Recorder: mgr.GetEventRecorderFor("runnerreplicaset-controller"),
|
||||||
|
GitHubClient: ghClient,
|
||||||
}
|
}
|
||||||
err = controller.SetupWithManager(mgr)
|
err = controller.SetupWithManager(mgr)
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to setup controller")
|
Expect(err).NotTo(HaveOccurred(), "failed to setup controller")
|
||||||
|
|
@ -61,6 +75,7 @@ func SetupTest(ctx context.Context) *corev1.Namespace {
|
||||||
AfterEach(func() {
|
AfterEach(func() {
|
||||||
close(stopCh)
|
close(stopCh)
|
||||||
|
|
||||||
|
server.Close()
|
||||||
err := k8sClient.Delete(ctx, ns)
|
err := k8sClient.Delete(ctx, ns)
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace")
|
Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace")
|
||||||
})
|
})
|
||||||
|
|
@ -124,6 +139,16 @@ var _ = Context("Inside of a new namespace", func() {
|
||||||
logf.Log.Error(err, "list runners")
|
logf.Log.Error(err, "list runners")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for i, runner := range runners.Items {
|
||||||
|
runnersList.Add(&github.Runner{
|
||||||
|
ID: pointer.Int64Ptr(int64(i) + 1),
|
||||||
|
Name: pointer.StringPtr(runner.Name),
|
||||||
|
OS: pointer.StringPtr("linux"),
|
||||||
|
Status: pointer.StringPtr("online"),
|
||||||
|
Busy: pointer.BoolPtr(false),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return len(runners.Items)
|
return len(runners.Items)
|
||||||
},
|
},
|
||||||
time.Second*5, time.Millisecond*500).Should(BeEquivalentTo(1))
|
time.Second*5, time.Millisecond*500).Should(BeEquivalentTo(1))
|
||||||
|
|
@ -155,6 +180,16 @@ var _ = Context("Inside of a new namespace", func() {
|
||||||
logf.Log.Error(err, "list runners")
|
logf.Log.Error(err, "list runners")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for i, runner := range runners.Items {
|
||||||
|
runnersList.Add(&github.Runner{
|
||||||
|
ID: pointer.Int64Ptr(int64(i) + 1),
|
||||||
|
Name: pointer.StringPtr(runner.Name),
|
||||||
|
OS: pointer.StringPtr("linux"),
|
||||||
|
Status: pointer.StringPtr("online"),
|
||||||
|
Busy: pointer.BoolPtr(false),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return len(runners.Items)
|
return len(runners.Items)
|
||||||
},
|
},
|
||||||
time.Second*5, time.Millisecond*500).Should(BeEquivalentTo(2))
|
time.Second*5, time.Millisecond*500).Should(BeEquivalentTo(2))
|
||||||
|
|
@ -186,6 +221,16 @@ var _ = Context("Inside of a new namespace", func() {
|
||||||
logf.Log.Error(err, "list runners")
|
logf.Log.Error(err, "list runners")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for i, runner := range runners.Items {
|
||||||
|
runnersList.Add(&github.Runner{
|
||||||
|
ID: pointer.Int64Ptr(int64(i) + 1),
|
||||||
|
Name: pointer.StringPtr(runner.Name),
|
||||||
|
OS: pointer.StringPtr("linux"),
|
||||||
|
Status: pointer.StringPtr("online"),
|
||||||
|
Busy: pointer.BoolPtr(false),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return len(runners.Items)
|
return len(runners.Items)
|
||||||
},
|
},
|
||||||
time.Second*5, time.Millisecond*500).Should(BeEquivalentTo(0))
|
time.Second*5, time.Millisecond*500).Should(BeEquivalentTo(0))
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ const (
|
||||||
{
|
{
|
||||||
"total_count": 2,
|
"total_count": 2,
|
||||||
"runners": [
|
"runners": [
|
||||||
{"id": 1, "name": "test1", "os": "linux", "status": "online"},
|
{"id": 1, "name": "test1", "os": "linux", "status": "online", "busy": false},
|
||||||
{"id": 2, "name": "test2", "os": "linux", "status": "offline"}
|
{"id": 2, "name": "test2", "os": "linux", "status": "offline", "busy": false}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
package fake
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/google/go-github/v32/github"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RunnersList struct {
|
||||||
|
runners []*github.Runner
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRunnersList() *RunnersList {
|
||||||
|
return &RunnersList{
|
||||||
|
runners: make([]*github.Runner, 0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RunnersList) Add(runner *github.Runner) {
|
||||||
|
if !exists(r.runners, runner) {
|
||||||
|
r.runners = append(r.runners, runner)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RunnersList) GetServer() *httptest.Server {
|
||||||
|
router := mux.NewRouter()
|
||||||
|
|
||||||
|
router.Handle("/repos/{owner}/{repo}/actions/runners", r.handleList())
|
||||||
|
router.Handle("/repos/{owner}/{repo}/actions/runners/{id}", r.handleRemove())
|
||||||
|
router.Handle("/orgs/{org}/actions/runners", r.handleList())
|
||||||
|
router.Handle("/orgs/{org}/actions/runners/{id}", r.handleRemove())
|
||||||
|
|
||||||
|
return httptest.NewServer(router)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RunnersList) handleList() http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, res *http.Request) {
|
||||||
|
j, err := json.Marshal(github.Runners{
|
||||||
|
TotalCount: len(r.runners),
|
||||||
|
Runners: r.runners,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
w.Write(j)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RunnersList) handleRemove() http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, res *http.Request) {
|
||||||
|
vars := mux.Vars(res)
|
||||||
|
for i, runner := range r.runners {
|
||||||
|
if runner.ID != nil && vars["id"] == strconv.FormatInt(*runner.ID, 10) {
|
||||||
|
r.runners = append(r.runners[:i], r.runners[i+1:]...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func exists(runners []*github.Runner, runner *github.Runner) bool {
|
||||||
|
for _, r := range runners {
|
||||||
|
if *r.Name == *runner.Name {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bradleyfalzon/ghinstallation"
|
"github.com/bradleyfalzon/ghinstallation"
|
||||||
"github.com/google/go-github/v31/github"
|
"github.com/google/go-github/v32/github"
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -85,7 +85,7 @@ func (c *Client) GetRegistrationToken(ctx context.Context, org, repo, name strin
|
||||||
return rt, nil
|
return rt, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveRunner removes a runner with specified runner ID from repocitory.
|
// RemoveRunner removes a runner with specified runner ID from repository.
|
||||||
func (c *Client) RemoveRunner(ctx context.Context, org, repo string, runnerID int64) error {
|
func (c *Client) RemoveRunner(ctx context.Context, org, repo string, runnerID int64) error {
|
||||||
owner, repo, err := getOwnerAndRepo(org, repo)
|
owner, repo, err := getOwnerAndRepo(org, repo)
|
||||||
|
|
||||||
|
|
@ -121,7 +121,7 @@ func (c *Client) ListRunners(ctx context.Context, org, repo string) ([]*github.R
|
||||||
list, res, err := c.listRunners(ctx, owner, repo, &opts)
|
list, res, err := c.listRunners(ctx, owner, repo, &opts)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return runners, fmt.Errorf("failed to remove runner: %v", err)
|
return runners, fmt.Errorf("failed to list runners: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
runners = append(runners, list.Runners...)
|
runners = append(runners, list.Runners...)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/google/go-github/v31/github"
|
"github.com/google/go-github/v32/github"
|
||||||
"github.com/google/go-querystring/query"
|
"github.com/google/go-querystring/query"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/go-github/v31/github"
|
"github.com/google/go-github/v32/github"
|
||||||
"github.com/summerwind/actions-runner-controller/github/fake"
|
"github.com/summerwind/actions-runner-controller/github/fake"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -41,9 +41,9 @@ func TestGetRegistrationToken(t *testing.T) {
|
||||||
token string
|
token string
|
||||||
err bool
|
err bool
|
||||||
}{
|
}{
|
||||||
{org: "test", repo: "valid", token: fake.RegistrationToken, err: false},
|
{org: "", repo: "test/valid", token: fake.RegistrationToken, err: false},
|
||||||
{org: "test", repo: "invalid", token: "", err: true},
|
{org: "", repo: "test/invalid", token: "", err: true},
|
||||||
{org: "test", repo: "error", token: "", err: true},
|
{org: "", repo: "test/error", token: "", err: true},
|
||||||
{org: "test", repo: "", token: fake.RegistrationToken, err: false},
|
{org: "test", repo: "", token: fake.RegistrationToken, err: false},
|
||||||
{org: "invalid", repo: "", token: "", err: true},
|
{org: "invalid", repo: "", token: "", err: true},
|
||||||
{org: "error", repo: "", token: "", err: true},
|
{org: "error", repo: "", token: "", err: true},
|
||||||
|
|
@ -68,9 +68,9 @@ func TestListRunners(t *testing.T) {
|
||||||
length int
|
length int
|
||||||
err bool
|
err bool
|
||||||
}{
|
}{
|
||||||
{org: "test", repo: "valid", length: 2, err: false},
|
{org: "", repo: "test/valid", length: 2, err: false},
|
||||||
{org: "test", repo: "invalid", length: 0, err: true},
|
{org: "", repo: "test/invalid", length: 0, err: true},
|
||||||
{org: "test", repo: "error", length: 0, err: true},
|
{org: "", repo: "test/error", length: 0, err: true},
|
||||||
{org: "test", repo: "", length: 2, err: false},
|
{org: "test", repo: "", length: 2, err: false},
|
||||||
{org: "invalid", repo: "", length: 0, err: true},
|
{org: "invalid", repo: "", length: 0, err: true},
|
||||||
{org: "error", repo: "", length: 0, err: true},
|
{org: "error", repo: "", length: 0, err: true},
|
||||||
|
|
@ -94,9 +94,9 @@ func TestRemoveRunner(t *testing.T) {
|
||||||
repo string
|
repo string
|
||||||
err bool
|
err bool
|
||||||
}{
|
}{
|
||||||
{org: "test", repo: "valid", err: false},
|
{org: "", repo: "test/valid", err: false},
|
||||||
{org: "test", repo: "invalid", err: true},
|
{org: "", repo: "test/invalid", err: true},
|
||||||
{org: "test", repo: "error", err: true},
|
{org: "", repo: "test/error", err: true},
|
||||||
{org: "test", repo: "", err: false},
|
{org: "test", repo: "", err: false},
|
||||||
{org: "invalid", repo: "", err: true},
|
{org: "invalid", repo: "", err: true},
|
||||||
{org: "error", repo: "", err: true},
|
{org: "error", repo: "", err: true},
|
||||||
|
|
|
||||||
5
go.mod
5
go.mod
|
|
@ -6,8 +6,9 @@ require (
|
||||||
github.com/bradleyfalzon/ghinstallation v1.1.1
|
github.com/bradleyfalzon/ghinstallation v1.1.1
|
||||||
github.com/davecgh/go-spew v1.1.1
|
github.com/davecgh/go-spew v1.1.1
|
||||||
github.com/go-logr/logr v0.1.0
|
github.com/go-logr/logr v0.1.0
|
||||||
github.com/google/go-github/v31 v31.0.0
|
github.com/google/go-github/v32 v32.1.1-0.20200822031813-d57a3a84ba04
|
||||||
github.com/google/go-querystring v1.0.0
|
github.com/google/go-querystring v1.0.0
|
||||||
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/onsi/ginkgo v1.8.0
|
github.com/onsi/ginkgo v1.8.0
|
||||||
github.com/onsi/gomega v1.5.0
|
github.com/onsi/gomega v1.5.0
|
||||||
github.com/stretchr/testify v1.4.0 // indirect
|
github.com/stretchr/testify v1.4.0 // indirect
|
||||||
|
|
@ -15,6 +16,6 @@ require (
|
||||||
k8s.io/api v0.0.0-20190918155943-95b840bb6a1f
|
k8s.io/api v0.0.0-20190918155943-95b840bb6a1f
|
||||||
k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655
|
k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655
|
||||||
k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90
|
k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90
|
||||||
k8s.io/klog v0.4.0
|
k8s.io/utils v0.0.0-20190801114015-581e00157fb1
|
||||||
sigs.k8s.io/controller-runtime v0.4.0
|
sigs.k8s.io/controller-runtime v0.4.0
|
||||||
)
|
)
|
||||||
|
|
|
||||||
7
go.sum
7
go.sum
|
|
@ -116,11 +116,10 @@ github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
|
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
|
|
||||||
github.com/google/go-github/v29 v29.0.2 h1:opYN6Wc7DOz7Ku3Oh4l7prmkOMwEcQxpFtxdU8N8Pts=
|
github.com/google/go-github/v29 v29.0.2 h1:opYN6Wc7DOz7Ku3Oh4l7prmkOMwEcQxpFtxdU8N8Pts=
|
||||||
github.com/google/go-github/v29 v29.0.2/go.mod h1:CHKiKKPHJ0REzfwc14QMklvtHwCveD0PxlMjLlzAM5E=
|
github.com/google/go-github/v29 v29.0.2/go.mod h1:CHKiKKPHJ0REzfwc14QMklvtHwCveD0PxlMjLlzAM5E=
|
||||||
github.com/google/go-github/v31 v31.0.0 h1:JJUxlP9lFK+ziXKimTCprajMApV1ecWD4NB6CCb0plo=
|
github.com/google/go-github/v32 v32.1.1-0.20200822031813-d57a3a84ba04 h1:wEYk2h/GwOhImcVjiTIceP88WxVbXw2F+ARYUQMEsfg=
|
||||||
github.com/google/go-github/v31 v31.0.0/go.mod h1:NQPZol8/1sMoWYGN2yaALIBytu17gAWfhbweiEed3pM=
|
github.com/google/go-github/v32 v32.1.1-0.20200822031813-d57a3a84ba04/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3qBsCizh3q2WCI=
|
||||||
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
||||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||||
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
||||||
|
|
@ -136,6 +135,8 @@ github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsC
|
||||||
github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk=
|
github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk=
|
||||||
github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||||
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
||||||
|
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||||
|
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
|
|
|
||||||
7
main.go
7
main.go
|
|
@ -158,9 +158,10 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
runnerSetReconciler := &controllers.RunnerReplicaSetReconciler{
|
runnerSetReconciler := &controllers.RunnerReplicaSetReconciler{
|
||||||
Client: mgr.GetClient(),
|
Client: mgr.GetClient(),
|
||||||
Log: ctrl.Log.WithName("controllers").WithName("RunnerReplicaSet"),
|
Log: ctrl.Log.WithName("controllers").WithName("RunnerReplicaSet"),
|
||||||
Scheme: mgr.GetScheme(),
|
Scheme: mgr.GetScheme(),
|
||||||
|
GitHubClient: ghClient,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = runnerSetReconciler.SetupWithManager(mgr); err != nil {
|
if err = runnerSetReconciler.SetupWithManager(mgr); err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue