Skip to content

Commit

Permalink
[wip] create service certs
Browse files Browse the repository at this point in the history
  • Loading branch information
stuggi committed Nov 24, 2023
1 parent 2deef6c commit e74503e
Show file tree
Hide file tree
Showing 11 changed files with 97 additions and 81 deletions.
8 changes: 0 additions & 8 deletions apis/bases/core.openstack.org_openstackcontrolplanes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1330,8 +1330,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down Expand Up @@ -4229,8 +4227,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down Expand Up @@ -6047,8 +6043,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down Expand Up @@ -8343,8 +8337,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down
10 changes: 5 additions & 5 deletions apis/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,12 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202304141430
// Bump golang.org/x/net to avoid Rapid Reset CVE
replace golang.org/x/net => golang.org/x/net v0.18.0 //allow-merging

replace github.com/openstack-k8s-operators/lib-common/modules/common => github.com/stuggi/lib-common/modules/common v0.0.0-20231123151040-45769a6e5b6e
replace github.com/openstack-k8s-operators/lib-common/modules/common => github.com/stuggi/lib-common/modules/common v0.0.0-20231124130126-bb758314bc7a

replace github.com/openstack-k8s-operators/keystone-operator/api => github.com/stuggi/keystone-operator/api v0.0.0-20231123162808-4a3e9a0b905e
replace github.com/openstack-k8s-operators/keystone-operator/api => github.com/stuggi/keystone-operator/api v0.0.0-20231124152410-b7d237765e5b

replace github.com/openstack-k8s-operators/glance-operator/api => github.com/stuggi/glance-operator/api v0.0.0-20231123162830-c123901c50f3
replace github.com/openstack-k8s-operators/glance-operator/api => github.com/stuggi/glance-operator/api v0.0.0-20231124152702-f9fe9c115606

replace github.com/openstack-k8s-operators/cinder-operator/api => github.com/stuggi/cinder-operator/api v0.0.0-20231124092425-c58d8b4fda0f
replace github.com/openstack-k8s-operators/cinder-operator/api => github.com/stuggi/cinder-operator/api v0.0.0-20231124152915-5401ac1e6c56

