switch toggles to be true by default and add them to validation
This commit is contained in:
		
						commit
						f9cc17f846
					
				|  | @ -86,6 +86,9 @@ coverage.xml | ||||||
| .hypothesis/ | .hypothesis/ | ||||||
| .pytest_cache/ | .pytest_cache/ | ||||||
| 
 | 
 | ||||||
|  | # e2e tests | ||||||
|  | e2e/manifests | ||||||
|  | 
 | ||||||
| # Translations | # Translations | ||||||
| *.mo | *.mo | ||||||
| *.pot | *.pot | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							|  | @ -88,7 +88,7 @@ vet: | ||||||
| 	@go vet $(PKG) | 	@go vet $(PKG) | ||||||
| 	@staticcheck $(PKG) | 	@staticcheck $(PKG) | ||||||
| 
 | 
 | ||||||
| deps: | deps: tools | ||||||
| 	GO111MODULE=on go mod vendor | 	GO111MODULE=on go mod vendor | ||||||
| 
 | 
 | ||||||
| test: | test: | ||||||
|  |  | ||||||
|  | @ -0,0 +1,304 @@ | ||||||
|  | apiVersion: apiextensions.k8s.io/v1beta1 | ||||||
|  | kind: CustomResourceDefinition | ||||||
|  | metadata: | ||||||
|  |   name: operatorconfigurations.acid.zalan.do | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: postgres-operator | ||||||
|  |   annotations: | ||||||
|  |     "helm.sh/hook": crd-install | ||||||
|  | spec: | ||||||
|  |   group: acid.zalan.do | ||||||
|  |   names: | ||||||
|  |     kind: OperatorConfiguration | ||||||
|  |     listKind: OperatorConfigurationList | ||||||
|  |     plural: operatorconfigurations | ||||||
|  |     singular: operatorconfiguration | ||||||
|  |     shortNames: | ||||||
|  |     - opconfig | ||||||
|  |   additionalPrinterColumns: | ||||||
|  |   - name: Image | ||||||
|  |     type: string | ||||||
|  |     description: Spilo image to be used for Pods | ||||||
|  |     JSONPath: .configuration.docker_image | ||||||
|  |   - name: Cluster-Label | ||||||
|  |     type: string | ||||||
|  |     description: Label for K8s resources created by operator | ||||||
|  |     JSONPath: .configuration.kubernetes.cluster_name_label | ||||||
|  |   - name: Service-Account | ||||||
|  |     type: string | ||||||
|  |     description: Name of service account to be used | ||||||
|  |     JSONPath: .configuration.kubernetes.pod_service_account_name | ||||||
|  |   - name: Min-Instances | ||||||
|  |     type: integer | ||||||
|  |     description: Minimum number of instances per Postgres cluster | ||||||
|  |     JSONPath: .configuration.min_instances | ||||||
|  |   - name: Age | ||||||
|  |     type: date | ||||||
|  |     JSONPath: .metadata.creationTimestamp | ||||||
|  |   scope: Namespaced | ||||||
|  |   subresources: | ||||||
|  |     status: {} | ||||||
|  |   version: v1 | ||||||
|  |   validation: | ||||||
|  |     openAPIV3Schema: | ||||||
|  |       type: object | ||||||
|  |       required: | ||||||
|  |         - kind | ||||||
|  |         - apiVersion | ||||||
|  |         - configuration | ||||||
|  |       properties: | ||||||
|  |         kind: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - OperatorConfiguration | ||||||
|  |         apiVersion: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - acid.zalan.do/v1 | ||||||
|  |         configuration: | ||||||
|  |           type: object | ||||||
|  |           properties: | ||||||
|  |             docker_image: | ||||||
|  |               type: string | ||||||
|  |             enable_crd_validation: | ||||||
|  |               type: boolean | ||||||
|  |             enable_shm_volume: | ||||||
|  |               type: boolean | ||||||
|  |             etcd_host: | ||||||
|  |               type: string | ||||||
|  |             max_instances: | ||||||
|  |               type: integer | ||||||
|  |               minimum: -1  # -1 = disabled | ||||||
|  |             min_instances: | ||||||
|  |               type: integer | ||||||
|  |               minimum: -1  # -1 = disabled | ||||||
|  |             resync_period: | ||||||
|  |               type: string | ||||||
|  |             repair_period: | ||||||
|  |               type: string | ||||||
|  |             set_memory_request_to_limit: | ||||||
|  |               type: boolean | ||||||
|  |             sidecar_docker_images: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: string | ||||||
|  |             workers: | ||||||
|  |               type: integer | ||||||
|  |               minimum: 1 | ||||||
|  |             users: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 replication_username: | ||||||
|  |                    type: string | ||||||
|  |                 super_username: | ||||||
|  |                    type: string | ||||||
|  |             kubernetes: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 cluster_domain: | ||||||
|  |                   type: string | ||||||
|  |                 cluster_labels: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 cluster_name_label: | ||||||
|  |                   type: string | ||||||
|  |                 custom_pod_annotations: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 enable_init_containers: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_pod_antiaffinity: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_pod_disruption_budget: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_sidecars: | ||||||
|  |                   type: boolean | ||||||
|  |                 infrastructure_roles_secret_name: | ||||||
|  |                   type: string | ||||||
|  |                 inherited_labels: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 node_readiness_label: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 oauth_token_secret_name: | ||||||
|  |                   type: string | ||||||
|  |                 pdb_name_format: | ||||||
|  |                   type: string | ||||||
|  |                 pod_antiaffinity_topology_key: | ||||||
|  |                   type: string | ||||||
|  |                 pod_environment_configmap: | ||||||
|  |                   type: string | ||||||
|  |                 pod_management_policy: | ||||||
|  |                   type: string | ||||||
|  |                   enum: | ||||||
|  |                     - "ordered_ready" | ||||||
|  |                     - "parallel" | ||||||
|  |                 pod_role_label: | ||||||
|  |                   type: string | ||||||
|  |                 pod_service_account_name: | ||||||
|  |                   type: string | ||||||
|  |                 pod_terminate_grace_period: | ||||||
|  |                   type: string | ||||||
|  |                 secret_name_template: | ||||||
|  |                   type: string | ||||||
|  |                 spilo_fsgroup: | ||||||
|  |                   type: integer | ||||||
|  |                 spilo_privileged: | ||||||
|  |                   type: boolean | ||||||
|  |                 toleration: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 watched_namespace: | ||||||
|  |                   type: string | ||||||
|  |             postgres_pod_resources: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 default_cpu_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 default_cpu_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 default_memory_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                 default_memory_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |             timeouts: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 pod_label_wait_timeout: | ||||||
|  |                   type: string | ||||||
|  |                 pod_deletion_wait_timeout: | ||||||
|  |                   type: string | ||||||
|  |                 ready_wait_interval: | ||||||
|  |                   type: string | ||||||
|  |                 ready_wait_timeout: | ||||||
|  |                   type: string | ||||||
|  |                 resource_check_interval: | ||||||
|  |                   type: string | ||||||
|  |                 resource_check_timeout: | ||||||
|  |                   type: string | ||||||
|  |             load_balancer: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 db_hosted_zone: | ||||||
|  |                   type: string | ||||||
|  |                 enable_master_load_balancer: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_replica_load_balancer: | ||||||
|  |                   type: boolean | ||||||
|  |                 custom_service_annotations: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 master_dns_name_format: | ||||||
|  |                   type: string | ||||||
|  |                 replica_dns_name_format: | ||||||
|  |                   type: string | ||||||
|  |             aws_or_gcp: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 additional_secret_mount: | ||||||
|  |                   type: string | ||||||
|  |                 additional_secret_mount_path: | ||||||
|  |                   type: string | ||||||
|  |                 aws_region: | ||||||
|  |                   type: string | ||||||
|  |                 kube_iam_role: | ||||||
|  |                   type: string | ||||||
|  |                 log_s3_bucket: | ||||||
|  |                   type: string | ||||||
|  |                 wal_s3_bucket: | ||||||
|  |                   type: string | ||||||
|  |             logical_backup: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 logical_backup_schedule: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' | ||||||
|  |                 logical_backup_docker_image: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_bucket: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_endpoint: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_sse: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_access_key_id: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_secret_access_key: | ||||||
|  |                   type: string | ||||||
|  |             debug: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 debug_logging: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_database_access: | ||||||
|  |                   type: boolean | ||||||
|  |             teams_api: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 enable_admin_role_for_users: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_team_superuser: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_teams_api: | ||||||
|  |                   type: boolean | ||||||
|  |                 pam_configuration: | ||||||
|  |                   type: string | ||||||
|  |                 pam_role_name: | ||||||
|  |                   type: string | ||||||
|  |                 postgres_superuser_teams: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 protected_role_names: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 team_admin_role: | ||||||
|  |                   type: string | ||||||
|  |                 team_api_role_configuration: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 teams_api_url: | ||||||
|  |                   type: string | ||||||
|  |             logging_rest_api: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 api_port: | ||||||
|  |                   type: integer | ||||||
|  |                 cluster_history_entries: | ||||||
|  |                   type: integer | ||||||
|  |                 ring_log_lines: | ||||||
|  |                   type: integer | ||||||
|  |             scalyr: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 scalyr_api_key: | ||||||
|  |                   type: string | ||||||
|  |                 scalyr_cpu_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 scalyr_cpu_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 scalyr_image: | ||||||
|  |                   type: string | ||||||
|  |                 scalyr_memory_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                 scalyr_memory_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                 scalyr_server_url: | ||||||
|  |                   type: string | ||||||
|  | @ -0,0 +1,363 @@ | ||||||
|  | apiVersion: apiextensions.k8s.io/v1beta1 | ||||||
|  | kind: CustomResourceDefinition | ||||||
|  | metadata: | ||||||
|  |   name: postgresqls.acid.zalan.do | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: postgres-operator | ||||||
|  |   annotations: | ||||||
|  |     "helm.sh/hook": crd-install | ||||||
|  | spec: | ||||||
|  |   group: acid.zalan.do | ||||||
|  |   names: | ||||||
|  |     kind: postgresql | ||||||
|  |     listKind: postgresqlList | ||||||
|  |     plural: postgresqls | ||||||
|  |     singular: postgresql | ||||||
|  |     shortNames: | ||||||
|  |     - pg | ||||||
|  |   additionalPrinterColumns: | ||||||
|  |   - name: Team | ||||||
|  |     type: string | ||||||
|  |     description: Team responsible for Postgres CLuster | ||||||
|  |     JSONPath: .spec.teamId | ||||||
|  |   - name: Version | ||||||
|  |     type: string | ||||||
|  |     description: PostgreSQL version | ||||||
|  |     JSONPath: .spec.postgresql.version | ||||||
|  |   - name: Pods | ||||||
|  |     type: integer | ||||||
|  |     description: Number of Pods per Postgres cluster | ||||||
|  |     JSONPath: .spec.numberOfInstances | ||||||
|  |   - name: Volume | ||||||
|  |     type: string | ||||||
|  |     description: Size of the bound volume | ||||||
|  |     JSONPath: .spec.volume.size | ||||||
|  |   - name: CPU-Request | ||||||
|  |     type: string | ||||||
|  |     description: Requested CPU for Postgres containers | ||||||
|  |     JSONPath: .spec.resources.requests.cpu | ||||||
|  |   - name: Memory-Request | ||||||
|  |     type: string | ||||||
|  |     description: Requested memory for Postgres containers | ||||||
|  |     JSONPath: .spec.resources.requests.memory | ||||||
|  |   - name: Age | ||||||
|  |     type: date | ||||||
|  |     JSONPath: .metadata.creationTimestamp | ||||||
|  |   - name: Status | ||||||
|  |     type: string | ||||||
|  |     description: Current sync status of postgresql resource | ||||||
|  |     JSONPath: .status.PostgresClusterStatus | ||||||
|  |   scope: Namespaced | ||||||
|  |   subresources: | ||||||
|  |     status: {} | ||||||
|  |   version: v1 | ||||||
|  |   validation: | ||||||
|  |     openAPIV3Schema: | ||||||
|  |       type: object | ||||||
|  |       required: | ||||||
|  |         - kind | ||||||
|  |         - apiVersion | ||||||
|  |         - spec | ||||||
|  |       properties: | ||||||
|  |         kind: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - postgresql | ||||||
|  |         apiVersion: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - acid.zalan.do/v1 | ||||||
|  |         spec: | ||||||
|  |           type: object | ||||||
|  |           required: | ||||||
|  |             - numberOfInstances | ||||||
|  |             - teamId | ||||||
|  |             - postgresql | ||||||
|  |           properties: | ||||||
|  |             allowedSourceRanges: | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: string | ||||||
|  |                 pattern: '^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\/(\d|[1-2]\d|3[0-2])$' | ||||||
|  |             clone: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - cluster | ||||||
|  |               properties: | ||||||
|  |                 cluster: | ||||||
|  |                   type: string | ||||||
|  |                 s3_endpoint: | ||||||
|  |                   type: string | ||||||
|  |                 s3_access_key_id: | ||||||
|  |                   type: string | ||||||
|  |                 s3_secret_access_key: | ||||||
|  |                   type: string | ||||||
|  |                 s3_force_path_style: | ||||||
|  |                   type: string | ||||||
|  |                 s3_wal_path: | ||||||
|  |                   type: string | ||||||
|  |                 timestamp: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|([+-]([01][0-9]|2[0-3]):[0-5][0-9]))$' | ||||||
|  |                   # The regexp matches the date-time format (RFC 3339 Section 5.6) that specifies a timezone as an offset relative to UTC | ||||||
|  |                   # Example: 1996-12-19T16:39:57-08:00 | ||||||
|  |                   # Note: this field requires a timezone | ||||||
|  |                 uid: | ||||||
|  |                   format: uuid | ||||||
|  |                   type: string | ||||||
|  |             databases: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: string | ||||||
|  |               # Note: usernames specified here as database owners must be declared in the users key of the spec key. | ||||||
|  |             dockerImage: | ||||||
|  |               type: string | ||||||
|  |             enableLogicalBackup: | ||||||
|  |               type: boolean | ||||||
|  |             enableMasterLoadBalancer: | ||||||
|  |               type: boolean | ||||||
|  |             enableReplicaLoadBalancer: | ||||||
|  |               type: boolean | ||||||
|  |             enableShmVolume: | ||||||
|  |               type: boolean | ||||||
|  |             init_containers:  # deprecated | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 additionalProperties: true | ||||||
|  |             initContainers: | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 additionalProperties: true | ||||||
|  |             logicalBackupSchedule: | ||||||
|  |               type: string | ||||||
|  |               pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' | ||||||
|  |             maintenanceWindows: | ||||||
|  |               type: array | ||||||
|  |               items: | ||||||
|  |                 type: string | ||||||
|  |                 pattern: '^\ *((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))-((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))\ *$' | ||||||
|  |             numberOfInstances: | ||||||
|  |               type: integer | ||||||
|  |               minimum: 0 | ||||||
|  |             patroni: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 initdb: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 pg_hba: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 slots: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: object | ||||||
|  |                     additionalProperties: | ||||||
|  |                       type: string | ||||||
|  |                 ttl: | ||||||
|  |                   type: integer | ||||||
|  |                 loop_wait: | ||||||
|  |                   type: integer | ||||||
|  |                 retry_timeout: | ||||||
|  |                   type: integer | ||||||
|  |                 maximum_lag_on_failover: | ||||||
|  |                   type: integer | ||||||
|  |             podAnnotations: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: string | ||||||
|  |             pod_priority_class_name:  # deprecated | ||||||
|  |               type: string | ||||||
|  |             podPriorityClassName: | ||||||
|  |               type: string | ||||||
|  |             postgresql: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - version | ||||||
|  |               properties: | ||||||
|  |                 version: | ||||||
|  |                   type: string | ||||||
|  |                   enum: | ||||||
|  |                     - "9.3" | ||||||
|  |                     - "9.4" | ||||||
|  |                     - "9.5" | ||||||
|  |                     - "9.6" | ||||||
|  |                     - "10" | ||||||
|  |                     - "11" | ||||||
|  |                     - "12" | ||||||
|  |                 parameters: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |             replicaLoadBalancer:  # deprecated | ||||||
|  |               type: boolean | ||||||
|  |             resources: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - requests | ||||||
|  |                 - limits | ||||||
|  |               properties: | ||||||
|  |                 limits: | ||||||
|  |                   type: object | ||||||
|  |                   required: | ||||||
|  |                     - cpu | ||||||
|  |                     - memory | ||||||
|  |                   properties: | ||||||
|  |                     cpu: | ||||||
|  |                       type: string | ||||||
|  |                       # Decimal natural followed by m, or decimal natural followed by | ||||||
|  |                       # dot followed by up to three decimal digits. | ||||||
|  |                       # | ||||||
|  |                       # This is because the Kubernetes CPU resource has millis as the | ||||||
|  |                       # maximum precision.  The actual values are checked in code | ||||||
|  |                       # because the regular expression would be huge and horrible and | ||||||
|  |                       # not very helpful in validation error messages; this one checks | ||||||
|  |                       # only the format of the given number. | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu | ||||||
|  |                       pattern: '^(\d+m|\d+\.\d{1,3})$' | ||||||
|  |                       # Note: the value specified here must not be zero or be lower | ||||||
|  |                       # than the corresponding request. | ||||||
|  |                     memory: | ||||||
|  |                       type: string | ||||||
|  |                       # You can express memory as a plain integer or as a fixed-point | ||||||
|  |                       # integer using one of these suffixes: E, P, T, G, M, k. You can | ||||||
|  |                       # also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory | ||||||
|  |                       pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                       # Note: the value specified here must not be zero or be lower | ||||||
|  |                       # than the corresponding request. | ||||||
|  |                 requests: | ||||||
|  |                   type: object | ||||||
|  |                   required: | ||||||
|  |                     - cpu | ||||||
|  |                     - memory | ||||||
|  |                   properties: | ||||||
|  |                     cpu: | ||||||
|  |                       type: string | ||||||
|  |                       # Decimal natural followed by m, or decimal natural followed by | ||||||
|  |                       # dot followed by up to three decimal digits. | ||||||
|  |                       # | ||||||
|  |                       # This is because the Kubernetes CPU resource has millis as the | ||||||
|  |                       # maximum precision.  The actual values are checked in code | ||||||
|  |                       # because the regular expression would be huge and horrible and | ||||||
|  |                       # not very helpful in validation error messages; this one checks | ||||||
|  |                       # only the format of the given number. | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu | ||||||
|  |                       pattern: '^(\d+m|\d+\.\d{1,3})$' | ||||||
|  |                       # Note: the value specified here must not be zero or be higher | ||||||
|  |                       # than the corresponding limit. | ||||||
|  |                     memory: | ||||||
|  |                       type: string | ||||||
|  |                       # You can express memory as a plain integer or as a fixed-point | ||||||
|  |                       # integer using one of these suffixes: E, P, T, G, M, k. You can | ||||||
|  |                       # also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory | ||||||
|  |                       pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                       # Note: the value specified here must not be zero or be higher | ||||||
|  |                       # than the corresponding limit. | ||||||
|  |             sidecars: | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 additionalProperties: true | ||||||
|  |             spiloFSGroup: | ||||||
|  |               type: integer | ||||||
|  |             standby: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - s3_wal_path | ||||||
|  |               properties: | ||||||
|  |                 s3_wal_path: | ||||||
|  |                   type: string | ||||||
|  |             teamId: | ||||||
|  |               type: string | ||||||
|  |             tolerations: | ||||||
|  |               type: array | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 required: | ||||||
|  |                   - key | ||||||
|  |                   - operator | ||||||
|  |                   - effect | ||||||
|  |                 properties: | ||||||
|  |                   key: | ||||||
|  |                     type: string | ||||||
|  |                   operator: | ||||||
|  |                     type: string | ||||||
|  |                     enum: | ||||||
|  |                       - Equal | ||||||
|  |                       - Exists | ||||||
|  |                   value: | ||||||
|  |                     type: string | ||||||
|  |                   effect: | ||||||
|  |                     type: string | ||||||
|  |                     enum: | ||||||
|  |                       - NoExecute | ||||||
|  |                       - NoSchedule | ||||||
|  |                       - PreferNoSchedule | ||||||
|  |                   tolerationSeconds: | ||||||
|  |                     type: integer | ||||||
|  |             useLoadBalancer:  # deprecated | ||||||
|  |               type: boolean | ||||||
|  |             users: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: array | ||||||
|  |                 nullable: true | ||||||
|  |                 description: "Role flags specified here must not contradict each other" | ||||||
|  |                 items: | ||||||
|  |                   type: string | ||||||
|  |                   enum: | ||||||
|  |                   - bypassrls | ||||||
|  |                   - BYPASSRLS | ||||||
|  |                   - nobypassrls | ||||||
|  |                   - NOBYPASSRLS | ||||||
|  |                   - createdb | ||||||
|  |                   - CREATEDB | ||||||
|  |                   - nocreatedb | ||||||
|  |                   - NOCREATEDB | ||||||
|  |                   - createrole | ||||||
|  |                   - CREATEROLE | ||||||
|  |                   - nocreaterole | ||||||
|  |                   - NOCREATEROLE | ||||||
|  |                   - inherit | ||||||
|  |                   - INHERIT | ||||||
|  |                   - noinherit | ||||||
|  |                   - NOINHERIT | ||||||
|  |                   - login | ||||||
|  |                   - LOGIN | ||||||
|  |                   - nologin | ||||||
|  |                   - NOLOGIN | ||||||
|  |                   - replication | ||||||
|  |                   - REPLICATION | ||||||
|  |                   - noreplication | ||||||
|  |                   - NOREPLICATION | ||||||
|  |                   - superuser | ||||||
|  |                   - SUPERUSER | ||||||
|  |                   - nosuperuser | ||||||
|  |                   - NOSUPERUSER | ||||||
|  |             volume: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - size | ||||||
|  |               properties: | ||||||
|  |                 size: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                   # Note: the value specified here must not be zero. | ||||||
|  |                 storageClass: | ||||||
|  |                   type: string | ||||||
|  |                 subPath: | ||||||
|  |                   type: string | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | {{ if .Values.crd.create }} | ||||||
|  | {{- range $path, $bytes := .Files.Glob "crds/*.yaml" }} | ||||||
|  | {{ $.Files.Get $path }} | ||||||
|  | --- | ||||||
|  | {{- end }} | ||||||
|  | {{- end }} | ||||||
|  | @ -1,103 +0,0 @@ | ||||||
| {{ if .Values.crd.create }} |  | ||||||
| apiVersion: apiextensions.k8s.io/v1beta1 |  | ||||||
| kind: CustomResourceDefinition |  | ||||||
| metadata: |  | ||||||
|   name: postgresqls.acid.zalan.do |  | ||||||
|   labels: |  | ||||||
|     app.kubernetes.io/name: {{ template "postgres-operator.name" . }} |  | ||||||
|     helm.sh/chart: {{ template "postgres-operator.chart" . }} |  | ||||||
|     app.kubernetes.io/managed-by: {{ .Release.Service }} |  | ||||||
|     app.kubernetes.io/instance: {{ .Release.Name }} |  | ||||||
|   annotations: |  | ||||||
|     "helm.sh/hook": crd-install |  | ||||||
| spec: |  | ||||||
|   group: acid.zalan.do |  | ||||||
|   names: |  | ||||||
|     kind: postgresql |  | ||||||
|     listKind: postgresqlList |  | ||||||
|     plural: postgresqls |  | ||||||
|     singular: postgresql |  | ||||||
|     shortNames: |  | ||||||
|     - pg |  | ||||||
|   additionalPrinterColumns: |  | ||||||
|   - name: Team |  | ||||||
|     type: string |  | ||||||
|     description: Team responsible for Postgres CLuster |  | ||||||
|     JSONPath: .spec.teamId |  | ||||||
|   - name: Version |  | ||||||
|     type: string |  | ||||||
|     description: PostgreSQL version |  | ||||||
|     JSONPath: .spec.postgresql.version |  | ||||||
|   - name: Pods |  | ||||||
|     type: integer |  | ||||||
|     description: Number of Pods per Postgres cluster |  | ||||||
|     JSONPath: .spec.numberOfInstances |  | ||||||
|   - name: Volume |  | ||||||
|     type: string |  | ||||||
|     description: Size of the bound volume |  | ||||||
|     JSONPath: .spec.volume.size |  | ||||||
|   - name: CPU-Request |  | ||||||
|     type: string |  | ||||||
|     description: Requested CPU for Postgres containers |  | ||||||
|     JSONPath: .spec.resources.requests.cpu |  | ||||||
|   - name: Memory-Request |  | ||||||
|     type: string |  | ||||||
|     description: Requested memory for Postgres containers |  | ||||||
|     JSONPath: .spec.resources.requests.memory |  | ||||||
|   - name: Age |  | ||||||
|     type: date |  | ||||||
|     JSONPath: .metadata.creationTimestamp |  | ||||||
|   - name: Status |  | ||||||
|     type: string |  | ||||||
|     description: Current sync status of postgresql resource |  | ||||||
|     JSONPath: .status.PostgresClusterStatus |  | ||||||
|   scope: Namespaced |  | ||||||
|   subresources: |  | ||||||
|     status: {} |  | ||||||
|   version: v1 |  | ||||||
| --- |  | ||||||
| apiVersion: apiextensions.k8s.io/v1beta1 |  | ||||||
| kind: CustomResourceDefinition |  | ||||||
| metadata: |  | ||||||
|   name: operatorconfigurations.acid.zalan.do |  | ||||||
|   labels: |  | ||||||
|     app.kubernetes.io/name: {{ template "postgres-operator.name" . }} |  | ||||||
|     helm.sh/chart: {{ template "postgres-operator.chart" . }} |  | ||||||
|     app.kubernetes.io/managed-by: {{ .Release.Service }} |  | ||||||
|     app.kubernetes.io/instance: {{ .Release.Name }} |  | ||||||
|   annotations: |  | ||||||
|     "helm.sh/hook": crd-install |  | ||||||
| spec: |  | ||||||
|   group: acid.zalan.do |  | ||||||
|   names: |  | ||||||
|     kind: OperatorConfiguration |  | ||||||
|     listKind: OperatorConfigurationList |  | ||||||
|     plural: operatorconfigurations |  | ||||||
|     singular: operatorconfiguration |  | ||||||
|     shortNames: |  | ||||||
|     - opconfig |  | ||||||
|   additionalPrinterColumns: |  | ||||||
|   - name: Image |  | ||||||
|     type: string |  | ||||||
|     description: Spilo image to be used for Pods |  | ||||||
|     JSONPath: .configuration.docker_image |  | ||||||
|   - name: Cluster-Label |  | ||||||
|     type: string |  | ||||||
|     description: Label for K8s resources created by operator |  | ||||||
|     JSONPath: .configuration.kubernetes.cluster_name_label |  | ||||||
|   - name: Service-Account |  | ||||||
|     type: string |  | ||||||
|     description: Name of service account to be used |  | ||||||
|     JSONPath: .configuration.kubernetes.pod_service_account_name |  | ||||||
|   - name: Min-Instances |  | ||||||
|     type: integer |  | ||||||
|     description: Minimum number of instances per Postgres cluster |  | ||||||
|     JSONPath: .configuration.min_instances |  | ||||||
|   - name: Age |  | ||||||
|     type: date |  | ||||||
|     JSONPath: .metadata.creationTimestamp |  | ||||||
|   scope: Namespaced |  | ||||||
|   subresources: |  | ||||||
|     status: {} |  | ||||||
|   version: v1 |  | ||||||
| {{ end }} |  | ||||||
|  | @ -14,7 +14,7 @@ configuration: | ||||||
| {{ toYaml .Values.configUsers | indent 4 }} | {{ toYaml .Values.configUsers | indent 4 }} | ||||||
|   kubernetes: |   kubernetes: | ||||||
|     oauth_token_secret_name: {{ template "postgres-operator.fullname" . }} |     oauth_token_secret_name: {{ template "postgres-operator.fullname" . }} | ||||||
|     pod_service_account_name: operator |     pod_service_account_name: {{ include "postgres-operator.serviceAccountName" . }} | ||||||
| {{ toYaml .Values.configKubernetes | indent 4 }} | {{ toYaml .Values.configKubernetes | indent 4 }} | ||||||
|   postgres_pod_resources: |   postgres_pod_resources: | ||||||
| {{ toYaml .Values.configPostgresPodResources | indent 4 }} | {{ toYaml .Values.configPostgresPodResources | indent 4 }} | ||||||
|  |  | ||||||
|  | @ -17,6 +17,8 @@ configTarget: "OperatorConfigurationCRD" | ||||||
| 
 | 
 | ||||||
