#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

{{- if ne .Values.whisk.ingress.type "OpenShift" }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-nginx
  labels:
{{ include "openwhisk.label_boilerplate" . | indent 4 }}
type: tls
data:
  tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLakNDQWhJQ0NRQ3JWVW52eWpMdHpEQU5CZ2txaGtpRzl3MEJBUVVGQURCWE1Rc3dDUVlEVlFRR0V3SlYKVXpFTE1Ba0dBMVVFQ0F3Q1Rsa3hFVEFQQmdOVkJBY01DRmx2Y210MGIzZHVNUkl3RUFZRFZRUUtEQWxQY0dWdQpWMmhwYzJzeEZEQVNCZ05WQkFNTUN5b3ViRzlqWVd4b2IzTjBNQjRYRFRFNE1UQXdNVEl3TlRBd01sb1hEVEU1Ck1UQXdNVEl3TlRBd01sb3dWekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnTUFrNVpNUkV3RHdZRFZRUUgKREFoWmIzSnJkRzkzYmpFU01CQUdBMVVFQ2d3SlQzQmxibGRvYVhOck1SUXdFZ1lEVlFRRERBc3FMbXh2WTJGcwphRzl6ZERDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTlY1TmVuR3FnSFhIOXpTCkUxWEJiS2x4M0hrSDlkSlQ0NVNrK1E0UG0yeVQ4RXZ2YWFnTEdEcHRMeXorQmU5a3Uvd1BTSDRETEpNbEcwYkwKcGlaY1VzMGVTWHVLR3pGVUVBZ1FlWDgvZEVjeW5XcWlMSzJYY0lacUFYNi9WWFZLamlZM0ZEM3RFenRoVnUwQgp6dEtUOVZzQ0VBWDc5dlo5WXJaSWk1VEdUaVlEVWxuSmhXT3g0SS8rMWd6UHNEUDExc1BaU2doZHlmUnJGN1BaCndPOUFKWC8vbTc1V3ozMGxZQ3QwK0xDSEFXWmRXL2pyeXJQdCtNNjlzUm8xdTJXNzlVdmpGcFJ2OStObXhKUmEKRTZ2amRTb0VTeDlhMHozUjJYMlA2b2Q0V0hnVGVOZXNRYUVPOThGZStpWnZsUHBOUTMxYmVPRWF2QlAwVmNDNAoyWWdjc3BVQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBSFVLQXZYR0JKVzNJS3NZT0RNUzY1cEJoClVkTmpIS1p6c0J4Slh1YzkvUnFwVDNxRWJORW5jUnNOYjlHZWk1aEhodEd1c3YwdHN1c2xpV2t3aVgrMGhnQW4KWTZFUXJqck0zMm9lc1pvWHJWRmlGeWVvRVgvV0ZGVThDL2JZVnlYS2FFVENQcU9wcHFhRGl0TGlPc3FuYlZldwpRcVIySitXdSs3WEhpYm85MWg4VTRHL0MzTU5ZZFVNaFh4RTkrbmtRQ0J5Q2Ftd3AzR1RsV1FkM1gwdFdMYXlGCitBdWF0RCtxb21XRXpLcnRFWjFoaWswQnBzQ2VibU0vTXR1RmR1M0hMVk83c3VnM0hMeUNCdHB4OVNyRjV0ZnMKTlpOM3BGK2s3bklycGJZZ29uakVmVE5SRk5kM0tGZ2RMYm1jUisrVU5DekZOU1lrbVh0dTB1Mm16VVQ1ekE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
  tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMVhrMTZjYXFBZGNmM05JVFZjRnNxWEhjZVFmMTBsUGpsS1Q1RGcrYmJKUHdTKzlwCnFBc1lPbTB2TFA0RjcyUzcvQTlJZmdNc2t5VWJSc3VtSmx4U3pSNUplNG9iTVZRUUNCQjVmejkwUnpLZGFxSXMKclpkd2htb0JmcjlWZFVxT0pqY1VQZTBUTzJGVzdRSE8wcFAxV3dJUUJmdjI5bjFpdGtpTGxNWk9KZ05TV2NtRgpZN0hnai83V0RNK3dNL1hXdzlsS0NGM0o5R3NYczluQTcwQWxmLytidmxiUGZTVmdLM1Q0c0ljQlpsMWIrT3ZLCnMrMzR6cjJ4R2pXN1pidjFTK01XbEcvMzQyYkVsRm9UcStOMUtnUkxIMXJUUGRIWmZZL3FoM2hZZUJONDE2eEIKb1E3M3dWNzZKbStVK2sxRGZWdDQ0UnE4RS9SVndMalppQnl5bFFJREFRQUJBb0lCQVFDYlp3TE5iWGREb2JTcgpUeThPSmFJUjlEYVkwU2V0OXEzYy92L2pzWTdteXdlS2IvNU5lODRtY21kK2JHb3JyUHlBY1N2SHVFM1J6SmgvCndDN3pEQkNuQzk1WWxlQlgxNmRZQjQ0N0NSbC8zeVBqaGEzYXJUMFlUTUZMNE1PNGdBN2RXUWxlVDJESndJSEUKUmFXbmZGaUg2UWQ3SThMVUM5RTVlN1JKR05lNUtTcGhKNGJxNThXSHpFUVhjOWlxWUx6YzNBY1MzVFJFTnY4ZAp1NUdBV3M3T1VPYzVtbWt0bE5McHRVSXh3WkJBa1c1S0hWV014aThsck1ES3FhdEwyWi95ZENjRGV6dzdJWlBkCjdlelFGdDgwazFJMy9JanhsNWtuUHRuOTNOOWlPazlBOUxGbWhZbm5hQkREMnVGRmZaR2FjOUE1VTZmNEx6NW0KaW5XQnd3bzlBb0dCQVAycnVJQjNIU1YxY2lVY3NOUEFTbzRQbEFHcG5kYVZHdUtzVEQxL1QvR01SNDJqVmJXUAppc1AySGJEdDNXOW5kM2xrM3dTRlZtdElxK3ZWSHpwVzlRNUYvYVJCc2RVL29mdldHWnJsa085Vm8rK2VVQUJXCjNNQjBncUpHYXBGK2VETGRlNklFMklzRUNja0xFQitwZUxVNUsyeFNlQWtCRC84NWQxblhDcG9iQW9HQkFOZHYKQUlJUjR0bWpSZHRqaW1YVk5TUjUzU0d5N0RFSGVtTHMyVHc0MENnNkdXVHpBN1IwVHY5RkpIb1NGdFhZcVp4dwpMUDRhdlY4eUVwMnE1YmZKYUZIR3h1OExRSUdCbURMK3l5ZG11eTZ2Z1RWWEpENEg3WUJINFhsYjBja2F6K2p1CmlucHpVSGFJVnZUT1J5Nnk4TXUzVTM5b1NVN1lmbjJpeTFJYzQ3RVBBb0dBSEg3bjBQYVFmWjY5M2RGbFE4UTgKRzgxQU1SZWV0WFkyZVBRbDlGcVMzbTJGdERGKzlWQlVwRUxIZnhLWloyUldGWHJ4V282bjhKRlBUc1M0SjFPUgpYN01aRlJTVUo0Sm9iZVBWS0lOVlRxMXVKd0svdGVvTURrcUlTalppemtsSXMxNFIvMWRRQS8zR0k2RnNoRUlEClgwZzJ5b3BSRmFIYTdDN0dhMzh1bjdVQ2dZQjJ3Y0wyOEtNcnRCeUxMdGtZLzZvVzNIS3c0Ky9kcXpDbEhjazIKc0Y3Vy9nZ0hwUXJTekJiTUV6SmpkRnRRTU9wMnlVT1VJK3RtY2JUZlkxalVzbHNtVVR4U2c5SmdVYTh6MVU3cAovbkNLOE1aNlAvcERrNTB4ek80WE55MXkvYXZFek5KYlkvdmtDNDVienVaZ2NOWGFoc21wZnpTQ0dVZkpQQmQyCndXUW1zd0tCZ1FDYmZqQ0ZxME0xcVVoZXNXRGdKbm14MHRhdjFHbi9La1dXZTdHWVZpYmowbnVXNlFZUjhleFEKemlpTVcwNkRKREQybjJoOW1ySjZSaW4xZE1EUlM0bmxtek9DcUR3Uk50aHRPcHIxVkRhL1UvUVJNRXIwWWl3SQozT3NwZFZSNUJqSXc5bGJGck0ySWRtK2ZkUXREbmo3bEhabnRONkVudjJuTnIzRHNJQWtQWkE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
{{- end }}