replace github.com/openstack-k8s-operators/neutron-operator/api => github.com/stuggi/neutron-operator/api v0.0.0-20231124111807-16e054e581c1
replace github.com/openstack-k8s-operators/neutron-operator/api => github.com/stuggi/neutron-operator/api v0.0.0-20231124152957-b7ccb1fd2640
20 changes: 10 additions & 10 deletions apis/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -195,16 +195,16 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stuggi/cinder-operator/api v0.0.0-20231124092425-c58d8b4fda0f h1:yjvJO7EEd3Kqgg7DYcS42lAZRvaz9QRde9Eh7sFXKWc=
github.com/stuggi/cinder-operator/api v0.0.0-20231124092425-c58d8b4fda0f/go.mod h1:zE1hK0S38bIcrQyevQ1XJpIIal/ysU/M/x8x07s6ldY=
github.com/stuggi/glance-operator/api v0.0.0-20231123162830-c123901c50f3 h1:/uc3wbjtYI7e32zwOhibdWAEo3SlkHpyz+XSZmHOp2c=
github.com/stuggi/glance-operator/api v0.0.0-20231123162830-c123901c50f3/go.mod h1:ZfyUFpExpnrUhbMy99OTsEIBQ06EeRI/5sPQ8WqIMaM=
github.com/stuggi/keystone-operator/api v0.0.0-20231123162808-4a3e9a0b905e h1:d/55vgtNsSDZnGZgzt9bOOowO6rrnyRZzJs8XqhUd2Q=
github.com/stuggi/keystone-operator/api v0.0.0-20231123162808-4a3e9a0b905e/go.mod h1:ZE7eFyqmjbBqSkBjYvhRRzLL9JAIjvu6pfMF019Gi94=
github.com/stuggi/lib-common/modules/common v0.0.0-20231123151040-45769a6e5b6e h1:vDqwA1FzC1qkbuNbYQQ3evB4wXmHzs6IGTCW4ZDph5w=
github.com/stuggi/lib-common/modules/common v0.0.0-20231123151040-45769a6e5b6e/go.mod h1:ImxqioQ1ID+d7fMMD4lK8CxJqNTB5tsQ+lGKcN/xx5M=
github.com/stuggi/neutron-operator/api v0.0.0-20231124111807-16e054e581c1 h1:XJLCrbnTtsVcvtAxLfJSI74fuvWbVprTXy+7TX/516I=
github.com/stuggi/neutron-operator/api v0.0.0-20231124111807-16e054e581c1/go.mod h1:jzD3WkEcwWLHqFuuDW2tU00/CJ7rj736Fk5LIUOLrCk=
github.com/stuggi/cinder-operator/api v0.0.0-20231124152915-5401ac1e6c56 h1:LDLzAtydlty9M/TRmVeo74eNO5dqd8PYqiyAgJ0DbnU=
github.com/stuggi/cinder-operator/api v0.0.0-20231124152915-5401ac1e6c56/go.mod h1:rLQ+dyDPrqoLW2ytuoYjJEfwUdlN2lJRjc9iapEq2eI=
github.com/stuggi/glance-operator/api v0.0.0-20231124152702-f9fe9c115606 h1:l0BZdOl/Yo0MjVB6W31lDzJfCz6ttewDk//312s3Ct4=
github.com/stuggi/glance-operator/api v0.0.0-20231124152702-f9fe9c115606/go.mod h1:XwxDs2UUYMJ9rMifdLvVO8KaUOF5pNYafG7HqXyw2D8=
github.com/stuggi/keystone-operator/api v0.0.0-20231124152410-b7d237765e5b h1:7Dfl65yyd5OiRsubecJYlxgQE+waYHwPccGlNkJrRH8=
github.com/stuggi/keystone-operator/api v0.0.0-20231124152410-b7d237765e5b/go.mod h1:kuaBV3q8vh1t4sD4pspDmzV/Kc5s67Okf6qPpdyBoj4=
github.com/stuggi/lib-common/modules/common v0.0.0-20231124130126-bb758314bc7a h1:w7k01JHOK99xIs2tXU7jWWefmWQpZhWRt3NyMJq5NrI=
github.com/stuggi/lib-common/modules/common v0.0.0-20231124130126-bb758314bc7a/go.mod h1:ImxqioQ1ID+d7fMMD4lK8CxJqNTB5tsQ+lGKcN/xx5M=
github.com/stuggi/neutron-operator/api v0.0.0-20231124152957-b7ccb1fd2640 h1:HqFzHYflLqQ6T5EW11e5PkGPryscVdalcB9ta2i05x4=
github.com/stuggi/neutron-operator/api v0.0.0-20231124152957-b7ccb1fd2640/go.mod h1:URcZB3tgVkJOmOyDKkEMuieUlVyXSipPMRvFyYt1XJU=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1330,8 +1330,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down Expand Up @@ -4229,8 +4227,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down Expand Up @@ -6047,8 +6043,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down Expand Up @@ -8343,8 +8337,6 @@ spec:
endpoint:
additionalProperties:
properties:
issuerName:
type: string
secretName:
type: string
type: object
Expand Down
10 changes: 5 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,12 @@ replace github.com/openstack-k8s-operators/openstack-operator/apis => ./apis
// must consistent within modules and service operators
replace github.com/openshift/api => github.com/openshift/api v0.0.0-20230414143018-3367bc7e6ac7 //allow-merging

replace github.com/openstack-k8s-operators/lib-common/modules/common => github.com/stuggi/lib-common/modules/common v0.0.0-20231123151040-45769a6e5b6e
replace github.com/openstack-k8s-operators/lib-common/modules/common => github.com/stuggi/lib-common/modules/common v0.0.0-20231124130126-bb758314bc7a

replace github.com/openstack-k8s-operators/keystone-operator/api => github.com/stuggi/keystone-operator/api v0.0.0-20231123162808-4a3e9a0b905e
replace github.com/openstack-k8s-operators/keystone-operator/api => github.com/stuggi/keystone-operator/api v0.0.0-20231124152410-b7d237765e5b

replace github.com/openstack-k8s-operators/glance-operator/api => github.com/stuggi/glance-operator/api v0.0.0-20231123162830-c123901c50f3
replace github.com/openstack-k8s-operators/glance-operator/api => github.com/stuggi/glance-operator/api v0.0.0-20231124152702-f9fe9c115606

replace github.com/openstack-k8s-operators/cinder-operator/api => github.com/stuggi/cinder-operator/api v0.0.0-20231124092425-c58d8b4fda0f
replace github.com/openstack-k8s-operators/cinder-operator/api => github.com/stuggi/cinder-operator/api v0.0.0-20231124152915-5401ac1e6c56

replace github.com/openstack-k8s-operators/neutron-operator/api => github.com/stuggi/neutron-operator/api v0.0.0-20231124111807-16e054e581c1
replace github.com/openstack-k8s-operators/neutron-operator/api => github.com/stuggi/neutron-operator/api v0.0.0-20231124152957-b7ccb1fd2640
20 changes: 10 additions & 10 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -218,16 +218,16 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stuggi/cinder-operator/api v0.0.0-20231124092425-c58d8b4fda0f h1:yjvJO7EEd3Kqgg7DYcS42lAZRvaz9QRde9Eh7sFXKWc=
github.com/stuggi/cinder-operator/api v0.0.0-20231124092425-c58d8b4fda0f/go.mod h1:zE1hK0S38bIcrQyevQ1XJpIIal/ysU/M/x8x07s6ldY=
github.com/stuggi/glance-operator/api v0.0.0-20231123162830-c123901c50f3 h1:/uc3wbjtYI7e32zwOhibdWAEo3SlkHpyz+XSZmHOp2c=
github.com/stuggi/glance-operator/api v0.0.0-20231123162830-c123901c50f3/go.mod h1:ZfyUFpExpnrUhbMy99OTsEIBQ06EeRI/5sPQ8WqIMaM=
github.com/stuggi/keystone-operator/api v0.0.0-20231123162808-4a3e9a0b905e h1:d/55vgtNsSDZnGZgzt9bOOowO6rrnyRZzJs8XqhUd2Q=
github.com/stuggi/keystone-operator/api v0.0.0-20231123162808-4a3e9a0b905e/go.mod h1:ZE7eFyqmjbBqSkBjYvhRRzLL9JAIjvu6pfMF019Gi94=
github.com/stuggi/lib-common/modules/common v0.0.0-20231123151040-45769a6e5b6e h1:vDqwA1FzC1qkbuNbYQQ3evB4wXmHzs6IGTCW4ZDph5w=
github.com/stuggi/lib-common/modules/common v0.0.0-20231123151040-45769a6e5b6e/go.mod h1:ImxqioQ1ID+d7fMMD4lK8CxJqNTB5tsQ+lGKcN/xx5M=
github.com/stuggi/neutron-operator/api v0.0.0-20231124111807-16e054e581c1 h1:XJLCrbnTtsVcvtAxLfJSI74fuvWbVprTXy+7TX/516I=
github.com/stuggi/neutron-operator/api v0.0.0-20231124111807-16e054e581c1/go.mod h1:jzD3WkEcwWLHqFuuDW2tU00/CJ7rj736Fk5LIUOLrCk=
github.com/stuggi/cinder-operator/api v0.0.0-20231124152915-5401ac1e6c56 h1:LDLzAtydlty9M/TRmVeo74eNO5dqd8PYqiyAgJ0DbnU=
github.com/stuggi/cinder-operator/api v0.0.0-20231124152915-5401ac1e6c56/go.mod h1:rLQ+dyDPrqoLW2ytuoYjJEfwUdlN2lJRjc9iapEq2eI=
github.com/stuggi/glance-operator/api v0.0.0-20231124152702-f9fe9c115606 h1:l0BZdOl/Yo0MjVB6W31lDzJfCz6ttewDk//312s3Ct4=
github.com/stuggi/glance-operator/api v0.0.0-20231124152702-f9fe9c115606/go.mod h1:XwxDs2UUYMJ9rMifdLvVO8KaUOF5pNYafG7HqXyw2D8=
github.com/stuggi/keystone-operator/api v0.0.0-20231124152410-b7d237765e5b h1:7Dfl65yyd5OiRsubecJYlxgQE+waYHwPccGlNkJrRH8=
github.com/stuggi/keystone-operator/api v0.0.0-20231124152410-b7d237765e5b/go.mod h1:kuaBV3q8vh1t4sD4pspDmzV/Kc5s67Okf6qPpdyBoj4=
github.com/stuggi/lib-common/modules/common v0.0.0-20231124130126-bb758314bc7a h1:w7k01JHOK99xIs2tXU7jWWefmWQpZhWRt3NyMJq5NrI=
github.com/stuggi/lib-common/modules/common v0.0.0-20231124130126-bb758314bc7a/go.mod h1:ImxqioQ1ID+d7fMMD4lK8CxJqNTB5tsQ+lGKcN/xx5M=
github.com/stuggi/neutron-operator/api v0.0.0-20231124152957-b7ccb1fd2640 h1:HqFzHYflLqQ6T5EW11e5PkGPryscVdalcB9ta2i05x4=
github.com/stuggi/neutron-operator/api v0.0.0-20231124152957-b7ccb1fd2640/go.mod h1:URcZB3tgVkJOmOyDKkEMuieUlVyXSipPMRvFyYt1XJU=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
Expand Down
9 changes: 2 additions & 7 deletions pkg/openstack/cinder.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,8 @@ func ReconcileCinder(ctx context.Context, instance *corev1beta1.OpenStackControl
}
for endpt, endptCfg := range serviceEndpointDetails {
if endptCfg.Service.TLS.Enabled {
endptTLSService := tls.GenericService{}
switch endpt {
case service.EndpointPublic:
endptTLSService.SecretName = endptCfg.Service.TLS.SecretName
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
case service.EndpointInternal:
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
endptTLSService := tls.GenericService{
SecretName: endptCfg.Service.TLS.SecretName,
}

tlsSpec.API.Endpoint[endpt] = endptTLSService
Expand Down
66 changes: 59 additions & 7 deletions pkg/openstack/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ type EndpointDetails struct {
EndpointURL string
}

// TLSDetails - tls settings for the endpoint
type TLSDetails struct {
// ServiceTLSDetails - tls settings for the endpoint
type ServiceTLSDetails struct {
Enabled bool
tls.GenericService
tls.Ca
Expand All @@ -83,15 +83,23 @@ type TLSDetails struct {
type ServiceDetails struct {
Spec *k8s_corev1.Service
OverrideSpec service.RoutedOverrideSpec
TLS TLSDetails
TLS ServiceTLSDetails
}

// RouteDetails - route details
type RouteDetails struct {
Create bool
Route *routev1.Route
OverrideSpec route.OverrideSpec
TLS TLSDetails
TLS RouteTLSDetails
}

// RouteTLSDetails - tls settings for the endpoint
type RouteTLSDetails struct {
Enabled bool
SecretName *string
IssuerName *string
tls.Ca
}

// GetRoutesListWithLabel - Get all routes in namespace of the obj matching label selector
Expand Down Expand Up @@ -181,6 +189,7 @@ func EnsureEndpointConfig(
if publicOverride.TLS != nil && publicOverride.TLS.SecretName != "" {
ed.Route.TLS.SecretName = ptr.To(publicOverride.TLS.SecretName)
} else {
// use public issuer to create cert for the route
ed.Route.TLS.IssuerName = ptr.To(DefaultCAPrefix + ed.Type.String())
}

Expand All @@ -190,11 +199,33 @@ func EnsureEndpointConfig(
// * the particular service has not TLS.Disabled set to true
if ed.Service.TLS.Enabled {
ed.Service.TLS.CaBundleSecretName = CombinedCASecret
// create certificate for public pod virthost
// TODO: (mschuppert) - if ed.Route.Create == false and custom cert secret provided
// for the public endpoint, use this and not the issuer. This is the case when
// env got deployed with LoadBalancer service instead of a route for the public
// endpoint.
ed.Service.TLS.IssuerName = ptr.To(DefaultCAPrefix + ed.Type.String())
// request certificate
certRequest := certmanager.CertificateRequest{
IssuerName: DefaultCAPrefix + ed.Type.String(),
CertName: fmt.Sprintf("%s-svc", ed.Name),
Duration: nil,
Hostnames: []string{fmt.Sprintf("%s.%s.svc", ed.Name, instance.Namespace)},
Ips: nil,
Annotations: ed.Annotations,
Labels: ed.Labels,
Usages: nil,
}
certSecret, ctrlResult, err := certmanager.EnsureCert(
ctx,
helper,
certRequest)
if err != nil {
return serviceEndpointDetails, ctrlResult, err
} else if (ctrlResult != ctrl.Result{}) {
return serviceEndpointDetails, ctrlResult, nil
}

ed.Service.TLS.SecretName = &certSecret.Name
}
}

Expand All @@ -207,9 +238,30 @@ func EnsureEndpointConfig(

case service.EndpointInternal:
if ed.Service.TLS.Enabled {
helper.GetLogger().Info(fmt.Sprintf("BOOO %+v", CombinedCASecret))
ed.Service.TLS.CaBundleSecretName = CombinedCASecret
ed.Service.TLS.IssuerName = ptr.To(DefaultCAPrefix + ed.Type.String())
// create certificate for internal pod virthost
// request certificate
certRequest := certmanager.CertificateRequest{
IssuerName: DefaultCAPrefix + ed.Type.String(),
CertName: fmt.Sprintf("%s-svc", ed.Name),
Duration: nil,
Hostnames: []string{fmt.Sprintf("%s.%s.svc", ed.Name, instance.Namespace)},
Ips: nil,
Annotations: ed.Annotations,
Labels: ed.Labels,
Usages: nil,
}
certSecret, ctrlResult, err := certmanager.EnsureCert(
ctx,
helper,
certRequest)
if err != nil {
return serviceEndpointDetails, ctrlResult, err
} else if (ctrlResult != ctrl.Result{}) {
return serviceEndpointDetails, ctrlResult, nil
}

ed.Service.TLS.SecretName = &certSecret.Name
}
}

Expand Down
9 changes: 2 additions & 7 deletions pkg/openstack/glance.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,8 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
}
for endpt, endptCfg := range serviceEndpointDetails {
if endptCfg.Service.TLS.Enabled {
endptTLSService := tls.GenericService{}
switch endpt {
case service.EndpointPublic:
endptTLSService.SecretName = endptCfg.Service.TLS.SecretName
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
case service.EndpointInternal:
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
endptTLSService := tls.GenericService{
SecretName: endptCfg.Service.TLS.SecretName,
}

tlsSpec.API.Endpoint[endpt] = endptTLSService
Expand Down
9 changes: 2 additions & 7 deletions pkg/openstack/keystone.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,8 @@ func ReconcileKeystoneAPI(ctx context.Context, instance *corev1beta1.OpenStackCo
}
for endpt, endptCfg := range serviceEndpointDetails {
if endptCfg.Service.TLS.Enabled {
endptTLSService := tls.GenericService{}
switch endpt {
case service.EndpointPublic:
endptTLSService.SecretName = endptCfg.Service.TLS.SecretName
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
case service.EndpointInternal:
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
endptTLSService := tls.GenericService{
SecretName: endptCfg.Service.TLS.SecretName,
}

tlsSpec.API.Endpoint[endpt] = endptTLSService
Expand Down
9 changes: 2 additions & 7 deletions pkg/openstack/neutron.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,8 @@ func ReconcileNeutron(ctx context.Context, instance *corev1beta1.OpenStackContro
}
for endpt, endptCfg := range serviceEndpointDetails {
if endptCfg.Service.TLS.Enabled {
endptTLSService := tls.GenericService{}
switch endpt {
case service.EndpointPublic:
endptTLSService.SecretName = endptCfg.Service.TLS.SecretName
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
case service.EndpointInternal:
endptTLSService.IssuerName = endptCfg.Service.TLS.IssuerName
endptTLSService := tls.GenericService{
SecretName: endptCfg.Service.TLS.SecretName,
}

tlsSpec.API.Endpoint[endpt] = endptTLSService
Expand Down

0 comments on commit e74503e

Please sign in to comment.