| # general top-level configuration parameters | # general top-level configuration parameters | ||||||
| configGeneral: | configGeneral: | ||||||
|  |   # choose if deployment creates/updates CRDs with OpenAPIV3Validation | ||||||
|  |   enable_crd_validation: true | ||||||
|   # start any new database pod without limitations on shm memory |   # start any new database pod without limitations on shm memory | ||||||
|   enable_shm_volume: true |   enable_shm_volume: true | ||||||
|   # etcd connection string for Patroni. Empty uses K8s-native DCS. |   # etcd connection string for Patroni. Empty uses K8s-native DCS. | ||||||
|  | @ -57,15 +59,18 @@ configKubernetes: | ||||||
|   # label assigned to Kubernetes objects created by the operator |   # label assigned to Kubernetes objects created by the operator | ||||||
|   cluster_name_label: cluster-name |   cluster_name_label: cluster-name | ||||||
|   # additional annotations to add to every database pod |   # additional annotations to add to every database pod | ||||||
|   custom_pod_annotations: |   # custom_pod_annotations: | ||||||
|  |   #   keya: valuea | ||||||
|  |   #   keyb: valueb | ||||||
|  | 
 | ||||||
|   # enables initContainers to run actions before Spilo is started |   # enables initContainers to run actions before Spilo is started | ||||||
|   enable_init_containers: false |   enable_init_containers: true | ||||||
|   # toggles pod anti affinity on the Postgres pods |   # toggles pod anti affinity on the Postgres pods | ||||||
|   enable_pod_antiaffinity: false |   enable_pod_antiaffinity: false | ||||||
|   # toggles PDB to set to MinAvailabe 0 or 1 |   # toggles PDB to set to MinAvailabe 0 or 1 | ||||||
|   enable_pod_disruption_budget: true |   enable_pod_disruption_budget: true | ||||||
|   # enables sidecar containers to run alongside Spilo in the same pod |   # enables sidecar containers to run alongside Spilo in the same pod | ||||||
|   enable_sidecars: false |   enable_sidecars: true | ||||||
|   # name of the secret containing infrastructure roles names and passwords |   # name of the secret containing infrastructure roles names and passwords | ||||||
|   # infrastructure_roles_secret_name: postgresql-infrastructure-roles |   # infrastructure_roles_secret_name: postgresql-infrastructure-roles | ||||||
| 
 | 
 | ||||||
|  | @ -78,7 +83,8 @@ configKubernetes: | ||||||
|   # master_pod_move_timeout: 20m |   # master_pod_move_timeout: 20m | ||||||
| 
 | 
 | ||||||
|   # set of labels that a running and active node should possess to be considered ready |   # set of labels that a running and active node should possess to be considered ready | ||||||
|   # node_readiness_label: "" |   # node_readiness_label: | ||||||
|  |   #   status: ready | ||||||
| 
 | 
 | ||||||
|   # name of the secret containing the OAuth2 token to pass to the teams API |   # name of the secret containing the OAuth2 token to pass to the teams API | ||||||
|   # oauth_token_secret_name: postgresql-operator |   # oauth_token_secret_name: postgresql-operator | ||||||
|  | @ -218,7 +224,8 @@ configTeamsApi: | ||||||
|   # operator will add all team member roles to this group and add a pg_hba line |   # operator will add all team member roles to this group and add a pg_hba line | ||||||
|   pam_role_name: zalandos |   pam_role_name: zalandos | ||||||
|   # List of teams which members need the superuser role in each Postgres cluster |   # List of teams which members need the superuser role in each Postgres cluster | ||||||
|   # postgres_superuser_teams: "postgres_superusers" |   # postgres_superuser_teams: | ||||||
|  |   # - postgres_superusers | ||||||
| 
 | 
 | ||||||
|   # List of roles that cannot be overwritten by an application, team or infrastructure role |   # List of roles that cannot be overwritten by an application, team or infrastructure role | ||||||
|   protected_role_names: |   protected_role_names: | ||||||
|  | @ -232,7 +239,7 @@ configTeamsApi: | ||||||
|   # teams_api_url: http://fake-teams-api.default.svc.cluster.local |   # teams_api_url: http://fake-teams-api.default.svc.cluster.local | ||||||
| 
 | 
 | ||||||
| # Scalyr is a log management tool that Zalando uses as a sidecar | # Scalyr is a log management tool that Zalando uses as a sidecar | ||||||
| scalyr: | configScalyr: | ||||||
|   # API key for the Scalyr sidecar |   # API key for the Scalyr sidecar | ||||||
|   # scalyr_api_key: "" |   # scalyr_api_key: "" | ||||||
| 
 | 
 | ||||||
|  | @ -261,9 +268,7 @@ serviceAccount: | ||||||
|   create: true |   create: true | ||||||
|   # The name of the ServiceAccount to use. |   # The name of the ServiceAccount to use. | ||||||
|   # If not set and create is true, a name is generated using the fullname template |   # If not set and create is true, a name is generated using the fullname template | ||||||
|   # When relying solely on the OperatorConfiguration CRD, this value has to be "operator" |   name: | ||||||
|   # Otherwise, the operator tries to use the "default" service account which is forbidden |  | ||||||
|   name: operator |  | ||||||
| 
 | 
 | ||||||
| priorityClassName: "" | priorityClassName: "" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -17,6 +17,8 @@ configTarget: "ConfigMap" | ||||||
| 
 | 
 | ||||||
| # general configuration parameters | # general configuration parameters | ||||||
| configGeneral: | configGeneral: | ||||||
|  |   # choose if deployment creates/updates CRDs with OpenAPIV3Validation | ||||||
|  |   enable_crd_validation: "true" | ||||||
|   # start any new database pod without limitations on shm memory |   # start any new database pod without limitations on shm memory | ||||||
|   enable_shm_volume: "true" |   enable_shm_volume: "true" | ||||||
|   # etcd connection string for Patroni. Empty uses K8s-native DCS. |   # etcd connection string for Patroni. Empty uses K8s-native DCS. | ||||||
|  | @ -55,16 +57,16 @@ configKubernetes: | ||||||
|   # label assigned to Kubernetes objects created by the operator |   # label assigned to Kubernetes objects created by the operator | ||||||
|   cluster_name_label: version |   cluster_name_label: version | ||||||
|   # annotations attached to each database pod |   # annotations attached to each database pod | ||||||
|   # custom_pod_annotations: keya:valuea |   # custom_pod_annotations: keya:valuea,keyb:valueb | ||||||
| 
 | 
 | ||||||
|   # enables initContainers to run actions before Spilo is started |   # enables initContainers to run actions before Spilo is started | ||||||
|   enable_init_containers: "false" |   enable_init_containers: "true" | ||||||
|   # toggles pod anti affinity on the Postgres pods |   # toggles pod anti affinity on the Postgres pods | ||||||
|   enable_pod_antiaffinity: "false" |   enable_pod_antiaffinity: "false" | ||||||
|   # toggles PDB to set to MinAvailabe 0 or 1 |   # toggles PDB to set to MinAvailabe 0 or 1 | ||||||
|   enable_pod_disruption_budget: "true" |   enable_pod_disruption_budget: "true" | ||||||
|   # enables sidecar containers to run alongside Spilo in the same pod |   # enables sidecar containers to run alongside Spilo in the same pod | ||||||
|   enable_sidecars: "false" |   enable_sidecars: "true" | ||||||
|   # name of the secret containing infrastructure roles names and passwords |   # name of the secret containing infrastructure roles names and passwords | ||||||
|   # infrastructure_roles_secret_name: postgresql-infrastructure-roles |   # infrastructure_roles_secret_name: postgresql-infrastructure-roles | ||||||
| 
 | 
 | ||||||
|  | @ -141,9 +143,9 @@ configLoadBalancer: | ||||||
|   # toggles service type load balancer pointing to the replica pod of the cluster |   # toggles service type load balancer pointing to the replica pod of the cluster | ||||||
|   enable_replica_load_balancer: "false" |   enable_replica_load_balancer: "false" | ||||||
|   # defines the DNS name string template for the master load balancer cluster |   # defines the DNS name string template for the master load balancer cluster | ||||||
|   master_dns_name_format: '{cluster}.{team}.staging.{hostedzone}' |   master_dns_name_format: '{cluster}.{team}.{hostedzone}' | ||||||
|   # defines the DNS name string template for the replica load balancer cluster |   # defines the DNS name string template for the replica load balancer cluster | ||||||
|   replica_dns_name_format: '{cluster}-repl.{team}.staging.{hostedzone}' |   replica_dns_name_format: '{cluster}-repl.{team}.{hostedzone}' | ||||||
| 
 | 
 | ||||||
| # options to aid debugging of the operator itself | # options to aid debugging of the operator itself | ||||||
| configDebug: | configDebug: | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ pipeline: | ||||||
|               IMAGE=registry-write.opensource.zalan.do/acid/postgres-operator-test |               IMAGE=registry-write.opensource.zalan.do/acid/postgres-operator-test | ||||||
|             fi |             fi | ||||||
|             export IMAGE |             export IMAGE | ||||||
|             make tools deps docker |             make deps docker | ||||||
|         - desc: 'Run unit tests' |         - desc: 'Run unit tests' | ||||||
|           cmd: | |           cmd: | | ||||||
|             export PATH=$PATH:$HOME/go/bin |             export PATH=$PATH:$HOME/go/bin | ||||||
|  |  | ||||||
|  | @ -3,6 +3,30 @@ | ||||||
| Learn how to configure and manage the Postgres Operator in your Kubernetes (K8s) | Learn how to configure and manage the Postgres Operator in your Kubernetes (K8s) | ||||||
| environment. | environment. | ||||||
| 
 | 
 | ||||||
|  | ## CRD Validation | ||||||
|  | 
 | ||||||
|  | [CustomResourceDefinitions](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions) | ||||||
|  | will be registered with schema validation by default when the operator is | ||||||
|  | deployed. The `OperatorConfiguration` CRD will only get created if the | ||||||
|  | `POSTGRES_OPERATOR_CONFIGURATION_OBJECT` [environment variable](../manifests/postgres-operator.yaml#L36) | ||||||
|  | in the deployment yaml is set and not empty. | ||||||
|  | 
 | ||||||
|  | When submitting manifests of [`postgresql`](../manifests/postgresql.crd.yaml) or | ||||||
|  | [`OperatorConfiguration`](../manifests/operatorconfiguration.crd.yaml) custom | ||||||
|  | resources with kubectl, validation can be bypassed with `--validate=false`. The | ||||||
|  | operator can also be configured to not register CRDs with validation on `ADD` or | ||||||
|  | `UPDATE` events. Running instances are not affected when enabling the validation | ||||||
|  | afterwards unless the manifests is not changed then. Note, that the provided CRD | ||||||
|  | manifests contain the validation for users to understand what schema is | ||||||
|  | enforced. | ||||||
|  | 
 | ||||||
|  | Once the validation is enabled it can only be disabled manually by editing or | ||||||
|  | patching the CRD manifest: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | zk8 patch crd postgresqls.acid.zalan.do -p '{"spec":{"validation": null}}' | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| ## Namespaces | ## Namespaces | ||||||
| 
 | 
 | ||||||
| ### Select the namespace to deploy to | ### Select the namespace to deploy to | ||||||
|  | @ -32,7 +56,7 @@ By default, the operator watches the namespace it is deployed to. You can | ||||||
| change this by setting the `WATCHED_NAMESPACE` var in the `env` section of the | change this by setting the `WATCHED_NAMESPACE` var in the `env` section of the | ||||||
| [operator deployment](../manifests/postgres-operator.yaml) manifest or by | [operator deployment](../manifests/postgres-operator.yaml) manifest or by | ||||||
| altering the `watched_namespace` field in the operator | altering the `watched_namespace` field in the operator | ||||||
| [ConfigMap](../manifests/configmap.yaml#L79). | [configuration](../manifests/postgresql-operator-default-configuration.yaml#L49). | ||||||
| In the case both are set, the env var takes the precedence. To make the | In the case both are set, the env var takes the precedence. To make the | ||||||
| operator listen to all namespaces, explicitly set the field/env var to "`*`". | operator listen to all namespaces, explicitly set the field/env var to "`*`". | ||||||
| 
 | 
 | ||||||
|  | @ -115,7 +139,7 @@ that are aggregated into the K8s [default roles](https://kubernetes.io/docs/refe | ||||||
| 
 | 
 | ||||||
| To ensure Postgres pods are running on nodes without any other application pods, | To ensure Postgres pods are running on nodes without any other application pods, | ||||||
| you can use [taints and tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) | you can use [taints and tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) | ||||||
| and configure the required toleration in the operator ConfigMap. | and configure the required toleration in the operator configuration. | ||||||
| 
 | 
 | ||||||
| As an example you can set following node taint: | As an example you can set following node taint: | ||||||
| 
 | 
 | ||||||
|  | @ -136,6 +160,21 @@ data: | ||||||
|   ... |   ... | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | For an OperatorConfiguration resource the toleration should be defined like | ||||||
|  | this: | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: OperatorConfiguration | ||||||
|  | metadata: | ||||||
|  |   name: postgresql-configuration | ||||||
|  | configuration: | ||||||
|  |   kubernetes: | ||||||
|  |     toleration: | ||||||
|  |       postgres: "key:postgres,operator:Exists,effect:NoSchedule" | ||||||
|  |   ... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| Note that the K8s version 1.13 brings [taint-based eviction](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions) | Note that the K8s version 1.13 brings [taint-based eviction](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions) | ||||||
| to the beta stage and enables it by default. Postgres pods by default receive | to the beta stage and enables it by default. Postgres pods by default receive | ||||||
| tolerations for `unreachable` and `noExecute` taints with the timeout of `5m`. | tolerations for `unreachable` and `noExecute` taints with the timeout of `5m`. | ||||||
|  | @ -148,7 +187,7 @@ completely, specify the toleration by leaving out the `tolerationSeconds` value | ||||||
| 
 | 
 | ||||||
| To ensure Postgres pods are running on different topologies, you can use | To ensure Postgres pods are running on different topologies, you can use | ||||||
| [pod anti affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) | [pod anti affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) | ||||||
| and configure the required topology in the operator ConfigMap. | and configure the required topology in the operator configuration. | ||||||
| 
 | 
 | ||||||
| Enable pod anti affinity by adding following line to the operator ConfigMap: | Enable pod anti affinity by adding following line to the operator ConfigMap: | ||||||
| 
 | 
 | ||||||
|  | @ -161,21 +200,22 @@ data: | ||||||
|   enable_pod_antiaffinity: "true" |   enable_pod_antiaffinity: "true" | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| By default the topology key for the pod anti affinity is set to | Likewise, when using an OperatorConfiguration resource add: | ||||||
| `kubernetes.io/hostname`, you can set another topology key e.g. |  | ||||||
| `failure-domain.beta.kubernetes.io/zone` by adding following line to the |  | ||||||
| operator ConfigMap, see [built-in node labels](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels) for available topology keys: |  | ||||||
| 
 | 
 | ||||||
| ```yaml | ```yaml | ||||||
| apiVersion: v1 | apiVersion: "acid.zalan.do/v1" | ||||||
| kind: ConfigMap | kind: OperatorConfiguration | ||||||
| metadata: | metadata: | ||||||
|   name: postgres-operator |   name: postgresql-configuration | ||||||
| data: | configuration: | ||||||
|   enable_pod_antiaffinity: "true" |   kubernetes: | ||||||
|   pod_antiaffinity_topology_key: "failure-domain.beta.kubernetes.io/zone" |     enable_pod_antiaffinity: true | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | By default the topology key for the pod anti affinity is set to | ||||||
|  | `kubernetes.io/hostname`, you can set another topology key e.g. | ||||||
|  | `failure-domain.beta.kubernetes.io/zone`. See [built-in node labels](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels) for available topology keys. | ||||||
|  | 
 | ||||||
| ## Pod Disruption Budget | ## Pod Disruption Budget | ||||||
| 
 | 
 | ||||||
| By default the operator uses a PodDisruptionBudget (PDB) to protect the cluster | By default the operator uses a PodDisruptionBudget (PDB) to protect the cluster | ||||||
|  | @ -280,6 +320,20 @@ data: | ||||||
|   ... |   ... | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | **OperatorConfiguration** | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: OperatorConfiguration | ||||||
|  | metadata: | ||||||
|  |   name: postgresql-operator-configuration | ||||||
|  | configuration: | ||||||
|  |   kubernetes: | ||||||
|  |     # referencing config map with custom settings | ||||||
|  |     pod_environment_configmap: postgres-pod-config | ||||||
|  |     ... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| **referenced ConfigMap `postgres-pod-config`** | **referenced ConfigMap `postgres-pod-config`** | ||||||
| 
 | 
 | ||||||
| ```yaml | ```yaml | ||||||
|  | @ -312,7 +366,7 @@ services: one for the master pod and one for replica pods. To expose these | ||||||
| services to an outer network, one can attach load balancers to them by setting | services to an outer network, one can attach load balancers to them by setting | ||||||
| `enableMasterLoadBalancer` and/or `enableReplicaLoadBalancer` to `true` in the | `enableMasterLoadBalancer` and/or `enableReplicaLoadBalancer` to `true` in the | ||||||
| cluster manifest. In the case any of these variables are omitted from the | cluster manifest. In the case any of these variables are omitted from the | ||||||
| manifest, the operator configmap's settings `enable_master_load_balancer` and | manifest, the operator configuration settings `enable_master_load_balancer` and | ||||||
| `enable_replica_load_balancer` apply. Note that the operator settings affect | `enable_replica_load_balancer` apply. Note that the operator settings affect | ||||||
| all Postgresql services running in all namespaces watched by the operator. | all Postgresql services running in all namespaces watched by the operator. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -33,7 +33,7 @@ by setting the `GO111MODULE` environment variable to `on`. The make targets do | ||||||
| this for you, so simply run | this for you, so simply run | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| make tools deps | make deps | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| This would take a while to complete. You have to redo `make deps` every time | This would take a while to complete. You have to redo `make deps` every time | ||||||
|  | @ -284,6 +284,7 @@ manifest files: | ||||||
| 
 | 
 | ||||||
| Postgres manifest parameters are defined in the [api package](../pkg/apis/acid.zalan.do/v1/postgresql_type.go). | Postgres manifest parameters are defined in the [api package](../pkg/apis/acid.zalan.do/v1/postgresql_type.go). | ||||||
| The operator behavior has to be implemented at least in [k8sres.go](../pkg/cluster/k8sres.go). | The operator behavior has to be implemented at least in [k8sres.go](../pkg/cluster/k8sres.go). | ||||||
|  | Validation of CRD parameters is controlled in [crd.go](../pkg/apis/acid.zalan.do/v1/crds.go). | ||||||
| Please, reflect your changes in tests, for example in: | Please, reflect your changes in tests, for example in: | ||||||
| * [config_test.go](../pkg/util/config/config_test.go) | * [config_test.go](../pkg/util/config/config_test.go) | ||||||
| * [k8sres_test.go](../pkg/cluster/k8sres_test.go) | * [k8sres_test.go](../pkg/cluster/k8sres_test.go) | ||||||
|  | @ -294,6 +295,7 @@ Please, reflect your changes in tests, for example in: | ||||||
| For the CRD-based configuration, please update the following files: | For the CRD-based configuration, please update the following files: | ||||||
| * the default [OperatorConfiguration](../manifests/postgresql-operator-default-configuration.yaml) | * the default [OperatorConfiguration](../manifests/postgresql-operator-default-configuration.yaml) | ||||||
| * the Helm chart's [values-crd file](../charts/postgres-operator/values.yaml) | * the Helm chart's [values-crd file](../charts/postgres-operator/values.yaml) | ||||||
|  | * the CRD's [validation](../manifests/operatorconfiguration.crd.yaml) | ||||||
| 
 | 
 | ||||||
| Reflect the changes in the ConfigMap configuration as well (note that numeric | Reflect the changes in the ConfigMap configuration as well (note that numeric | ||||||
| and boolean parameters have to use double quotes here): | and boolean parameters have to use double quotes here): | ||||||
|  |  | ||||||
|  | @ -55,8 +55,8 @@ kubectl create -f manifests/postgres-operator.yaml  # deployment | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| There is a [Kustomization](https://github.com/kubernetes-sigs/kustomize) | There is a [Kustomization](https://github.com/kubernetes-sigs/kustomize) | ||||||
| manifest that [combines the mentioned resources](../manifests/kustomization.yaml) - | manifest that [combines the mentioned resources](../manifests/kustomization.yaml) | ||||||
| it can be used with kubectl 1.14 or newer as easy as: | (except for the CRD) - it can be used with kubectl 1.14 or newer as easy as: | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| kubectl apply -k github.com/zalando/postgres-operator/manifests | kubectl apply -k github.com/zalando/postgres-operator/manifests | ||||||
|  | @ -73,22 +73,23 @@ manifest. | ||||||
| ### Helm chart | ### Helm chart | ||||||
| 
 | 
 | ||||||
| Alternatively, the operator can be installed by using the provided [Helm](https://helm.sh/) | Alternatively, the operator can be installed by using the provided [Helm](https://helm.sh/) | ||||||
| chart which saves you the manual steps. Therefore, install the helm CLI on your | chart which saves you the manual steps. Clone this repo and change directory to | ||||||
| machine. After initializing helm (and its server component Tiller) in your local | the repo root. With Helm v3 installed you should be able to run: | ||||||
| cluster you can install the operator chart. You can define a release name that |  | ||||||
| is prepended to the operator resource's names. |  | ||||||
| 
 |  | ||||||
| Use `--name zalando` to match with the default service account name as older |  | ||||||
| operator versions do not support custom names for service accounts. To use |  | ||||||
| CRD-based configuration you need to specify the [values-crd yaml file](../charts/postgres-operator/values-crd.yaml). |  | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| # 1) initialize helm | helm install postgres-operator ./charts/postgres-operator | ||||||
| helm init |  | ||||||
| # 2) install postgres-operator chart |  | ||||||
| helm install --name zalando ./charts/postgres-operator |  | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | To use CRD-based configuration you need to specify the [values-crd yaml file](../charts/postgres-operator/values-crd.yaml). | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | helm install postgres-operator ./charts/postgres-operator -f ./charts/postgres-operator/values-crd.yaml | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | The chart works with both Helm 2 and Helm 3. The `crd-install` hook from v2 will | ||||||
|  | be skipped with warning when using v3. Documentation for installing applications | ||||||
|  | with Helm 2 can be found in the [v2 docs](https://v2.helm.sh/docs/). | ||||||
|  | 
 | ||||||
| ### Operator Lifecycle Manager (OLM) | ### Operator Lifecycle Manager (OLM) | ||||||
| 
 | 
 | ||||||
| The [Operator Lifecycle Manager (OLM)](https://github.com/operator-framework/operator-lifecycle-manager) | The [Operator Lifecycle Manager (OLM)](https://github.com/operator-framework/operator-lifecycle-manager) | ||||||
|  | @ -119,15 +120,15 @@ kubectl get pod -l app.kubernetes.io/name=postgres-operator | ||||||
| kubectl create -f manifests/minimal-postgres-manifest.yaml | kubectl create -f manifests/minimal-postgres-manifest.yaml | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| After the cluster manifest is submitted the operator will create Service and | After the cluster manifest is submitted and passed the validation the operator | ||||||
| Endpoint resources and a StatefulSet which spins up new Pod(s) given the number | will create Service and Endpoint resources and a StatefulSet which spins up new | ||||||
| of instances specified in the manifest. All resources are named like the | Pod(s) given the number of instances specified in the manifest. All resources | ||||||
| cluster. The database pods can be identified by their number suffix, starting | are named like the cluster. The database pods can be identified by their number | ||||||
| from `-0`. They run the [Spilo](https://github.com/zalando/spilo) container | suffix, starting from `-0`. They run the [Spilo](https://github.com/zalando/spilo) | ||||||
| image by Zalando. As for the services and endpoints, there will be one for the | container image by Zalando. As for the services and endpoints, there will be one | ||||||
| master pod and another one for all the replicas (`-repl` suffix). Check if all | for the master pod and another one for all the replicas (`-repl` suffix). Check | ||||||
| components are coming up. Use the label `application=spilo` to filter and list | if all components are coming up. Use the label `application=spilo` to filter and | ||||||
| the label `spilo-role` to see who is currently the master. | list the label `spilo-role` to see who is currently the master. | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| # check the deployed cluster | # check the deployed cluster | ||||||
|  |  | ||||||
|  | @ -29,21 +29,20 @@ configuration. | ||||||
| 
 | 
 | ||||||
|   To test the CRD-based configuration locally, use the following |   To test the CRD-based configuration locally, use the following | ||||||
|   ```bash |   ```bash | ||||||
|  |   kubectl create -f manifests/operatorconfiguration.crd.yaml # registers the CRD | ||||||
|  |   kubectl create -f manifests/postgresql-operator-default-configuration.yaml | ||||||
|  | 
 | ||||||
|   kubectl create -f manifests/operator-service-account-rbac.yaml |   kubectl create -f manifests/operator-service-account-rbac.yaml | ||||||
|   kubectl create -f manifests/postgres-operator.yaml # set the env var as mentioned above |   kubectl create -f manifests/postgres-operator.yaml # set the env var as mentioned above | ||||||
|   kubectl create -f manifests/postgresql-operator-default-configuration.yaml | 
 | ||||||
|   kubectl get operatorconfigurations postgresql-operator-default-configuration -o yaml |   kubectl get operatorconfigurations postgresql-operator-default-configuration -o yaml | ||||||
|   ``` |   ``` | ||||||
|   Note that the operator first attempts to register the CRD of the |  | ||||||
|   `OperatorConfiguration` and then waits for an instance to be created. In |  | ||||||
|   between these two event the operator pod may be failing since it cannot fetch |  | ||||||
|   the not-yet-existing `OperatorConfiguration` instance. |  | ||||||
| 
 | 
 | ||||||
| The CRD-based configuration is more powerful than the one based on ConfigMaps | The CRD-based configuration is more powerful than the one based on ConfigMaps | ||||||
| and should be used unless there is a compatibility requirement to use an already | and should be used unless there is a compatibility requirement to use an already | ||||||
| existing configuration. Even in that case, it should be rather straightforward | existing configuration. Even in that case, it should be rather straightforward | ||||||
| to convert the configmap based configuration into the CRD-based one and restart | to convert the ConfigMap-based configuration into the CRD-based one and restart | ||||||
| the operator. The ConfigMaps-based configuration will be deprecated and | the operator. The ConfigMap-based configuration will be deprecated and | ||||||
| subsequently removed in future releases. | subsequently removed in future releases. | ||||||
| 
 | 
 | ||||||
| Note that for the CRD-based configuration groups of configuration options below | Note that for the CRD-based configuration groups of configuration options below | ||||||
|  | @ -71,6 +70,11 @@ Variable names are underscore-separated words. | ||||||
| 
 | 
 | ||||||
| Those are top-level keys, containing both leaf keys and groups. | Those are top-level keys, containing both leaf keys and groups. | ||||||
| 
 | 
 | ||||||
|  | * **enable_crd_validation** | ||||||
|  |   toggles if the operator will create or update CRDs with | ||||||
|  |   [OpenAPI v3 schema validation](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#validation) | ||||||
|  |   The default is `true`. | ||||||
|  | 
 | ||||||
| * **etcd_host** | * **etcd_host** | ||||||
|   Etcd connection string for Patroni defined as `host:port`. Not required when |   Etcd connection string for Patroni defined as `host:port`. Not required when | ||||||
|   Patroni native Kubernetes support is used. The default is empty (use |   Patroni native Kubernetes support is used. The default is empty (use | ||||||
|  | @ -194,11 +198,11 @@ configuration they are grouped under the `kubernetes` key. | ||||||
| 
 | 
 | ||||||
| * **enable_init_containers** | * **enable_init_containers** | ||||||
|   global option to allow for creating init containers to run actions before |   global option to allow for creating init containers to run actions before | ||||||
|   Spilo is started. Disabled by default. |   Spilo is started. Default is true. | ||||||
| 
 | 
 | ||||||
| * **enable_sidecars** | * **enable_sidecars** | ||||||
|   global option to allow for creating sidecar containers to run alongside Spilo |   global option to allow for creating sidecar containers to run alongside Spilo | ||||||
|   on the same pod. Disabled by default. |   on the same pod. Default is true. | ||||||
| 
 | 
 | ||||||
| * **secret_name_template** | * **secret_name_template** | ||||||
|   a template for the name of the database user secrets generated by the |   a template for the name of the database user secrets generated by the | ||||||
|  |  | ||||||
|  | @ -23,7 +23,6 @@ ifndef GOPATH | ||||||
| 	GOPATH := $(HOME)/go | 	GOPATH := $(HOME)/go | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| KIND_PATH := $(GOPATH)/bin |  | ||||||
| PATH := $(GOPATH)/bin:$(PATH) | PATH := $(GOPATH)/bin:$(PATH) | ||||||
| 
 | 
 | ||||||
| default: tools | default: tools | ||||||
|  | @ -43,10 +42,7 @@ push: docker | ||||||
| 
 | 
 | ||||||
| tools: docker | tools: docker | ||||||
| 	# install pinned version of 'kind' | 	# install pinned version of 'kind' | ||||||
| 	# leave the name as is to avoid overwriting official binary named `kind` | 	GO111MODULE=on go get sigs.k8s.io/kind@v0.5.1 | ||||||
| 	wget https://github.com/kubernetes-sigs/kind/releases/download/v0.5.1/kind-linux-amd64 |  | ||||||
| 	chmod +x kind-linux-amd64 |  | ||||||
| 	mv kind-linux-amd64 $(KIND_PATH) |  | ||||||
| 
 | 
 | ||||||
| test: | test: | ||||||
| 	./run.sh | 	./run.sh | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								e2e/run.sh
								
								
								
								
							
							
						
						
									
										14
									
								
								e2e/run.sh
								
								
								
								
							|  | @ -30,15 +30,15 @@ function pull_images(){ | ||||||
| function start_kind(){ | function start_kind(){ | ||||||
| 
 | 
 | ||||||
|   # avoid interference with previous test runs |   # avoid interference with previous test runs | ||||||
|   if [[ $(kind-linux-amd64 get clusters | grep "^${cluster_name}*") != "" ]] |   if [[ $(kind get clusters | grep "^${cluster_name}*") != "" ]] | ||||||
|   then |   then | ||||||
|     kind-linux-amd64 delete cluster --name ${cluster_name} |     kind delete cluster --name ${cluster_name} | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   kind-linux-amd64 create cluster --name ${cluster_name} --config kind-cluster-postgres-operator-e2e-tests.yaml |   kind create cluster --name ${cluster_name} --config kind-cluster-postgres-operator-e2e-tests.yaml | ||||||
|   kind-linux-amd64 load docker-image "${operator_image}" --name ${cluster_name} |   kind load docker-image "${operator_image}" --name ${cluster_name} | ||||||
|   kind-linux-amd64 load docker-image "${e2e_test_image}" --name ${cluster_name} |   kind load docker-image "${e2e_test_image}" --name ${cluster_name} | ||||||
|   KUBECONFIG="$(kind-linux-amd64 get kubeconfig-path --name=${cluster_name})" |   KUBECONFIG="$(kind get kubeconfig-path --name=${cluster_name})" | ||||||
|   export KUBECONFIG |   export KUBECONFIG | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -58,7 +58,7 @@ function run_tests(){ | ||||||
| 
 | 
 | ||||||
| function clean_up(){ | function clean_up(){ | ||||||
|   unset KUBECONFIG |   unset KUBECONFIG | ||||||
|   kind-linux-amd64 delete cluster --name ${cluster_name} |   kind delete cluster --name ${cluster_name} | ||||||
|   rm -rf ${kubeconfig_path} |   rm -rf ${kubeconfig_path} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -65,15 +65,6 @@ class EndToEndTestCase(unittest.TestCase): | ||||||
|         ''' |         ''' | ||||||
|         k8s = self.k8s |         k8s = self.k8s | ||||||
| 
 | 
 | ||||||
|         # enable sidecars in cluster |  | ||||||
|         toggle_sidecar_creation = { |  | ||||||
|             "data": { |  | ||||||
|                "enable_init_containers": "true", |  | ||||||
|                "enable_sidecars": "true", |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         k8s.update_config(toggle_sidecar_creation) |  | ||||||
| 
 |  | ||||||
|         with open("manifests/complete-postgres-manifest.yaml", 'r+') as f: |         with open("manifests/complete-postgres-manifest.yaml", 'r+') as f: | ||||||
|             pg_manifest = yaml.safe_load(f) |             pg_manifest = yaml.safe_load(f) | ||||||
|             pg_manifest["metadata"]["namespace"] = self.namespace |             pg_manifest["metadata"]["namespace"] = self.namespace | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										18
									
								
								go.mod
								
								
								
								
							|  | @ -8,10 +8,16 @@ require ( | ||||||
| 	github.com/lib/pq v1.2.0 | 	github.com/lib/pq v1.2.0 | ||||||
| 	github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d | 	github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d | ||||||
| 	github.com/sirupsen/logrus v1.4.2 | 	github.com/sirupsen/logrus v1.4.2 | ||||||
| 	gopkg.in/yaml.v2 v2.2.2 | 	golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c // indirect | ||||||
| 	k8s.io/api v0.0.0-20190927115716-5d581ce610b0 | 	golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 // indirect | ||||||
| 	k8s.io/apiextensions-apiserver v0.0.0-20190927042040-728319705b32 | 	golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9 // indirect | ||||||
| 	k8s.io/apimachinery v0.0.0-20190927035529-0104e33c351d | 	golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f // indirect | ||||||
| 	k8s.io/client-go v0.0.0-20190926235751-95884bf844a9 | 	gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect | ||||||
| 	k8s.io/code-generator v0.0.0-20190927075303-016f2b3d74d0 | 	gopkg.in/yaml.v2 v2.2.5 | ||||||
|  | 	k8s.io/api v0.0.0-20191121015604-11707872ac1c | ||||||
|  | 	k8s.io/apiextensions-apiserver v0.0.0-20191121021419-88daf26ec3b8 | ||||||
|  | 	k8s.io/apimachinery v0.0.0-20191121015412-41065c7a8c2a | ||||||
|  | 	k8s.io/client-go v11.0.0+incompatible | ||||||
|  | 	k8s.io/code-generator v0.0.0-20191121015212-c4c8f8345c7e | ||||||
|  | 	sigs.k8s.io/kind v0.5.1 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
							
								
								
									
										207
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										207
									
								
								go.sum
								
								
								
								
							|  | @ -9,6 +9,7 @@ github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxB | ||||||
| github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | ||||||
| github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= | github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= | ||||||
| github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= | github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= | ||||||
|  | github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | ||||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||||
| github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | ||||||
| github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= | github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= | ||||||
|  | @ -19,8 +20,10 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt | ||||||
| github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | ||||||
| github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= | ||||||
| github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | ||||||
|  | github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= | ||||||
| github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||||
| github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||||||
|  | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= | ||||||
| github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= | github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= | ||||||
| github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= | github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= | ||||||
| github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= | github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= | ||||||
|  | @ -28,18 +31,21 @@ github.com/aws/aws-sdk-go v1.25.1 h1:d7zDXFT2Tgq/yw7Wku49+lKisE8Xc85erb+8PlE/Shk | ||||||
| github.com/aws/aws-sdk-go v1.25.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= | github.com/aws/aws-sdk-go v1.25.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= | ||||||
| github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= | github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= | ||||||
| github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= | github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= | ||||||
|  | github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= | ||||||
| github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | ||||||
| github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | ||||||
| github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= | github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= | ||||||
| github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= | github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= | ||||||
| github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= |  | ||||||
| github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= | github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= | ||||||
| github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= | github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= | ||||||
| github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | ||||||
| github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | ||||||
| github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||||||
|  | github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||||||
|  | github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | ||||||
| github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | ||||||
| github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= | github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= | ||||||
|  | github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | ||||||
| github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||||
|  | @ -47,16 +53,27 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs | ||||||
| github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | ||||||
| github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= | github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= | ||||||
| github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= | github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= | ||||||
|  | github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= | ||||||
| github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= | github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= | ||||||
| github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= | github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= | ||||||
|  | github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | ||||||
|  | github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | ||||||
|  | github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= | ||||||
| github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= | github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= | ||||||
| github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | ||||||
| github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= | github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= | ||||||
| github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | ||||||
|  | github.com/emicklei/go-restful v2.9.6+incompatible h1:tfrHha8zJ01ywiOEC1miGY8st1/igzWB8OmvPgoYX7w= | ||||||
|  | github.com/emicklei/go-restful v2.9.6+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | ||||||
| github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= | github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= | ||||||
| github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||||
|  | github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= | ||||||
|  | github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||||
|  | github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= | ||||||
|  | github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= | ||||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||||
| github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||||
|  | github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||||
| github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= | github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= | ||||||
| github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= | github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= | ||||||
| github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||||
|  | @ -66,6 +83,7 @@ github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70t | ||||||
| github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | ||||||
| github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | ||||||
| github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= | github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= | ||||||
|  | github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= | ||||||
| github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= | github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= | ||||||
| github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= | github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= | ||||||
| github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= | github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= | ||||||
|  | @ -74,37 +92,51 @@ github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwds | ||||||
| github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= | github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= | ||||||
| github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= | github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= | ||||||
| github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= | github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= | ||||||
|  | github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= | ||||||
|  | github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= | ||||||
| github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= | github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= | ||||||
| github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= | github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= | ||||||
| github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= | github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= | ||||||
| github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= | github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= | ||||||
| github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= | github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= | ||||||
|  | github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= | ||||||
|  | github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= | ||||||
| github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= | github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= | ||||||
| github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= | github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= | ||||||
| github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= | github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= | ||||||
| github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= | github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= | ||||||
|  | github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= | ||||||
| github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= | github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= | ||||||
| github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= | github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= | ||||||
|  | github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= | ||||||
| github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= | github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= | ||||||
| github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= | github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= | ||||||
| github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= | github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= | ||||||
| github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= | github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= | ||||||
| github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= | github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= | ||||||
|  | github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= | ||||||
|  | github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= | ||||||
| github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= | github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= | ||||||
| github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= | github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= | ||||||
| github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= | github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= | ||||||
|  | github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= | ||||||
| github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= | github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= | ||||||
| github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= | github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= | ||||||
| github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= | github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= | ||||||
| github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= | github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= | ||||||
| github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= | github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= | ||||||
|  | github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= | ||||||
|  | github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= | ||||||
| github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= | github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= | ||||||
| github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= | github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= | ||||||
|  | github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= | ||||||
| github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | ||||||
| github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||||
|  | github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= | ||||||
| github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= | github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= | ||||||
| github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= | github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= | ||||||
| github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | ||||||
|  | github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= | ||||||
| github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||||
| github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | ||||||
| github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | ||||||
|  | @ -112,7 +144,10 @@ github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+ | ||||||
| github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||||
| github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= | github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= | ||||||
| github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||||
|  | github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= | ||||||
|  | github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||||
| github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||||
|  | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||||
| github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | ||||||
| github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= | 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= | ||||||
|  | @ -122,20 +157,26 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ | ||||||
| github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | ||||||
| github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||||
| github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||||
|  | github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= | ||||||
| github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||||
| github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | ||||||
|  | github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||||
| github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k= | github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k= | ||||||
| github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||||
|  | github.com/googleapis/gnostic v0.3.0 h1:CcQijm0XKekKjP/YCz28LXVSpgguuB+nCxaSjCe09y0= | ||||||
|  | github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||||
| 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/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||||||
| 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-20180305231024-9cad4c3443a7/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 v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | ||||||
| github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | ||||||
| github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= | github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | ||||||
| github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | ||||||
| github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= | github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= | ||||||
| github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | ||||||
| github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= | ||||||
|  | github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= | ||||||
| github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | ||||||
| github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= | github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= | ||||||
| github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= | github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= | ||||||
|  | @ -148,13 +189,17 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv | ||||||
| github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | ||||||
| github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= | github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= | ||||||
| github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | ||||||
|  | github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= | ||||||
|  | github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | ||||||
| github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | ||||||
| github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | ||||||
|  | github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= | ||||||
| github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= | github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= | github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= | ||||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||||
| github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||||||
|  | github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= | ||||||
| github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||||||
| github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||||
| github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= | github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= | ||||||
|  | @ -168,6 +213,13 @@ github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN | ||||||
| github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||||
| github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= | github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= | ||||||
| github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||||
|  | github.com/mailru/easyjson v0.0.0-20190620125010-da37f6c1e481/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||||
|  | github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||||
|  | github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= | ||||||
|  | github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= | ||||||
|  | github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= | ||||||
|  | github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= | ||||||
|  | github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= | ||||||
| github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= | github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= | ||||||
| github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||||
| github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | ||||||
|  | @ -181,41 +233,60 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb | ||||||
| github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d h1:LznySqW8MqVeFh+pW6rOkFdld9QQ7jRydBKKM6jyPVI= | github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d h1:LznySqW8MqVeFh+pW6rOkFdld9QQ7jRydBKKM6jyPVI= | ||||||
| github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d/go.mod h1:u3hJ0kqCQu/cPpsu3RbCOPZ0d7V3IjPjv1adNRleM9I= | github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d/go.mod h1:u3hJ0kqCQu/cPpsu3RbCOPZ0d7V3IjPjv1adNRleM9I= | ||||||
| github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||||
|  | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||||
| github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||||
| github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= | github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= | ||||||
|  | github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= | ||||||
| github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||||
| github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||||
| github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||||
|  | github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= | ||||||
|  | github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||||
| github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | ||||||
| github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||||
|  | github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= | ||||||
|  | github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||||
| github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= | github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= | ||||||
|  | github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= | ||||||
| github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= | github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= | ||||||
| github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= | github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= | ||||||
| github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
|  | github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= | ||||||
|  | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
| github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
|  | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
| github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= | github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= | ||||||
| github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | ||||||
| github.com/prometheus/client_golang v0.9.4/go.mod h1:oCXIBxdI62A4cR6aTRJCgetEjecSIYzOEaeAn4iYEpM= | github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= | ||||||
| github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= | github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= | ||||||
| github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | ||||||
| github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | ||||||
| github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | ||||||
| github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= | github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= | ||||||
| github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= | github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= | ||||||
|  | github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= | ||||||
| github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= | github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= | ||||||
|  | github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= | ||||||
| github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | ||||||
|  | github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= | ||||||
| github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= | github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= | ||||||
| github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | ||||||
| github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | ||||||
| github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | ||||||
| github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | ||||||
| github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||||||
|  | github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||||
|  | github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||||
|  | github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= | ||||||
| github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | ||||||
| github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | ||||||
| github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||||
|  | github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||||
| github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= | github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= | ||||||
| github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||||
|  | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | ||||||
|  | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | ||||||
| github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= | github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= | ||||||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||||
| github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||||
|  | @ -223,14 +294,24 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH | ||||||
| github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||||||
| github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||||
|  | github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= | ||||||
|  | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | ||||||
|  | github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= | ||||||
| github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||||||
| github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= | github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= | ||||||
| github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= | ||||||
|  | github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= | ||||||
|  | github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | ||||||
| github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= | github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= | ||||||
|  | go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= | ||||||
|  | go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= | ||||||
|  | go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | ||||||
|  | go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | ||||||
|  | go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | ||||||
| go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= | go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= | ||||||
| go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | ||||||
| go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= | go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= | ||||||
| go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | ||||||
| golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||||
| golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||||
| golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||||
|  | @ -238,8 +319,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk | ||||||
| golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||||
| golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= | golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= | ||||||
| golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
|  | golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
|  | golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
|  | golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c h1:/nJuwDLoL/zrqY6gf57vxC+Pi+pZ8bfhpPkicO5H7W4= | ||||||
|  | golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||||
| golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||||
|  | golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= | ||||||
| golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | ||||||
| golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | ||||||
| golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | ||||||
|  | @ -253,14 +339,19 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r | ||||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
|  | golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
| golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc h1:gkKoSkUmnU6bpS/VhkuO27bzQeSA51uaEfbOW5dNb68= | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
| golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
|  | golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
|  | golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
|  | golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 h1:e6HwijUxhDe+hPNjZQQn9bA5PW3vNmnN64U2ZW759Lk= | ||||||
|  | golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||||
| golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||||
| golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= | ||||||
|  | @ -274,6 +365,7 @@ golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5h | ||||||
| golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
|  | golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
|  | @ -284,17 +376,26 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w | ||||||
| golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4= | golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4= | ||||||
| golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
|  | golang.org/x/sys v0.0.0-20190621203818-d432491b9138/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
|  | golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
|  | golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9 h1:ZBzSG/7F4eNKz2L3GE9o300RX0Az1Bw5HF7PDraD+qU= | ||||||
|  | golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||||
| golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||||
| golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= | golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= | ||||||
| golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | ||||||
|  | golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= | golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= | ||||||
| golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
|  | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= | ||||||
|  | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
|  | golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
|  | golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | ||||||
| golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||||
|  | @ -302,11 +403,15 @@ golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3 | ||||||
| golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||||
| golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||||
| golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||||
| golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac h1:MQEvx39qSf8vyrx3XRaOe+j1UDIzKwkYOVObRgGPVqI= | golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||||
| golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
|  | golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f h1:3MlESg/jvTr87F4ttA/q4B+uhe/q6qleC9/DP+IwQmY= | ||||||
|  | golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
|  | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= | gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= | ||||||
| gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= | gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= | ||||||
| gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= | gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= | ||||||
|  | gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= | ||||||
| gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= | gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= | ||||||
| google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | ||||||
| google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||||||
|  | @ -318,65 +423,75 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn | ||||||
| google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | ||||||
| google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | ||||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||||||
| google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= | google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= | ||||||
| gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
|  | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= | ||||||
|  | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
|  | gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= | ||||||
|  | gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= | ||||||
| gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | ||||||
| gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | ||||||
| gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= | gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= | ||||||
|  | gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= | ||||||
| gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||||
|  | gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= | ||||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | ||||||
|  | gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= | ||||||
| gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
| gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= | gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= | ||||||
| gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
|  | gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= | ||||||
|  | gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
|  | gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= | ||||||
|  | gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
| gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= | gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= | ||||||
| honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= | k8s.io/api v0.0.0-20190313235455-40a48860b5ab/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= | ||||||
| k8s.io/api v0.0.0-20190925180651-d58b53da08f5/go.mod h1:blPYY5r6fKug8SVOnjDtFAlzZzInCRL9NNls66SFhFI= | k8s.io/api v0.0.0-20190409021203-6e4e0e4f393b/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= | ||||||
| k8s.io/api v0.0.0-20190927115716-5d581ce610b0 h1:fwx2jAKNlXBQ8uiB3RNN5hVU/nEJTEBg/CfxoXEYri4= | k8s.io/api v0.0.0-20191121015604-11707872ac1c h1:Z87my3sF4WhG0OMxzARkWY/IKBtOr+MhXZAb4ts6qFc= | ||||||
| k8s.io/api v0.0.0-20190927115716-5d581ce610b0/go.mod h1:l2ZHS8QbgqodGx7yrYsOSwIxOR76BpGiW1OywXo9PFI= | k8s.io/api v0.0.0-20191121015604-11707872ac1c/go.mod h1:R/s4gKT0V/cWEnbQa9taNRJNbWUK57/Dx6cPj6MD3A0= | ||||||
| k8s.io/apiextensions-apiserver v0.0.0-20190927042040-728319705b32 h1:ss1T2mi6o+ji42DAoFxrophF9dysSKUXyq6fTmCMvFI= | k8s.io/apiextensions-apiserver v0.0.0-20191121021419-88daf26ec3b8 h1:SrFLwOURsuwzuCi0zJdaBbPF31AcV9JUwpwIVosnnE4= | ||||||
| k8s.io/apiextensions-apiserver v0.0.0-20190927042040-728319705b32/go.mod h1:SMmFyjBO4fGs1v/nrTzNbhyg4PEGUH+h3ilWsi90RPk= | k8s.io/apiextensions-apiserver v0.0.0-20191121021419-88daf26ec3b8/go.mod h1:NMIy5Wa/or8CsLhYRleOp9CWAHVdcWpzT6Ufx1SNVjA= | ||||||
| k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= | k8s.io/apimachinery v0.0.0-20190313205120-d7deff9243b1/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= | ||||||
| k8s.io/apimachinery v0.0.0-20190923155427-ec87dd743e08/go.mod h1:grJJH0hgilA2pYoUiJcPu2EDUal95NTq1vpxxvMLSu8= | k8s.io/apimachinery v0.0.0-20190404173353-6a84e37a896d/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= | ||||||
| k8s.io/apimachinery v0.0.0-20190925235427-62598f38f24e/go.mod h1:grJJH0hgilA2pYoUiJcPu2EDUal95NTq1vpxxvMLSu8= | k8s.io/apimachinery v0.0.0-20191121015412-41065c7a8c2a h1:9V03T5lHv/iF4fSgvMCd+iB86AgEgmzLpheMqIJy7hs= | ||||||
| k8s.io/apimachinery v0.0.0-20190927035529-0104e33c351d h1:oYLB5Nk2IOm17BHdatnaWAgzNGzq/5dlWy7Bzo5Htdc= | k8s.io/apimachinery v0.0.0-20191121015412-41065c7a8c2a/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= | ||||||
| k8s.io/apimachinery v0.0.0-20190927035529-0104e33c351d/go.mod h1:grJJH0hgilA2pYoUiJcPu2EDUal95NTq1vpxxvMLSu8= | k8s.io/apiserver v0.0.0-20191121020624-6eed2f5a3289/go.mod h1:7P+0qMKoaggchirHLUSCVD22ohdkjN19+qQOKcAdfbI= | ||||||
| k8s.io/apiserver v0.0.0-20190927000204-dd401ce564d5/go.mod h1:oXS8tPljvXCBPjzDnAM7xnx26pzwFT+oIqIUCmG8Pj8= | k8s.io/client-go v0.0.0-20191121015835-571c0ef67034 h1:+/ppGIi1rJThJAz/xJSSOuD82gb6E5jRv2305MSznxQ= | ||||||
| k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90 h1:mLmhKUm1X+pXu0zXMEzNsOF5E2kKFGe5o6BZBIIqA6A= | k8s.io/client-go v0.0.0-20191121015835-571c0ef67034/go.mod h1:Adhj+OyDRsEXTnL9BfL7xbLWGWMCqGLWpMqGHkZI4J8= | ||||||
| k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= |  | ||||||
| k8s.io/client-go v0.0.0-20190925235746-07054768d98d/go.mod h1:KumMj5rt+3qCPy5LJipGocsmMx6RW8vdDAs8QNK6jvU= |  | ||||||
| k8s.io/client-go v0.0.0-20190926235751-95884bf844a9 h1:YpRGAa4i68p7SGIuJAaZgE7oumAMxzsTux2gTur2eMM= |  | ||||||
| k8s.io/client-go v0.0.0-20190926235751-95884bf844a9/go.mod h1:KumMj5rt+3qCPy5LJipGocsmMx6RW8vdDAs8QNK6jvU= |  | ||||||
| k8s.io/client-go v11.0.0+incompatible h1:LBbX2+lOwY9flffWlJM7f1Ct8V2SRNiMRDFeiwnJo9o= | k8s.io/client-go v11.0.0+incompatible h1:LBbX2+lOwY9flffWlJM7f1Ct8V2SRNiMRDFeiwnJo9o= | ||||||
| k8s.io/client-go v11.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= | k8s.io/client-go v11.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= | ||||||
| k8s.io/code-generator v0.0.0-20190925195306-32dfb485ddce/go.mod h1:4MfOrxyyZxxCuenwsdaJRtoSnOP5T13jE2LRYPZ6KeY= | k8s.io/code-generator v0.0.0-20191121015212-c4c8f8345c7e h1:HB9Zu5ZUvJfNpLiTPhz+CebVKV8C39qTBMQkAgAZLNw= | ||||||
| k8s.io/code-generator v0.0.0-20190927075303-016f2b3d74d0 h1:rhwEVFHoBm42V0b7yN9SUdbWzfCVndLzRV8YGIi0uWY= | k8s.io/code-generator v0.0.0-20191121015212-c4c8f8345c7e/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= | ||||||
| k8s.io/code-generator v0.0.0-20190927075303-016f2b3d74d0/go.mod h1:4MfOrxyyZxxCuenwsdaJRtoSnOP5T13jE2LRYPZ6KeY= | k8s.io/component-base v0.0.0-20191121020327-771114ba3383/go.mod h1:tv9ITs6VEFWkF+kHwY4GiFvDr9vUGKJ4X/8+Z+oqVLk= | ||||||
| k8s.io/component-base v0.0.0-20190926082537-804254d56004/go.mod h1:+sedDd0Yj/9lFSZjan8FdX4Jednr2we+Q0ZDeicbKSc= |  | ||||||
| k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= | k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= | ||||||
| k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= | k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= | ||||||
| k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= | k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= | ||||||
| k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | ||||||
| k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | ||||||
| k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= | k8s.io/klog v0.3.3/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | ||||||
| k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= | k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= | ||||||
| k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= | k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= | ||||||
| k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf h1:EYm5AW/UUDbnmnI+gK0TJDVK9qPLhM+sRHYanNKw0EQ= | k8s.io/kube-openapi v0.0.0-20190603182131-db7b694dc208/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= | ||||||
| k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= | k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU= | ||||||
| k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= | k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= | ||||||
| k8s.io/utils v0.0.0-20190920012459-5008bf6f8cd6 h1:rfepARh/ECp66dk9TTmT//1PBkHffjnxhdOrgH4m+eA= | k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo= | ||||||
| k8s.io/utils v0.0.0-20190920012459-5008bf6f8cd6/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= | k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= | ||||||
| modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= | modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= | ||||||
| modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= | modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= | ||||||
| modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= | modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= | ||||||
| modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= | modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= | ||||||
| modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= | modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= | ||||||
|  | sigs.k8s.io/kind v0.5.1 h1:BYnHEJ9DC+0Yjlyyehqd3xnKtEmFdLKU8QxqOqvQzdw= | ||||||
|  | sigs.k8s.io/kind v0.5.1/go.mod h1:L+Kcoo83/D1+ryU5P2VFbvYm0oqbkJn9zTZq0KNxW68= | ||||||
|  | sigs.k8s.io/kustomize/v3 v3.1.1-0.20190821175718-4b67a6de1296 h1:iQaIG5Dq+3qSiaFrJ/l/0MjjxKmdwyVNpKRYJwUe/+0= | ||||||
|  | sigs.k8s.io/kustomize/v3 v3.1.1-0.20190821175718-4b67a6de1296/go.mod h1:ztX4zYc/QIww3gSripwF7TBOarBTm5BvyAMem0kCzOE= | ||||||
| sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= | sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= | ||||||
| sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= | sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= | ||||||
| sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= | sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= | ||||||
| sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | ||||||
|  |  | ||||||
|  | @ -53,9 +53,9 @@ spec: | ||||||
|     - hostssl all all 0.0.0.0/0 md5 |     - hostssl all all 0.0.0.0/0 md5 | ||||||
|     - host    all all 0.0.0.0/0 md5 |     - host    all all 0.0.0.0/0 md5 | ||||||
| #    slots: | #    slots: | ||||||
| #     - permanent_physical_1: | #      permanent_physical_1: | ||||||
| #        type: physical | #        type: physical | ||||||
| #     - permanent_logical_1: | #      permanent_logical_1: | ||||||
| #        type: logical | #        type: logical | ||||||
| #        database: foo | #        database: foo | ||||||
| #        plugin: pgoutput | #        plugin: pgoutput | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ data: | ||||||
|   cluster_labels: application:spilo |   cluster_labels: application:spilo | ||||||
|   cluster_name_label: version |   cluster_name_label: version | ||||||
|   # custom_service_annotations: "keyx:valuez,keya:valuea" |   # custom_service_annotations: "keyx:valuez,keya:valuea" | ||||||
|   # custom_pod_annotations: "keya:valuea" |   # custom_pod_annotations: "keya:valuea,keyb:valueb" | ||||||
|   db_hosted_zone: db.example.com |   db_hosted_zone: db.example.com | ||||||
|   debug_logging: "true" |   debug_logging: "true" | ||||||
|   # default_cpu_limit: "3" |   # default_cpu_limit: "3" | ||||||
|  | @ -21,14 +21,15 @@ data: | ||||||
|   # default_memory_request: 100Mi |   # default_memory_request: 100Mi | ||||||
|   docker_image: registry.opensource.zalan.do/acid/spilo-11:1.6-p1 |   docker_image: registry.opensource.zalan.do/acid/spilo-11:1.6-p1 | ||||||
|   # enable_admin_role_for_users: "true" |   # enable_admin_role_for_users: "true" | ||||||
|  |   # enable_crd_validation: "true" | ||||||
|   # enable_database_access: "true" |   # enable_database_access: "true" | ||||||
|   enable_init_containers: "false" |   # enable_init_containers: "true" | ||||||
|   enable_master_load_balancer: "false" |   enable_master_load_balancer: "false" | ||||||
|   # enable_pod_antiaffinity: "false" |   # enable_pod_antiaffinity: "false" | ||||||
|   # enable_pod_disruption_budget: "true" |   # enable_pod_disruption_budget: "true" | ||||||
|   enable_replica_load_balancer: "false" |   enable_replica_load_balancer: "false" | ||||||
|   # enable_shm_volume: "true" |   # enable_shm_volume: "true" | ||||||
|   enable_sidecars: "false" |   # enable_sidecars: "true" | ||||||
|   # enable_team_superuser: "false" |   # enable_team_superuser: "false" | ||||||
|   enable_teams_api: "false" |   enable_teams_api: "false" | ||||||
|   # etcd_host: "" |   # etcd_host: "" | ||||||
|  | @ -43,7 +44,7 @@ data: | ||||||
|   # logical_backup_s3_secret_access_key: "" |   # logical_backup_s3_secret_access_key: "" | ||||||
|   # logical_backup_s3_sse: "AES256" |   # logical_backup_s3_sse: "AES256" | ||||||
|   # logical_backup_schedule: "30 00 * * *" |   # logical_backup_schedule: "30 00 * * *" | ||||||
|   master_dns_name_format: "{cluster}.{team}.staging.{hostedzone}" |   master_dns_name_format: "{cluster}.{team}.{hostedzone}" | ||||||
|   # master_pod_move_timeout: 10m |   # master_pod_move_timeout: 10m | ||||||
|   # max_instances: "-1" |   # max_instances: "-1" | ||||||
|   # min_instances: "-1" |   # min_instances: "-1" | ||||||
|  | @ -66,11 +67,11 @@ data: | ||||||
|   ready_wait_interval: 3s |   ready_wait_interval: 3s | ||||||
|   ready_wait_timeout: 30s |   ready_wait_timeout: 30s | ||||||
|   repair_period: 5m |   repair_period: 5m | ||||||
|   replica_dns_name_format: "{cluster}-repl.{team}.staging.{hostedzone}" |   replica_dns_name_format: "{cluster}-repl.{team}.{hostedzone}" | ||||||
|   replication_username: standby |   replication_username: standby | ||||||
|   resource_check_interval: 3s |   resource_check_interval: 3s | ||||||
|   resource_check_timeout: 10m |   resource_check_timeout: 10m | ||||||
|   resync_period: 5m |   resync_period: 30m | ||||||
|   ring_log_lines: "100" |   ring_log_lines: "100" | ||||||
|   secret_name_template: "{username}.{cluster}.credentials" |   secret_name_template: "{username}.{cluster}.credentials" | ||||||
|   # sidecar_docker_images: "" |   # sidecar_docker_images: "" | ||||||
|  |  | ||||||
|  | @ -0,0 +1,280 @@ | ||||||
|  | apiVersion: apiextensions.k8s.io/v1beta1 | ||||||
|  | kind: CustomResourceDefinition | ||||||
|  | metadata: | ||||||
|  |   name: operatorconfigurations.acid.zalan.do | ||||||
|  | spec: | ||||||
|  |   group: acid.zalan.do | ||||||
|  |   names: | ||||||
|  |     kind: OperatorConfiguration | ||||||
|  |     listKind: OperatorConfigurationList | ||||||
|  |     plural: operatorconfigurations | ||||||
|  |     singular: operatorconfiguration | ||||||
|  |     shortNames: | ||||||
|  |     - opconfig | ||||||
|  |   scope: Namespaced | ||||||
|  |   subresources: | ||||||
|  |     status: {} | ||||||
|  |   version: v1 | ||||||
|  |   validation: | ||||||
|  |     openAPIV3Schema: | ||||||
|  |       type: object | ||||||
|  |       required: | ||||||
|  |         - kind | ||||||
|  |         - apiVersion | ||||||
|  |         - configuration | ||||||
|  |       properties: | ||||||
|  |         kind: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - OperatorConfiguration | ||||||
|  |         apiVersion: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - acid.zalan.do/v1 | ||||||
|  |         configuration: | ||||||
|  |           type: object | ||||||
|  |           properties: | ||||||
|  |             docker_image: | ||||||
|  |               type: string | ||||||
|  |             enable_crd_validation: | ||||||
|  |               type: boolean | ||||||
|  |             enable_shm_volume: | ||||||
|  |               type: boolean | ||||||
|  |             etcd_host: | ||||||
|  |               type: string | ||||||
|  |             max_instances: | ||||||
|  |               type: integer | ||||||
|  |               minimum: -1  # -1 = disabled | ||||||
|  |             min_instances: | ||||||
|  |               type: integer | ||||||
|  |               minimum: -1  # -1 = disabled | ||||||
|  |             resync_period: | ||||||
|  |               type: string | ||||||
|  |             repair_period: | ||||||
|  |               type: string | ||||||
|  |             set_memory_request_to_limit: | ||||||
|  |               type: boolean | ||||||
|  |             sidecar_docker_images: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: string | ||||||
|  |             workers: | ||||||
|  |               type: integer | ||||||
|  |               minimum: 1 | ||||||
|  |             users: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 replication_username: | ||||||
|  |                    type: string | ||||||
|  |                 super_username: | ||||||
|  |                    type: string | ||||||
|  |             kubernetes: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 cluster_domain: | ||||||
|  |                   type: string | ||||||
|  |                 cluster_labels: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 cluster_name_label: | ||||||
|  |                   type: string | ||||||
|  |                 custom_pod_annotations: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 enable_init_containers: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_pod_antiaffinity: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_pod_disruption_budget: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_sidecars: | ||||||
|  |                   type: boolean | ||||||
|  |                 infrastructure_roles_secret_name: | ||||||
|  |                   type: string | ||||||
|  |                 inherited_labels: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 node_readiness_label: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 oauth_token_secret_name: | ||||||
|  |                   type: string | ||||||
|  |                 pdb_name_format: | ||||||
|  |                   type: string | ||||||
|  |                 pod_antiaffinity_topology_key: | ||||||
|  |                   type: string | ||||||
|  |                 pod_environment_configmap: | ||||||
|  |                   type: string | ||||||
|  |                 pod_management_policy: | ||||||
|  |                   type: string | ||||||
|  |                   enum: | ||||||
|  |                     - "ordered_ready" | ||||||
|  |                     - "parallel" | ||||||
|  |                 pod_role_label: | ||||||
|  |                   type: string | ||||||
|  |                 pod_service_account_name: | ||||||
|  |                   type: string | ||||||
|  |                 pod_terminate_grace_period: | ||||||
|  |                   type: string | ||||||
|  |                 secret_name_template: | ||||||
|  |                   type: string | ||||||
|  |                 spilo_fsgroup: | ||||||
|  |                   type: integer | ||||||
|  |                 spilo_privileged: | ||||||
|  |                   type: boolean | ||||||
|  |                 toleration: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 watched_namespace: | ||||||
|  |                   type: string | ||||||
|  |             postgres_pod_resources: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 default_cpu_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 default_cpu_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 default_memory_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                 default_memory_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |             timeouts: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 pod_label_wait_timeout: | ||||||
|  |                   type: string | ||||||
|  |                 pod_deletion_wait_timeout: | ||||||
|  |                   type: string | ||||||
|  |                 ready_wait_interval: | ||||||
|  |                   type: string | ||||||
|  |                 ready_wait_timeout: | ||||||
|  |                   type: string | ||||||
|  |                 resource_check_interval: | ||||||
|  |                   type: string | ||||||
|  |                 resource_check_timeout: | ||||||
|  |                   type: string | ||||||
|  |             load_balancer: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 db_hosted_zone: | ||||||
|  |                   type: string | ||||||
|  |                 enable_master_load_balancer: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_replica_load_balancer: | ||||||
|  |                   type: boolean | ||||||
|  |                 custom_service_annotations: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 master_dns_name_format: | ||||||
|  |                   type: string | ||||||
|  |                 replica_dns_name_format: | ||||||
|  |                   type: string | ||||||
|  |             aws_or_gcp: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 additional_secret_mount: | ||||||
|  |                   type: string | ||||||
|  |                 additional_secret_mount_path: | ||||||
|  |                   type: string | ||||||
|  |                 aws_region: | ||||||
|  |                   type: string | ||||||
|  |                 kube_iam_role: | ||||||
|  |                   type: string | ||||||
|  |                 log_s3_bucket: | ||||||
|  |                   type: string | ||||||
|  |                 wal_s3_bucket: | ||||||
|  |                   type: string | ||||||
|  |             logical_backup: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 logical_backup_schedule: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' | ||||||
|  |                 logical_backup_docker_image: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_bucket: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_endpoint: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_sse: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_access_key_id: | ||||||
|  |                   type: string | ||||||
|  |                 logical_backup_s3_secret_access_key: | ||||||
|  |                   type: string | ||||||
|  |             debug: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 debug_logging: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_database_access: | ||||||
|  |                   type: boolean | ||||||
|  |             teams_api: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 enable_admin_role_for_users: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_team_superuser: | ||||||
|  |                   type: boolean | ||||||
|  |                 enable_teams_api: | ||||||
|  |                   type: boolean | ||||||
|  |                 pam_configuration: | ||||||
|  |                   type: string | ||||||
|  |                 pam_role_name: | ||||||
|  |                   type: string | ||||||
|  |                 postgres_superuser_teams: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 protected_role_names: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 team_admin_role: | ||||||
|  |                   type: string | ||||||
|  |                 team_api_role_configuration: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 teams_api_url: | ||||||
|  |                   type: string | ||||||
|  |             logging_rest_api: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 api_port: | ||||||
|  |                   type: integer | ||||||
|  |                 cluster_history_entries: | ||||||
|  |                   type: integer | ||||||
|  |                 ring_log_lines: | ||||||
|  |                   type: integer | ||||||
|  |             scalyr: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 scalyr_api_key: | ||||||
|  |                   type: string | ||||||
|  |                 scalyr_cpu_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 scalyr_cpu_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||||
|  |                 scalyr_image: | ||||||
|  |                   type: string | ||||||
|  |                 scalyr_memory_limit: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                 scalyr_memory_request: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                 scalyr_server_url: | ||||||
|  |                   type: string | ||||||
|  | @ -3,6 +3,7 @@ kind: OperatorConfiguration | ||||||
| metadata: | metadata: | ||||||
|   name: postgresql-operator-default-configuration |   name: postgresql-operator-default-configuration | ||||||
| configuration: | configuration: | ||||||
|  |   # enable_crd_validation: true | ||||||
|   etcd_host: "" |   etcd_host: "" | ||||||
|   docker_image: registry.opensource.zalan.do/acid/spilo-11:1.6-p1 |   docker_image: registry.opensource.zalan.do/acid/spilo-11:1.6-p1 | ||||||
|   # enable_shm_volume: true |   # enable_shm_volume: true | ||||||
|  | @ -25,28 +26,29 @@ configuration: | ||||||
|     # custom_pod_annotations: |     # custom_pod_annotations: | ||||||
|     #   keya: valuea |     #   keya: valuea | ||||||
|     #   keyb: valueb |     #   keyb: valueb | ||||||
|     enable_init_containers: false |     enable_init_containers: true | ||||||
|     enable_pod_antiaffinity: false |     enable_pod_antiaffinity: false | ||||||
|     enable_pod_disruption_budget: true |     enable_pod_disruption_budget: true | ||||||
|     enable_sidecars: false |     enable_sidecars: true | ||||||
|     # infrastructure_roles_secret_name: "" |     # infrastructure_roles_secret_name: "postgresql-infrastructure-roles" | ||||||
|     # inherited_labels: |     # inherited_labels: | ||||||
|     # - application |     # - application | ||||||
|     # - environment |     # - environment | ||||||
|     # node_readiness_label: "" |     # node_readiness_label: | ||||||
|  |     #  status: ready | ||||||
|     oauth_token_secret_name: postgresql-operator |     oauth_token_secret_name: postgresql-operator | ||||||
|     pdb_name_format: "postgres-{cluster}-pdb" |     pdb_name_format: "postgres-{cluster}-pdb" | ||||||
|     pod_antiaffinity_topology_key: "kubernetes.io/hostname" |     pod_antiaffinity_topology_key: "kubernetes.io/hostname" | ||||||
|     # pod_environment_configmap: "" |     # pod_environment_configmap: "" | ||||||
|     pod_management_policy: "ordered_ready" |     pod_management_policy: "ordered_ready" | ||||||
|     pod_role_label: spilo-role |     pod_role_label: spilo-role | ||||||
|     pod_service_account_name: operator |     pod_service_account_name: zalando-postgres-operator | ||||||
|     pod_terminate_grace_period: 5m |     pod_terminate_grace_period: 5m | ||||||
|     secret_name_template: "{username}.{cluster}.credentials.{tprkind}.{tprgroup}" |     secret_name_template: "{username}.{cluster}.credentials.{tprkind}.{tprgroup}" | ||||||
|     # spilo_fsgroup: 103 |     # spilo_fsgroup: 103 | ||||||
|     spilo_privileged: false |     spilo_privileged: false | ||||||
|     # toleration: {} |     # toleration: {} | ||||||
|     # watched_namespace:"" |     # watched_namespace: "" | ||||||
|   postgres_pod_resources: |   postgres_pod_resources: | ||||||
|     default_cpu_limit: "3" |     default_cpu_limit: "3" | ||||||
|     default_cpu_request: 100m |     default_cpu_request: 100m | ||||||
|  | @ -76,7 +78,6 @@ configuration: | ||||||
|     # log_s3_bucket: "" |     # log_s3_bucket: "" | ||||||
|     # wal_s3_bucket: "" |     # wal_s3_bucket: "" | ||||||
|   logical_backup: |   logical_backup: | ||||||
|     log_s3_bucket: "" |  | ||||||
|     logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" |     logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" | ||||||
|     logical_backup_s3_access_key_id: "" |     logical_backup_s3_access_key_id: "" | ||||||
|     logical_backup_s3_bucket: "my-bucket-url" |     logical_backup_s3_bucket: "my-bucket-url" | ||||||
|  | @ -93,7 +94,8 @@ configuration: | ||||||
|     enable_teams_api: false |     enable_teams_api: false | ||||||
|     # pam_configuration: "" |     # pam_configuration: "" | ||||||
|     pam_role_name: zalandos |     pam_role_name: zalandos | ||||||
|     # postgres_superuser_teams: "postgres_superusers" |     # postgres_superuser_teams: | ||||||
|  |     # - postgres_superusers | ||||||
|     protected_role_names: |     protected_role_names: | ||||||
|     - admin |     - admin | ||||||
|     team_admin_role: admin |     team_admin_role: admin | ||||||
|  |  | ||||||
|  | @ -0,0 +1,327 @@ | ||||||
|  | apiVersion: apiextensions.k8s.io/v1beta1 | ||||||
|  | kind: CustomResourceDefinition | ||||||
|  | metadata: | ||||||
|  |   name: postgresqls.acid.zalan.do | ||||||
|  | spec: | ||||||
|  |   group: acid.zalan.do | ||||||
|  |   names: | ||||||
|  |     kind: postgresql | ||||||
|  |     listKind: postgresqlList | ||||||
|  |     plural: postgresqls | ||||||
|  |     singular: postgresql | ||||||
|  |     shortNames: | ||||||
|  |     - pg | ||||||
|  |   scope: Namespaced | ||||||
|  |   subresources: | ||||||
|  |     status: {} | ||||||
|  |   version: v1 | ||||||
|  |   validation: | ||||||
|  |     openAPIV3Schema: | ||||||
|  |       type: object | ||||||
|  |       required: | ||||||
|  |         - kind | ||||||
|  |         - apiVersion | ||||||
|  |         - spec | ||||||
|  |       properties: | ||||||
|  |         kind: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - postgresql | ||||||
|  |         apiVersion: | ||||||
|  |           type: string | ||||||
|  |           enum: | ||||||
|  |             - acid.zalan.do/v1 | ||||||
|  |         spec: | ||||||
|  |           type: object | ||||||
|  |           required: | ||||||
|  |             - numberOfInstances | ||||||
|  |             - teamId | ||||||
|  |             - postgresql | ||||||
|  |           properties: | ||||||
|  |             allowedSourceRanges: | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: string | ||||||
|  |                 pattern: '^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\/(\d|[1-2]\d|3[0-2])$' | ||||||
|  |             clone: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - cluster | ||||||
|  |               properties: | ||||||
|  |                 cluster: | ||||||
|  |                   type: string | ||||||
|  |                 s3_endpoint: | ||||||
|  |                   type: string | ||||||
|  |                 s3_access_key_id: | ||||||
|  |                   type: string | ||||||
|  |                 s3_secret_access_key: | ||||||
|  |                   type: string | ||||||
|  |                 s3_force_path_style: | ||||||
|  |                   type: string | ||||||
|  |                 s3_wal_path: | ||||||
|  |                   type: string | ||||||
|  |                 timestamp: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|([+-]([01][0-9]|2[0-3]):[0-5][0-9]))$' | ||||||
|  |                   # The regexp matches the date-time format (RFC 3339 Section 5.6) that specifies a timezone as an offset relative to UTC | ||||||
|  |                   # Example: 1996-12-19T16:39:57-08:00 | ||||||
|  |                   # Note: this field requires a timezone | ||||||
|  |                 uid: | ||||||
|  |                   format: uuid | ||||||
|  |                   type: string | ||||||
|  |             databases: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: string | ||||||
|  |               # Note: usernames specified here as database owners must be declared in the users key of the spec key. | ||||||
|  |             dockerImage: | ||||||
|  |               type: string | ||||||
|  |             enableLogicalBackup: | ||||||
|  |               type: boolean | ||||||
|  |             enableMasterLoadBalancer: | ||||||
|  |               type: boolean | ||||||
|  |             enableReplicaLoadBalancer: | ||||||
|  |               type: boolean | ||||||
|  |             enableShmVolume: | ||||||
|  |               type: boolean | ||||||
|  |             init_containers:  # deprecated | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 additionalProperties: true | ||||||
|  |             initContainers: | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 additionalProperties: true | ||||||
|  |             logicalBackupSchedule: | ||||||
|  |               type: string | ||||||
|  |               pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' | ||||||
|  |             maintenanceWindows: | ||||||
|  |               type: array | ||||||
|  |               items: | ||||||
|  |                 type: string | ||||||
|  |                 pattern: '^\ *((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))-((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))\ *$' | ||||||
|  |             numberOfInstances: | ||||||
|  |               type: integer | ||||||
|  |               minimum: 0 | ||||||
|  |             patroni: | ||||||
|  |               type: object | ||||||
|  |               properties: | ||||||
|  |                 initdb: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |                 pg_hba: | ||||||
|  |                   type: array | ||||||
|  |                   items: | ||||||
|  |                     type: string | ||||||
|  |                 slots: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: object | ||||||
|  |                     additionalProperties: | ||||||
|  |                       type: string | ||||||
|  |                 ttl: | ||||||
|  |                   type: integer | ||||||
|  |                 loop_wait: | ||||||
|  |                   type: integer | ||||||
|  |                 retry_timeout: | ||||||
|  |                   type: integer | ||||||
|  |                 maximum_lag_on_failover: | ||||||
|  |                   type: integer | ||||||
|  |             podAnnotations: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: string | ||||||
|  |             pod_priority_class_name:  # deprecated | ||||||
|  |               type: string | ||||||
|  |             podPriorityClassName: | ||||||
|  |               type: string | ||||||
|  |             postgresql: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - version | ||||||
|  |               properties: | ||||||
|  |                 version: | ||||||
|  |                   type: string | ||||||
|  |                   enum: | ||||||
|  |                     - "9.3" | ||||||
|  |                     - "9.4" | ||||||
|  |                     - "9.5" | ||||||
|  |                     - "9.6" | ||||||
|  |                     - "10" | ||||||
|  |                     - "11" | ||||||
|  |                     - "12" | ||||||
|  |                 parameters: | ||||||
|  |                   type: object | ||||||
|  |                   additionalProperties: | ||||||
|  |                     type: string | ||||||
|  |             replicaLoadBalancer:  # deprecated | ||||||
|  |               type: boolean | ||||||
|  |             resources: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - requests | ||||||
|  |                 - limits | ||||||
|  |               properties: | ||||||
|  |                 limits: | ||||||
|  |                   type: object | ||||||
|  |                   required: | ||||||
|  |                     - cpu | ||||||
|  |                     - memory | ||||||
|  |                   properties: | ||||||
|  |                     cpu: | ||||||
|  |                       type: string | ||||||
|  |                       # Decimal natural followed by m, or decimal natural followed by | ||||||
|  |                       # dot followed by up to three decimal digits. | ||||||
|  |                       # | ||||||
|  |                       # This is because the Kubernetes CPU resource has millis as the | ||||||
|  |                       # maximum precision.  The actual values are checked in code | ||||||
|  |                       # because the regular expression would be huge and horrible and | ||||||
|  |                       # not very helpful in validation error messages; this one checks | ||||||
|  |                       # only the format of the given number. | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu | ||||||
|  |                       pattern: '^(\d+m|\d+\.\d{1,3})$' | ||||||
|  |                       # Note: the value specified here must not be zero or be lower | ||||||
|  |                       # than the corresponding request. | ||||||
|  |                     memory: | ||||||
|  |                       type: string | ||||||
|  |                       # You can express memory as a plain integer or as a fixed-point | ||||||
|  |                       # integer using one of these suffixes: E, P, T, G, M, k. You can | ||||||
|  |                       # also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory | ||||||
|  |                       pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                       # Note: the value specified here must not be zero or be lower | ||||||
|  |                       # than the corresponding request. | ||||||
|  |                 requests: | ||||||
|  |                   type: object | ||||||
|  |                   required: | ||||||
|  |                     - cpu | ||||||
|  |                     - memory | ||||||
|  |                   properties: | ||||||
|  |                     cpu: | ||||||
|  |                       type: string | ||||||
|  |                       # Decimal natural followed by m, or decimal natural followed by | ||||||
|  |                       # dot followed by up to three decimal digits. | ||||||
|  |                       # | ||||||
|  |                       # This is because the Kubernetes CPU resource has millis as the | ||||||
|  |                       # maximum precision.  The actual values are checked in code | ||||||
|  |                       # because the regular expression would be huge and horrible and | ||||||
|  |                       # not very helpful in validation error messages; this one checks | ||||||
|  |                       # only the format of the given number. | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu | ||||||
|  |                       pattern: '^(\d+m|\d+\.\d{1,3})$' | ||||||
|  |                       # Note: the value specified here must not be zero or be higher | ||||||
|  |                       # than the corresponding limit. | ||||||
|  |                     memory: | ||||||
|  |                       type: string | ||||||
|  |                       # You can express memory as a plain integer or as a fixed-point | ||||||
|  |                       # integer using one of these suffixes: E, P, T, G, M, k. You can | ||||||
|  |                       # also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki | ||||||
|  |                       # | ||||||
|  |                       # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory | ||||||
|  |                       pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                       # Note: the value specified here must not be zero or be higher | ||||||
|  |                       # than the corresponding limit. | ||||||
|  |             sidecars: | ||||||
|  |               type: array | ||||||
|  |               nullable: true | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 additionalProperties: true | ||||||
|  |             spiloFSGroup: | ||||||
|  |               type: integer | ||||||
|  |             standby: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - s3_wal_path | ||||||
|  |               properties: | ||||||
|  |                 s3_wal_path: | ||||||
|  |                   type: string | ||||||
|  |             teamId: | ||||||
|  |               type: string | ||||||
|  |             tolerations: | ||||||
|  |               type: array | ||||||
|  |               items: | ||||||
|  |                 type: object | ||||||
|  |                 required: | ||||||
|  |                   - key | ||||||
|  |                   - operator | ||||||
|  |                   - effect | ||||||
|  |                 properties: | ||||||
|  |                   key: | ||||||
|  |                     type: string | ||||||
|  |                   operator: | ||||||
|  |                     type: string | ||||||
|  |                     enum: | ||||||
|  |                       - Equal | ||||||
|  |                       - Exists | ||||||
|  |                   value: | ||||||
|  |                     type: string | ||||||
|  |                   effect: | ||||||
|  |                     type: string | ||||||
|  |                     enum: | ||||||
|  |                       - NoExecute | ||||||
|  |                       - NoSchedule | ||||||
|  |                       - PreferNoSchedule | ||||||
|  |                   tolerationSeconds: | ||||||
|  |                     type: integer | ||||||
|  |             useLoadBalancer:  # deprecated | ||||||
|  |               type: boolean | ||||||
|  |             users: | ||||||
|  |               type: object | ||||||
|  |               additionalProperties: | ||||||
|  |                 type: array | ||||||
|  |                 nullable: true | ||||||
|  |                 description: "Role flags specified here must not contradict each other" | ||||||
|  |                 items: | ||||||
|  |                   type: string | ||||||
|  |                   enum: | ||||||
|  |                   - bypassrls | ||||||
|  |                   - BYPASSRLS | ||||||
|  |                   - nobypassrls | ||||||
|  |                   - NOBYPASSRLS | ||||||
|  |                   - createdb | ||||||
|  |                   - CREATEDB | ||||||
|  |                   - nocreatedb | ||||||
|  |                   - NOCREATEDB | ||||||
|  |                   - createrole | ||||||
|  |                   - CREATEROLE | ||||||
|  |                   - nocreaterole | ||||||
|  |                   - NOCREATEROLE | ||||||
|  |                   - inherit | ||||||
|  |                   - INHERIT | ||||||
|  |                   - noinherit | ||||||
|  |                   - NOINHERIT | ||||||
|  |                   - login | ||||||
|  |                   - LOGIN | ||||||
|  |                   - nologin | ||||||
|  |                   - NOLOGIN | ||||||
|  |                   - replication | ||||||
|  |                   - REPLICATION | ||||||
|  |                   - noreplication | ||||||
|  |                   - NOREPLICATION | ||||||
|  |                   - superuser | ||||||
|  |                   - SUPERUSER | ||||||
|  |                   - nosuperuser | ||||||
|  |                   - NOSUPERUSER | ||||||
|  |             volume: | ||||||
|  |               type: object | ||||||
|  |               required: | ||||||
|  |                 - size | ||||||
|  |               properties: | ||||||
|  |                 size: | ||||||
|  |                   type: string | ||||||
|  |                   pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||||
|  |                   # Note: the value specified here must not be zero. | ||||||
|  |                 storageClass: | ||||||
|  |                   type: string | ||||||
|  |                 subPath: | ||||||
|  |                   type: string | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" | 	acidzalando "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" | ||||||
| 	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" | 	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| ) | ) | ||||||
|  | @ -103,7 +103,908 @@ var OperatorConfigCRDResourceColumns = []apiextv1beta1.CustomResourceColumnDefin | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func buildCRD(name, kind, plural, short string, columns []apiextv1beta1.CustomResourceColumnDefinition) *apiextv1beta1.CustomResourceDefinition { | var min0 = 0.0 | ||||||
|  | var min1 = 1.0 | ||||||
|  | var minDisable = -1.0 | ||||||
|  | 
 | ||||||
|  | // PostgresCRDResourceValidation to check applied manifest parameters
 | ||||||
|  | var PostgresCRDResourceValidation = apiextv1beta1.CustomResourceValidation{ | ||||||
|  | 	OpenAPIV3Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 		Type:     "object", | ||||||
|  | 		Required: []string{"kind", "apiVersion", "spec"}, | ||||||
|  | 		Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 			"kind": { | ||||||
|  | 				Type: "string", | ||||||
|  | 				Enum: []apiextv1beta1.JSON{ | ||||||
|  | 					{ | ||||||
|  | 						Raw: []byte(`"postgresql"`), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			"apiVersion": { | ||||||
|  | 				Type: "string", | ||||||
|  | 				Enum: []apiextv1beta1.JSON{ | ||||||
|  | 					{ | ||||||
|  | 						Raw: []byte(`"acid.zalan.do/v1"`), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			"spec": { | ||||||
|  | 				Type:     "object", | ||||||
|  | 				Required: []string{"numberOfInstances", "teamId", "postgresql"}, | ||||||
|  | 				Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 					"allowedSourceRanges": { | ||||||
|  | 						Type:     "array", | ||||||
|  | 						Nullable: true, | ||||||
|  | 						Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\/(\\d|[1-2]\\d|3[0-2])$", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"clone": { | ||||||
|  | 						Type:     "object", | ||||||
|  | 						Required: []string{"cluster"}, | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"cluster": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"s3_endpoint": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"s3_access_key_id": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"s3_secret_access_key": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"s3_force_path_style": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"s3_wal_path": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"timestamp": { | ||||||
|  | 								Type:        "string", | ||||||
|  | 								Description: "Date-time format that specifies a timezone as an offset relative to UTC e.g. 1996-12-19T16:39:57-08:00", | ||||||
|  | 								Pattern:     "^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(([Zz])|([+-]([01][0-9]|2[0-3]):[0-5][0-9]))$", | ||||||
|  | 							}, | ||||||
|  | 							"uid": { | ||||||
|  | 								Type:   "string", | ||||||
|  | 								Format: "uuid", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"databases": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type:        "string", | ||||||
|  | 								Description: "User names specified here as database owners must be declared in the users key of the spec key", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"dockerImage": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"enableLogicalBackup": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"enableMasterLoadBalancer": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"enableReplicaLoadBalancer": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"enableShmVolume": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"init_containers": { | ||||||
|  | 						Type:        "array", | ||||||
|  | 						Description: "Deprecated", | ||||||
|  | 						Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Allows: true, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"initContainers": { | ||||||
|  | 						Type: "array", | ||||||
|  | 						Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Allows: true, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"logicalBackupSchedule": { | ||||||
|  | 						Type:    "string", | ||||||
|  | 						Pattern: "^(\\d+|\\*)(/\\d+)?(\\s+(\\d+|\\*)(/\\d+)?){4}$", | ||||||
|  | 					}, | ||||||
|  | 					"maintenanceWindows": { | ||||||
|  | 						Type: "array", | ||||||
|  | 						Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^\\ *((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\\d):([0-5]?\\d)|(2[0-3]|[01]?\\d):([0-5]?\\d))-((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\\d):([0-5]?\\d)|(2[0-3]|[01]?\\d):([0-5]?\\d))\\ *$", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"numberOfInstances": { | ||||||
|  | 						Type:    "integer", | ||||||
|  | 						Minimum: &min0, | ||||||
|  | 					}, | ||||||
|  | 					"patroni": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"initdb": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"pg_hba": { | ||||||
|  | 								Type: "array", | ||||||
|  | 								Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"slots": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "object", | ||||||
|  | 										AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 											Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 												Type: "string", | ||||||
|  | 											}, | ||||||
|  | 										}, | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"ttl": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 							"loop_wait": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 							"retry_timeout": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 							"maximum_lag_on_failover": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"podAnnotations": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"pod_priority_class_name": { | ||||||
|  | 						Type:        "string", | ||||||
|  | 						Description: "Deprecated", | ||||||
|  | 					}, | ||||||
|  | 					"podPriorityClassName": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"postgresql": { | ||||||
|  | 						Type:     "object", | ||||||
|  | 						Required: []string{"version"}, | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"version": { | ||||||
|  | 								Type: "string", | ||||||
|  | 								Enum: []apiextv1beta1.JSON{ | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"9.3"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"9.4"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"9.5"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"9.6"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"10"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"11"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"12"`), | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"parameters": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"replicaLoadBalancer": { | ||||||
|  | 						Type:        "boolean", | ||||||
|  | 						Description: "Deprecated", | ||||||
|  | 					}, | ||||||
|  | 					"resources": { | ||||||
|  | 						Type:     "object", | ||||||
|  | 						Required: []string{"requests", "limits"}, | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"limits": { | ||||||
|  | 								Type:     "object", | ||||||
|  | 								Required: []string{"cpu", "memory"}, | ||||||
|  | 								Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 									"cpu": { | ||||||
|  | 										Type:        "string", | ||||||
|  | 										Description: "Decimal natural followed by m, or decimal natural followed by dot followed by up to three decimal digits (precision used by Kubernetes). Must be greater than 0", | ||||||
|  | 										Pattern:     "^(\\d+m|\\d+\\.\\d{1,3})$", | ||||||
|  | 									}, | ||||||
|  | 									"memory": { | ||||||
|  | 										Type:        "string", | ||||||
|  | 										Description: "Plain integer or fixed-point integer using one of these suffixes: E, P, T, G, M, k (with or without a tailing i). Must be greater than 0", | ||||||
|  | 										Pattern:     "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"requests": { | ||||||
|  | 								Type:     "object", | ||||||
|  | 								Required: []string{"cpu", "memory"}, | ||||||
|  | 								Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 									"cpu": { | ||||||
|  | 										Type:        "string", | ||||||
|  | 										Description: "Decimal natural followed by m, or decimal natural followed by dot followed by up to three decimal digits (precision used by Kubernetes). Must be greater than 0", | ||||||
|  | 										Pattern:     "^(\\d+m|\\d+\\.\\d{1,3})$", | ||||||
|  | 									}, | ||||||
|  | 									"memory": { | ||||||
|  | 										Type:        "string", | ||||||
|  | 										Description: "Plain integer or fixed-point integer using one of these suffixes: E, P, T, G, M, k (with or without a tailing i). Must be greater than 0", | ||||||
|  | 										Pattern:     "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"sidecars": { | ||||||
|  | 						Type: "array", | ||||||
|  | 						Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Allows: true, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"spiloFSGroup": { | ||||||
|  | 						Type: "integer", | ||||||
|  | 					}, | ||||||
|  | 					"standby": { | ||||||
|  | 						Type:     "object", | ||||||
|  | 						Required: []string{"s3_wal_path"}, | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"s3_wal_path": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"teamId": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"tolerations": { | ||||||
|  | 						Type: "array", | ||||||
|  | 						Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type:     "object", | ||||||
|  | 								Required: []string{"key", "operator", "effect"}, | ||||||
|  | 								Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 									"key": { | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 									"operator": { | ||||||
|  | 										Type: "string", | ||||||
|  | 										Enum: []apiextv1beta1.JSON{ | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"Equal"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"Exists"`), | ||||||
|  | 											}, | ||||||
|  | 										}, | ||||||
|  | 									}, | ||||||
|  | 									"value": { | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 									"effect": { | ||||||
|  | 										Type: "string", | ||||||
|  | 										Enum: []apiextv1beta1.JSON{ | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NoExecute"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NoSchedule"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"PreferNoSchedule"`), | ||||||
|  | 											}, | ||||||
|  | 										}, | ||||||
|  | 									}, | ||||||
|  | 									"tolerationSeconds": { | ||||||
|  | 										Type: "integer", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"useLoadBalancer": { | ||||||
|  | 						Type:        "boolean", | ||||||
|  | 						Description: "Deprecated", | ||||||
|  | 					}, | ||||||
|  | 					"users": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type:        "array", | ||||||
|  | 								Description: "Role flags specified here must not contradict each other", | ||||||
|  | 								Nullable:    true, | ||||||
|  | 								Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 										Enum: []apiextv1beta1.JSON{ | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"bypassrls"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"BYPASSRLS"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"nobypassrls"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOBYPASSRLS"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"createdb"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"CREATEDB"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"nocreatedb"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOCREATEDB"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"createrole"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"CREATEROLE"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"nocreaterole"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOCREATEROLE"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"inherit"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"INHERIT"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"noinherit"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOINHERIT"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"login"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"LOGIN"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"nologin"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOLOGIN"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"replication"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"REPLICATION"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"noreplication"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOREPLICATION"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"superuser"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"SUPERUSER"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"nosuperuser"`), | ||||||
|  | 											}, | ||||||
|  | 											{ | ||||||
|  | 												Raw: []byte(`"NOSUPERUSER"`), | ||||||
|  | 											}, | ||||||
|  | 										}, | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"volume": { | ||||||
|  | 						Type:     "object", | ||||||
|  | 						Required: []string{"size"}, | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"size": { | ||||||
|  | 								Type:        "string", | ||||||
|  | 								Description: "Value must not be zero", | ||||||
|  | 								Pattern:     "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 							}, | ||||||
|  | 							"storageClass": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"subPath": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // OperatorConfigCRDResourceValidation to check applied manifest parameters
 | ||||||
|  | var OperatorConfigCRDResourceValidation = apiextv1beta1.CustomResourceValidation{ | ||||||
|  | 	OpenAPIV3Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 		Type:     "object", | ||||||
|  | 		Required: []string{"kind", "apiVersion", "configuration"}, | ||||||
|  | 		Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 			"kind": { | ||||||
|  | 				Type: "string", | ||||||
|  | 				Enum: []apiextv1beta1.JSON{ | ||||||
|  | 					{ | ||||||
|  | 						Raw: []byte(`"OperatorConfiguration"`), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			"apiVersion": { | ||||||
|  | 				Type: "string", | ||||||
|  | 				Enum: []apiextv1beta1.JSON{ | ||||||
|  | 					{ | ||||||
|  | 						Raw: []byte(`"acid.zalan.do/v1"`), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			"configuration": { | ||||||
|  | 				Type: "object", | ||||||
|  | 				Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 					"docker_image": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"enable_crd_validation": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"enable_shm_volume": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"etcd_host": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"max_instances": { | ||||||
|  | 						Type:        "integer", | ||||||
|  | 						Description: "-1 = disabled", | ||||||
|  | 						Minimum:     &minDisable, | ||||||
|  | 					}, | ||||||
|  | 					"min_instances": { | ||||||
|  | 						Type:        "integer", | ||||||
|  | 						Description: "-1 = disabled", | ||||||
|  | 						Minimum:     &minDisable, | ||||||
|  | 					}, | ||||||
|  | 					"resync_period": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"repair_period": { | ||||||
|  | 						Type: "string", | ||||||
|  | 					}, | ||||||
|  | 					"set_memory_request_to_limit": { | ||||||
|  | 						Type: "boolean", | ||||||
|  | 					}, | ||||||
|  | 					"sidecar_docker_images": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 							Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"workers": { | ||||||
|  | 						Type:    "integer", | ||||||
|  | 						Minimum: &min1, | ||||||
|  | 					}, | ||||||
|  | 					"users": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"replication_username": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"super_username": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"kubernetes": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"cluster_domain": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"cluster_labels": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"cluster_name_label": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"custom_pod_annotations": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"enable_init_containers": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_pod_antiaffinity": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_pod_disruption_budget": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_sidecars": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"infrastructure_roles_secret_name": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"inherited_labels": { | ||||||
|  | 								Type: "array", | ||||||
|  | 								Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"node_readiness_label": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"oauth_token_secret_name": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pdb_name_format": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pod_antiaffinity_topology_key": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pod_environment_configmap": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pod_management_policy": { | ||||||
|  | 								Type: "string", | ||||||
|  | 								Enum: []apiextv1beta1.JSON{ | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"ordered_ready"`), | ||||||
|  | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"parallel"`), | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"pod_role_label": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pod_service_account_name": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pod_terminate_grace_period": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"secret_name_template": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"spilo_fsgroup": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 							"spilo_privileged": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"toleration": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"watched_namespace": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"postgres_pod_resources": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"default_cpu_limit": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||||
|  | 							}, | ||||||
|  | 							"default_cpu_request": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||||
|  | 							}, | ||||||
|  | 							"default_memory_limit": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 							}, | ||||||
|  | 							"default_memory_request": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"timeouts": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"pod_label_wait_timeout": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pod_deletion_wait_timeout": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"ready_wait_interval": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"ready_wait_timeout": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"resource_check_interval": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"resource_check_timeout": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"load_balancer": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"db_hosted_zone": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"enable_master_load_balancer": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_replica_load_balancer": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"custom_service_annotations": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"master_dns_name_format": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"replica_dns_name_format": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"aws_or_gcp": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"additional_secret_mount": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"additional_secret_mount_path": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"aws_region": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"kube_iam_role": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"log_s3_bucket": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"wal_s3_bucket": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"logical_backup": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"logical_backup_schedule": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+|\\*)(/\\d+)?(\\s+(\\d+|\\*)(/\\d+)?){4}$", | ||||||
|  | 							}, | ||||||
|  | 							"logical_backup_docker_image": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"logical_backup_s3_bucket": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"logical_backup_s3_endpoint": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"logical_backup_s3_sse": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"logical_backup_s3_access_key_id": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"logical_backup_s3_secret_access_key": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"debug": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"debug_logging": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_database_access": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"teams_api": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"enable_admin_role_for_users": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_team_superuser": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"enable_teams_api": { | ||||||
|  | 								Type: "boolean", | ||||||
|  | 							}, | ||||||
|  | 							"pam_configuration": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"pam_role_name": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"postgres_superuser_teams": { | ||||||
|  | 								Type: "array", | ||||||
|  | 								Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"protected_role_names": { | ||||||
|  | 								Type: "array", | ||||||
|  | 								Items: &apiextv1beta1.JSONSchemaPropsOrArray{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"team_admin_role": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"team_api_role_configuration": { | ||||||
|  | 								Type: "object", | ||||||
|  | 								AdditionalProperties: &apiextv1beta1.JSONSchemaPropsOrBool{ | ||||||
|  | 									Schema: &apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 										Type: "string", | ||||||
|  | 									}, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 							"teams_api_url": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"logging_rest_api": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"api_port": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 							"cluster_history_entries": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 							"ring_log_lines": { | ||||||
|  | 								Type: "integer", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"scalyr": { | ||||||
|  | 						Type: "object", | ||||||
|  | 						Properties: map[string]apiextv1beta1.JSONSchemaProps{ | ||||||
|  | 							"scalyr_api_key": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"scalyr_cpu_limit": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||||
|  | 							}, | ||||||
|  | 							"scalyr_cpu_request": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||||
|  | 							}, | ||||||
|  | 							"scalyr_image": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 							"scalyr_memory_limit": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 							}, | ||||||
|  | 							"scalyr_memory_request": { | ||||||
|  | 								Type:    "string", | ||||||
|  | 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||||
|  | 							}, | ||||||
|  | 							"scalyr_server_url": { | ||||||
|  | 								Type: "string", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func buildCRD(name, kind, plural, short string, columns []apiextv1beta1.CustomResourceColumnDefinition, validation apiextv1beta1.CustomResourceValidation) *apiextv1beta1.CustomResourceDefinition { | ||||||
| 	return &apiextv1beta1.CustomResourceDefinition{ | 	return &apiextv1beta1.CustomResourceDefinition{ | ||||||
| 		ObjectMeta: metav1.ObjectMeta{ | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
| 			Name: name, | 			Name: name, | ||||||
|  | @ -121,24 +1022,39 @@ func buildCRD(name, kind, plural, short string, columns []apiextv1beta1.CustomRe | ||||||
| 				Status: &apiextv1beta1.CustomResourceSubresourceStatus{}, | 				Status: &apiextv1beta1.CustomResourceSubresourceStatus{}, | ||||||
| 			}, | 			}, | ||||||
| 			AdditionalPrinterColumns: columns, | 			AdditionalPrinterColumns: columns, | ||||||
|  | 			Validation:               &validation, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PostgresCRD returns CustomResourceDefinition built from PostgresCRDResource
 | // PostgresCRD returns CustomResourceDefinition built from PostgresCRDResource
 | ||||||
| func PostgresCRD() *apiextv1beta1.CustomResourceDefinition { | func PostgresCRD(enableValidation *bool) *apiextv1beta1.CustomResourceDefinition { | ||||||
|  | 	postgresCRDvalidation := apiextv1beta1.CustomResourceValidation{} | ||||||
|  | 
 | ||||||
|  | 	if enableValidation != nil && *enableValidation { | ||||||
|  | 		postgresCRDvalidation = PostgresCRDResourceValidation | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return buildCRD(PostgresCRDResouceName, | 	return buildCRD(PostgresCRDResouceName, | ||||||
| 		PostgresCRDResourceKind, | 		PostgresCRDResourceKind, | ||||||
| 		PostgresCRDResourcePlural, | 		PostgresCRDResourcePlural, | ||||||
| 		PostgresCRDResourceShort, | 		PostgresCRDResourceShort, | ||||||
| 		PostgresCRDResourceColumns) | 		PostgresCRDResourceColumns, | ||||||
|  | 		postgresCRDvalidation) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ConfigurationCRD returns CustomResourceDefinition built from OperatorConfigCRDResource
 | // ConfigurationCRD returns CustomResourceDefinition built from OperatorConfigCRDResource
 | ||||||
| func ConfigurationCRD() *apiextv1beta1.CustomResourceDefinition { | func ConfigurationCRD(enableValidation *bool) *apiextv1beta1.CustomResourceDefinition { | ||||||
|  | 	opconfigCRDvalidation := apiextv1beta1.CustomResourceValidation{} | ||||||
|  | 
 | ||||||
|  | 	if enableValidation != nil && *enableValidation { | ||||||
|  | 		opconfigCRDvalidation = OperatorConfigCRDResourceValidation | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return buildCRD(OperatorConfigCRDResourceName, | 	return buildCRD(OperatorConfigCRDResourceName, | ||||||
| 		OperatorConfigCRDResouceKind, | 		OperatorConfigCRDResouceKind, | ||||||
| 		OperatorConfigCRDResourcePlural, | 		OperatorConfigCRDResourcePlural, | ||||||
| 		OperatorConfigCRDResourceShort, | 		OperatorConfigCRDResourceShort, | ||||||
| 		OperatorConfigCRDResourceColumns) | 		OperatorConfigCRDResourceColumns, | ||||||
|  | 		opconfigCRDvalidation) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -49,9 +49,9 @@ type KubernetesMetaConfiguration struct { | ||||||
| 	SpiloFSGroup                           *int64                `json:"spilo_fsgroup,omitempty"` | 	SpiloFSGroup                           *int64                `json:"spilo_fsgroup,omitempty"` | ||||||
| 	WatchedNamespace                       string                `json:"watched_namespace,omitempty"` | 	WatchedNamespace                       string                `json:"watched_namespace,omitempty"` | ||||||
| 	PDBNameFormat                          config.StringTemplate `json:"pdb_name_format,omitempty"` | 	PDBNameFormat                          config.StringTemplate `json:"pdb_name_format,omitempty"` | ||||||
| 	EnableSidecars                         bool                  `json:"enable_sidecars,omitempty"` |  | ||||||
| 	EnableInitContainers                   bool                  `json:"enable_init_containers,omitempty"` |  | ||||||
| 	EnablePodDisruptionBudget              *bool                 `json:"enable_pod_disruption_budget,omitempty"` | 	EnablePodDisruptionBudget              *bool                 `json:"enable_pod_disruption_budget,omitempty"` | ||||||
|  | 	EnableInitContainers                   *bool                 `json:"enable_init_containers,omitempty"` | ||||||
|  | 	EnableSidecars                         *bool                 `json:"enable_sidecars,omitempty"` | ||||||
| 	SecretNameTemplate                     config.StringTemplate `json:"secret_name_template,omitempty"` | 	SecretNameTemplate                     config.StringTemplate `json:"secret_name_template,omitempty"` | ||||||
| 	ClusterDomain                          string                `json:"cluster_domain"` | 	ClusterDomain                          string                `json:"cluster_domain"` | ||||||
| 	OAuthTokenSecretName                   spec.NamespacedName   `json:"oauth_token_secret_name,omitempty"` | 	OAuthTokenSecretName                   spec.NamespacedName   `json:"oauth_token_secret_name,omitempty"` | ||||||
|  | @ -152,6 +152,7 @@ type ScalyrConfiguration struct { | ||||||
| 
 | 
 | ||||||
| // OperatorConfigurationData defines the operation config
 | // OperatorConfigurationData defines the operation config
 | ||||||
| type OperatorConfigurationData struct { | type OperatorConfigurationData struct { | ||||||
|  | 	EnableCRDValidation        *bool                              `json:"enable_crd_validation,omitempty"` | ||||||
| 	EtcdHost                   string                             `json:"etcd_host,omitempty"` | 	EtcdHost                   string                             `json:"etcd_host,omitempty"` | ||||||
| 	DockerImage                string                             `json:"docker_image,omitempty"` | 	DockerImage                string                             `json:"docker_image,omitempty"` | ||||||
| 	Workers                    uint32                             `json:"workers,omitempty"` | 	Workers                    uint32                             `json:"workers,omitempty"` | ||||||
|  |  | ||||||
|  | @ -81,6 +81,16 @@ func (in *KubernetesMetaConfiguration) DeepCopyInto(out *KubernetesMetaConfigura | ||||||
| 		*out = new(bool) | 		*out = new(bool) | ||||||
| 		**out = **in | 		**out = **in | ||||||
| 	} | 	} | ||||||
|  | 	if in.EnableInitContainers != nil { | ||||||
|  | 		in, out := &in.EnableInitContainers, &out.EnableInitContainers | ||||||
|  | 		*out = new(bool) | ||||||
|  | 		**out = **in | ||||||
|  | 	} | ||||||
|  | 	if in.EnableSidecars != nil { | ||||||
|  | 		in, out := &in.EnableSidecars, &out.EnableSidecars | ||||||
|  | 		*out = new(bool) | ||||||
|  | 		**out = **in | ||||||
|  | 	} | ||||||
| 	out.OAuthTokenSecretName = in.OAuthTokenSecretName | 	out.OAuthTokenSecretName = in.OAuthTokenSecretName | ||||||
| 	out.InfrastructureRolesSecretName = in.InfrastructureRolesSecretName | 	out.InfrastructureRolesSecretName = in.InfrastructureRolesSecretName | ||||||
| 	if in.ClusterLabels != nil { | 	if in.ClusterLabels != nil { | ||||||
|  | @ -216,6 +226,11 @@ func (in *OperatorConfiguration) DeepCopyObject() runtime.Object { | ||||||
| // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | ||||||
| func (in *OperatorConfigurationData) DeepCopyInto(out *OperatorConfigurationData) { | func (in *OperatorConfigurationData) DeepCopyInto(out *OperatorConfigurationData) { | ||||||
| 	*out = *in | 	*out = *in | ||||||
|  | 	if in.EnableCRDValidation != nil { | ||||||
|  | 		in, out := &in.EnableCRDValidation, &out.EnableCRDValidation | ||||||
|  | 		*out = new(bool) | ||||||
|  | 		**out = **in | ||||||
|  | 	} | ||||||
| 	if in.ShmVolume != nil { | 	if in.ShmVolume != nil { | ||||||
| 		in, out := &in.ShmVolume, &out.ShmVolume | 		in, out := &in.ShmVolume, &out.ShmVolume | ||||||
| 		*out = new(bool) | 		*out = new(bool) | ||||||
|  |  | ||||||
|  | @ -788,7 +788,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if spec.InitContainers != nil && len(spec.InitContainers) > 0 { | 	if spec.InitContainers != nil && len(spec.InitContainers) > 0 { | ||||||
| 		if c.OpConfig.EnableInitContainers { | 		if c.OpConfig.EnableInitContainers != nil && *c.OpConfig.EnableInitContainers { | ||||||
| 			initContainers = spec.InitContainers | 			initContainers = spec.InitContainers | ||||||
| 		} else { | 		} else { | ||||||
| 			return nil, fmt.Errorf("initContainers specified but globally disabled") | 			return nil, fmt.Errorf("initContainers specified but globally disabled") | ||||||
|  | @ -882,7 +882,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef | ||||||
| 
 | 
 | ||||||
| 	// generate sidecar containers
 | 	// generate sidecar containers
 | ||||||
| 	if sideCars != nil && len(sideCars) > 0 { | 	if sideCars != nil && len(sideCars) > 0 { | ||||||
| 		if c.OpConfig.EnableSidecars { | 		if c.OpConfig.EnableSidecars != nil && *c.OpConfig.EnableSidecars { | ||||||
| 			if sidecarContainers, err = generateSidecarContainers(sideCars, volumeMounts, defaultResources, | 			if sidecarContainers, err = generateSidecarContainers(sideCars, volumeMounts, defaultResources, | ||||||
| 				c.OpConfig.SuperUsername, c.credentialSecretName(c.OpConfig.SuperUsername), c.logger); err != nil { | 				c.OpConfig.SuperUsername, c.credentialSecretName(c.OpConfig.SuperUsername), c.logger); err != nil { | ||||||
| 				return nil, fmt.Errorf("could not generate sidecar containers: %v", err) | 				return nil, fmt.Errorf("could not generate sidecar containers: %v", err) | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ import ( | ||||||
| 	"sync" | 	"sync" | ||||||
| 
 | 
 | ||||||
| 	"github.com/sirupsen/logrus" | 	"github.com/sirupsen/logrus" | ||||||
| 	"k8s.io/api/core/v1" | 	v1 "k8s.io/api/core/v1" | ||||||
| 	rbacv1beta1 "k8s.io/api/rbac/v1beta1" | 	rbacv1beta1 "k8s.io/api/rbac/v1beta1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
|  | @ -240,7 +240,7 @@ func (c *Controller) initController() { | ||||||
| 	c.initClients() | 	c.initClients() | ||||||
| 
 | 
 | ||||||
| 	if configObjectName := os.Getenv("POSTGRES_OPERATOR_CONFIGURATION_OBJECT"); configObjectName != "" { | 	if configObjectName := os.Getenv("POSTGRES_OPERATOR_CONFIGURATION_OBJECT"); configObjectName != "" { | ||||||
| 		if err := c.createConfigurationCRD(); err != nil { | 		if err := c.createConfigurationCRD(c.opConfig.EnableCRDValidation); err != nil { | ||||||
| 			c.logger.Fatalf("could not register Operator Configuration CustomResourceDefinition: %v", err) | 			c.logger.Fatalf("could not register Operator Configuration CustomResourceDefinition: %v", err) | ||||||
| 		} | 		} | ||||||
| 		if cfg, err := c.readOperatorConfigurationFromCRD(spec.GetOperatorNamespace(), configObjectName); err != nil { | 		if cfg, err := c.readOperatorConfigurationFromCRD(spec.GetOperatorNamespace(), configObjectName); err != nil { | ||||||
|  | @ -256,7 +256,7 @@ func (c *Controller) initController() { | ||||||
| 
 | 
 | ||||||
| 	c.modifyConfigFromEnvironment() | 	c.modifyConfigFromEnvironment() | ||||||
| 
 | 
 | ||||||
| 	if err := c.createPostgresCRD(); err != nil { | 	if err := c.createPostgresCRD(c.opConfig.EnableCRDValidation); err != nil { | ||||||
| 		c.logger.Fatalf("could not register Postgres CustomResourceDefinition: %v", err) | 		c.logger.Fatalf("could not register Postgres CustomResourceDefinition: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 	result := &config.Config{} | 	result := &config.Config{} | ||||||
| 
 | 
 | ||||||
| 	// general config
 | 	// general config
 | ||||||
|  | 	result.EnableCRDValidation = fromCRD.EnableCRDValidation | ||||||
| 	result.EtcdHost = fromCRD.EtcdHost | 	result.EtcdHost = fromCRD.EtcdHost | ||||||
| 	result.DockerImage = fromCRD.DockerImage | 	result.DockerImage = fromCRD.DockerImage | ||||||
| 	result.Workers = fromCRD.Workers | 	result.Workers = fromCRD.Workers | ||||||
|  | @ -53,8 +54,8 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 	result.WatchedNamespace = fromCRD.Kubernetes.WatchedNamespace | 	result.WatchedNamespace = fromCRD.Kubernetes.WatchedNamespace | ||||||
| 	result.PDBNameFormat = fromCRD.Kubernetes.PDBNameFormat | 	result.PDBNameFormat = fromCRD.Kubernetes.PDBNameFormat | ||||||
| 	result.EnablePodDisruptionBudget = fromCRD.Kubernetes.EnablePodDisruptionBudget | 	result.EnablePodDisruptionBudget = fromCRD.Kubernetes.EnablePodDisruptionBudget | ||||||
| 	result.EnableSidecars = fromCRD.Kubernetes.EnableSidecars |  | ||||||
| 	result.EnableInitContainers = fromCRD.Kubernetes.EnableInitContainers | 	result.EnableInitContainers = fromCRD.Kubernetes.EnableInitContainers | ||||||
|  | 	result.EnableSidecars = fromCRD.Kubernetes.EnableSidecars | ||||||
| 	result.SecretNameTemplate = fromCRD.Kubernetes.SecretNameTemplate | 	result.SecretNameTemplate = fromCRD.Kubernetes.SecretNameTemplate | ||||||
| 	result.OAuthTokenSecretName = fromCRD.Kubernetes.OAuthTokenSecretName | 	result.OAuthTokenSecretName = fromCRD.Kubernetes.OAuthTokenSecretName | ||||||
| 	result.InfrastructureRolesSecretName = fromCRD.Kubernetes.InfrastructureRolesSecretName | 	result.InfrastructureRolesSecretName = fromCRD.Kubernetes.InfrastructureRolesSecretName | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 
 | 
 | ||||||
| 	"k8s.io/api/core/v1" | 	v1 "k8s.io/api/core/v1" | ||||||
| 	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" | 	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
|  | @ -91,12 +91,12 @@ func (c *Controller) createOperatorCRD(crd *apiextv1beta1.CustomResourceDefiniti | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Controller) createPostgresCRD() error { | func (c *Controller) createPostgresCRD(enableValidation *bool) error { | ||||||
| 	return c.createOperatorCRD(acidv1.PostgresCRD()) | 	return c.createOperatorCRD(acidv1.PostgresCRD(enableValidation)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Controller) createConfigurationCRD() error { | func (c *Controller) createConfigurationCRD(enableValidation *bool) error { | ||||||
| 	return c.createOperatorCRD(acidv1.ConfigurationCRD()) | 	return c.createOperatorCRD(acidv1.ConfigurationCRD(enableValidation)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func readDecodedRole(s string) (*spec.PgUser, error) { | func readDecodedRole(s string) (*spec.PgUser, error) { | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ type CRD struct { | ||||||
| 	ReadyWaitTimeout    time.Duration `name:"ready_wait_timeout" default:"30s"` | 	ReadyWaitTimeout    time.Duration `name:"ready_wait_timeout" default:"30s"` | ||||||
| 	ResyncPeriod        time.Duration `name:"resync_period" default:"30m"` | 	ResyncPeriod        time.Duration `name:"resync_period" default:"30m"` | ||||||
| 	RepairPeriod        time.Duration `name:"repair_period" default:"5m"` | 	RepairPeriod        time.Duration `name:"repair_period" default:"5m"` | ||||||
|  | 	EnableCRDValidation *bool         `name:"enable_crd_validation" default:"true"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Resources describes kubernetes resource specific configuration parameters
 | // Resources describes kubernetes resource specific configuration parameters
 | ||||||
|  | @ -91,8 +92,6 @@ type Config struct { | ||||||
| 	EtcdHost         string            `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS
 | 	EtcdHost         string            `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS
 | ||||||
| 	DockerImage      string            `name:"docker_image" default:"registry.opensource.zalan.do/acid/spilo-11:1.6-p1"` | 	DockerImage      string            `name:"docker_image" default:"registry.opensource.zalan.do/acid/spilo-11:1.6-p1"` | ||||||
| 	Sidecars         map[string]string `name:"sidecar_docker_images"` | 	Sidecars         map[string]string `name:"sidecar_docker_images"` | ||||||
| 	EnableSidecars       bool              `name:"enable_sidecars" default:"false"` |  | ||||||
| 	EnableInitContainers bool              `name:"enable_init_containers" default:"false"` |  | ||||||
| 	// default name `operator` enables backward compatibility with the older ServiceAccountName field
 | 	// default name `operator` enables backward compatibility with the older ServiceAccountName field
 | ||||||
| 	PodServiceAccountName string `name:"pod_service_account_name" default:"operator"` | 	PodServiceAccountName string `name:"pod_service_account_name" default:"operator"` | ||||||
| 	// value of this string must be valid JSON or YAML; see initPodServiceAccount
 | 	// value of this string must be valid JSON or YAML; see initPodServiceAccount
 | ||||||
|  | @ -124,6 +123,8 @@ type Config struct { | ||||||
| 	ReplicaDNSNameFormat      StringTemplate    `name:"replica_dns_name_format" default:"{cluster}-repl.{team}.{hostedzone}"` | 	ReplicaDNSNameFormat      StringTemplate    `name:"replica_dns_name_format" default:"{cluster}-repl.{team}.{hostedzone}"` | ||||||
| 	PDBNameFormat             StringTemplate    `name:"pdb_name_format" default:"postgres-{cluster}-pdb"` | 	PDBNameFormat             StringTemplate    `name:"pdb_name_format" default:"postgres-{cluster}-pdb"` | ||||||
| 	EnablePodDisruptionBudget *bool             `name:"enable_pod_disruption_budget" default:"true"` | 	EnablePodDisruptionBudget *bool             `name:"enable_pod_disruption_budget" default:"true"` | ||||||
|  | 	EnableSidecars            *bool             `name:"enable_sidecars" default:"true"` | ||||||
|  | 	EnableInitContainers      *bool             `name:"enable_init_containers" default:"true"` | ||||||
| 	Workers                   uint32            `name:"workers" default:"4"` | 	Workers                   uint32            `name:"workers" default:"4"` | ||||||
| 	APIPort                   int               `name:"api_port" default:"8080"` | 	APIPort                   int               `name:"api_port" default:"8080"` | ||||||
| 	RingLogLines              int               `name:"ring_log_lines" default:"100"` | 	RingLogLines              int               `name:"ring_log_lines" default:"100"` | ||||||
|  |  | ||||||
|  | @ -98,7 +98,7 @@ function build_operator_binary(){ | ||||||
| 
 | 
 | ||||||
|     # redirecting stderr greatly reduces non-informative output during normal builds |     # redirecting stderr greatly reduces non-informative output during normal builds | ||||||
|     echo "Build operator binary (stderr redirected to /dev/null)..." |     echo "Build operator binary (stderr redirected to /dev/null)..." | ||||||
|     make clean tools deps local test > /dev/null 2>&1 |     make clean deps local test > /dev/null 2>&1 | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue