github.com/argoproj/argo-cd/v2@v2.10.9/docs/operator-manual/argocd-cm.yaml (about)

     1  apiVersion: v1
     2  kind: ConfigMap
     3  metadata:
     4    name: argocd-cm
     5    namespace: argocd
     6    labels:
     7      app.kubernetes.io/name: argocd-cm
     8      app.kubernetes.io/part-of: argocd
     9  data:
    10    # Argo CD's externally facing base URL (optional). Required when configuring SSO
    11    url: https://argo-cd-demo.argoproj.io
    12  
    13    # Enables application status badge feature
    14    statusbadge.enabled: "true"
    15  
    16    # Override the Argo CD hostname root URL for both the project and the application status badges.
    17    # Here is an example of the application status badge for the app `myapp` to see what is replaced.
    18    #    <statusbadge.url>api/badge?name=myapp&revision=true
    19    # Provide custom URL to override. You must include the trailing forward slash:
    20    statusbadge.url: "https://cd-status.apps.argoproj.io/"
    21  
    22    # Enables anonymous user access. The anonymous users get default role permissions specified argocd-rbac-cm.yaml.
    23    users.anonymous.enabled: "true"
    24    # Specifies token expiration duration
    25    users.session.duration: "24h"
    26  
    27    # Specifies regex expression for password
    28    passwordPattern: "^.{8,32}$"
    29  
    30    # Enables google analytics tracking is specified
    31    ga.trackingid: "UA-12345-1"
    32    # Unless set to 'false' then user ids are hashed before sending to google analytics
    33    ga.anonymizeusers: "false"
    34  
    35    # the URL for getting chat help, this will typically be your Slack channel for support
    36    help.chatUrl: "https://mycorp.slack.com/argo-cd"
    37    # the text for getting chat help, defaults to "Chat now!"
    38    help.chatText: "Chat now!"
    39    # The URLs to download additional ArgoCD binaries (besides the Linux with current platform binary included by default)
    40    # for different OS architectures. If provided, additional download buttons will be displayed on the help page.
    41    help.download.linux-amd64: "path-or-url-to-download"
    42    help.download.linux-arm64: "path-or-url-to-download"
    43    help.download.linux-ppc64le: "path-or-url-to-download"
    44    help.download.linux-s390x: "path-or-url-to-download"
    45    help.download.darwin-amd64: "path-or-url-to-download"
    46    help.download.darwin-arm64: "path-or-url-to-download"
    47    help.download.windows-amd64: "path-or-url-to-download"
    48  
    49    # A dex connector configuration (optional). See SSO configuration documentation:
    50    # https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/user-management/index.md#sso
    51    # https://dexidp.io/docs/connectors/
    52    dex.config: |
    53      connectors:
    54        # GitHub example
    55        - type: github
    56          id: github
    57          name: GitHub
    58          config:
    59            clientID: aabbccddeeff00112233
    60            clientSecret: $dex.github.clientSecret
    61            orgs:
    62            - name: your-github-org
    63              teams:
    64              - red-team
    65      # It is possible to provide custom static client for dex if you want to reuse it
    66      # with other services
    67      # staticClients:
    68      # - id: argo-workflow
    69      #   name: Argo Workflow
    70      #   redirectURIs:
    71      #     - https://argo/oauth2/callback
    72      #   secret: $secretReference
    73  
    74    # OIDC configuration as an alternative to dex (optional).
    75    oidc.config: |
    76      name: Okta
    77      issuer: https://dev-123456.oktapreview.com
    78      clientID: aaaabbbbccccddddeee
    79      clientSecret: $oidc.okta.clientSecret
    80      # Optional set of OIDC scopes to request. If omitted, defaults to: ["openid", "profile", "email", "groups"]
    81      requestedScopes: ["openid", "profile", "email"]
    82      # Optional set of OIDC claims to request on the ID token.
    83      requestedIDTokenClaims: {"groups": {"essential": true}}
    84  
    85    # Configuration to customize resource behavior (optional) can be configured via splitted sub keys.
    86    # Keys are in the form: resource.customizations.ignoreDifferences.<group_kind>, resource.customizations.health.<group_kind>
    87    # resource.customizations.actions.<group_kind>, resource.customizations.knownTypeFields.<group-kind>
    88    # resource.customizations.ignoreResourceUpdates.<group-kind>
    89    resource.customizations.ignoreDifferences.admissionregistration.k8s.io_MutatingWebhookConfiguration: |
    90      jsonPointers:
    91      - /webhooks/0/clientConfig/caBundle
    92      jqPathExpressions:
    93      - .webhooks[0].clientConfig.caBundle
    94      managedFieldsManagers:
    95      - kube-controller-manager
    96  
    97    # Configuration to define customizations ignoring differences between live and desired states for
    98    # all resources (GK).
    99    resource.customizations.ignoreDifferences.all: |
   100      managedFieldsManagers:
   101      - kube-controller-manager
   102      jsonPointers:
   103      - /spec/replicas
   104  
   105    # Enable resource.customizations.ignoreResourceUpdates rules. If "false," those rules are not applied, and all updates
   106    # to resources are applied to the cluster cache. Default is false.
   107    resource.ignoreResourceUpdatesEnabled: "false"
   108  
   109    # Configuration to define customizations ignoring differences during watched resource updates to skip application reconciles.
   110    resource.customizations.ignoreResourceUpdates.all: |
   111      jsonPointers:
   112      - /metadata/resourceVersion
   113  
   114    # Configuration to define customizations ignoring differences during watched resource updates can be configured via splitted sub key.
   115    resource.customizations.ignoreResourceUpdates.argoproj.io_Application: |
   116      jsonPointers:
   117      - /status
   118  
   119    # jsonPointers and jqPathExpressions can be specified.
   120    resource.customizations.ignoreResourceUpdates.autoscaling_HorizontalPodAutoscaler: |
   121      jqPathExpressions:
   122      - '.metadata.annotations."autoscaling.alpha.kubernetes.io/behavior"'
   123      - '.metadata.annotations."autoscaling.alpha.kubernetes.io/conditions"'
   124      - '.metadata.annotations."autoscaling.alpha.kubernetes.io/metrics"'
   125      - '.metadata.annotations."autoscaling.alpha.kubernetes.io/current-metrics"'
   126      jsonPointers:
   127      - /metadata/annotations/autoscaling.alpha.kubernetes.io~1behavior
   128      - /metadata/annotations/autoscaling.alpha.kubernetes.io~1conditions
   129      - /metadata/annotations/autoscaling.alpha.kubernetes.io~1metrics
   130      - /metadata/annotations/autoscaling.alpha.kubernetes.io~1current-metrics
   131  
   132    resource.customizations.health.certmanager.k8s.io-Certificate: |
   133      hs = {}
   134      if obj.status ~= nil then
   135        if obj.status.conditions ~= nil then
   136          for i, condition in ipairs(obj.status.conditions) do
   137            if condition.type == "Ready" and condition.status == "False" then
   138              hs.status = "Degraded"
   139              hs.message = condition.message
   140              return hs
   141            end
   142            if condition.type == "Ready" and condition.status == "True" then
   143              hs.status = "Healthy"
   144              hs.message = condition.message
   145              return hs
   146            end
   147          end
   148        end
   149      end
   150      hs.status = "Progressing"
   151      hs.message = "Waiting for certificate"
   152      return hs
   153  
   154    resource.customizations.health.cert-manager.io_Certificate: |
   155      hs = {}
   156      if obj.status ~= nil then
   157        if obj.status.conditions ~= nil then
   158          for i, condition in ipairs(obj.status.conditions) do
   159            if condition.type == "Ready" and condition.status == "False" then
   160              hs.status = "Degraded"
   161              hs.message = condition.message
   162              return hs
   163            end
   164            if condition.type == "Ready" and condition.status == "True" then
   165              hs.status = "Healthy"
   166              hs.message = condition.message
   167              return hs
   168            end
   169          end
   170        end
   171      end
   172      hs.status = "Progressing"
   173      hs.message = "Waiting for certificate"
   174      return hs
   175  
   176    # List of Lua Scripts to introduce custom actions
   177    resource.customizations.actions.apps_Deployment: |
   178      # Lua Script to indicate which custom actions are available on the resource
   179      discovery.lua: |
   180        actions = {}
   181        actions["restart"] = {}
   182        return actions
   183      definitions:
   184        - name: restart
   185          # Lua Script to modify the obj
   186          action.lua: |
   187            local os = require("os")
   188            if obj.spec.template.metadata == nil then
   189                obj.spec.template.metadata = {}
   190            end
   191            if obj.spec.template.metadata.annotations == nil then
   192                obj.spec.template.metadata.annotations = {}
   193            end
   194            obj.spec.template.metadata.annotations["kubectl.kubernetes.io/restartedAt"] = os.date("!%Y-%m-%dT%XZ")
   195            return obj
   196  
   197    # Configuration to completely ignore entire classes of resource group/kinds (optional).
   198    # Excluding high-volume resources improves performance and memory usage, and reduces load and
   199    # bandwidth to the Kubernetes API server.
   200    # These are globs, so a "*" will match all values.
   201    # If you omit groups/kinds/clusters then they will match all groups/kind/clusters.
   202    # NOTE: events.k8s.io and metrics.k8s.io are excluded by default
   203    resource.exclusions: |
   204      - apiGroups:
   205        - repositories.stash.appscode.com
   206        kinds:
   207        - Snapshot
   208        clusters:
   209        - "*.local"
   210  
   211    # By default all resource group/kinds are included. The resource.inclusions setting allows customizing
   212    # list of included group/kinds.
   213    resource.inclusions: |
   214      - apiGroups:
   215        - repositories.stash.appscode.com
   216        kinds:
   217        - Snapshot
   218        clusters:
   219        - "*.local"
   220  
   221    # An optional comma-separated list of metadata.labels to observe in the UI.
   222    resource.customLabels: tier
   223  
   224    resource.compareoptions: |
   225      # if ignoreAggregatedRoles set to true then differences caused by aggregated roles in RBAC resources are ignored.
   226      ignoreAggregatedRoles: true
   227  
   228      # disables status field diffing in specified resource types
   229      # 'crd' - CustomResourceDefinitions (default)
   230      # 'all' - all resources
   231      # 'none' - disabled
   232      ignoreResourceStatusField: crd
   233  
   234    # configuration to instruct controller to only watch for resources that it has permissions to list
   235    # can be either empty, "normal" or "strict". By default, it is empty i.e. disabled.
   236    resource.respectRBAC: "normal"
   237  
   238    # Configuration to add a config management plugin.
   239    configManagementPlugins: |
   240      - name: kasane
   241        init:
   242          command: [kasane, update]
   243        generate:
   244          command: [kasane, show]
   245  
   246    # A set of settings that allow enabling or disabling the config management tool.
   247    # If unset, each defaults to "true".
   248    kustomize.enabled: true
   249    jsonnet.enabled: true
   250    helm.enabled: true
   251  
   252    # Build options/parameters to use with `kustomize build` (optional)
   253    kustomize.buildOptions: --load_restrictor none
   254  
   255    # Per-version build options and binary paths
   256    kustomize.path.v3.9.1: /custom-tools/kustomize_3_9
   257    kustomize.buildOptions.v3.9.1: --enable_kyaml true
   258  
   259    # Additional Kustomize versions and corresponding binary paths (deprecated)
   260    kustomize.version.v3.5.1: /custom-tools/kustomize_3_5_1
   261    kustomize.version.v3.5.4: /custom-tools/kustomize_3_5_4
   262  
   263    # Comma delimited list of additional custom remote values file schemes (http are https are allowed by default).
   264    # Change to empty value if you want to disable remote values files altogether.
   265    helm.valuesFileSchemes: http, https
   266  
   267    # The metadata.label key name where Argo CD injects the app name as a tracking label (optional).
   268    # Tracking labels are used to determine which resources need to be deleted when pruning.
   269    # If omitted, Argo CD injects the app name into the label: 'app.kubernetes.io/instance'
   270    application.instanceLabelKey: mycompany.com/appname
   271  
   272    # You can change the resource tracking method Argo CD uses by changing the
   273    # setting application.resourceTrackingMethod to the desired method.
   274    # The following methods are available:
   275    # - label            : Uses the application.instanceLabelKey label for tracking
   276    # - annotation       : Uses an annotation with additional metadata for tracking instead of the label
   277    # - annotation+label : Also uses an annotation for tracking, but additionally labels the resource with the application name
   278    application.resourceTrackingMethod: annotation
   279  
   280    # disables admin user. Admin is enabled by default
   281    admin.enabled: "false"
   282    # add an additional local user with apiKey and login capabilities
   283    #   apiKey - allows generating API keys
   284    #   login - allows to login using UI
   285    accounts.alice: apiKey, login
   286    # disables user. User is enabled by default
   287    accounts.alice.enabled: "false"
   288  
   289    # The location of optional user-defined CSS that is loaded at runtime.
   290    # Local CSS Files:
   291    # - If the supplied path is to a file mounted on the argocd-server container, that file should be mounted
   292    #   within a subdirectory of the existing "/shared/app" directory (e.g. "/shared/app/custom").  Otherwise,
   293    #   the file will likely fail to be imported by the browser with an "incorrect MIME type" error.
   294    # - The path should be specified relative to the "/shared/app" directory; not as an absolute path.
   295    # Remote CSS Files:
   296    # - Files may also be loaded from remote locations via fully qualified URLs.
   297    ui.cssurl: "./custom/my-styles.css"
   298  
   299    # An optional user-defined banner message that's displayed at the top of every UI page.
   300    # Every time this is updated, it will clear a user's localStorage telling the UI to hide the banner forever.
   301    ui.bannercontent: "Hello there!"
   302    # Optional link for banner. If set, the entire banner text will become a link.
   303    # You can have bannercontent without a bannerurl, but not the other way around.
   304    ui.bannerurl: "https://argoproj.github.io"
   305    # Uncomment to make the banner not show the close buttons, thereby making the banner permanent.
   306    # Because it is permanent, only one line of text is available to not take up too much real estate in the UI,
   307    # so it is recommended that the length of the bannercontent text is kept reasonably short. Note that you can
   308    # have either a permanent banner or a regular closeable banner, and NOT both. eg. A user can't dismiss a
   309    # notification message (closeable) banner, to then immediately see a permanent banner.
   310    # ui.bannerpermanent: "true"
   311    # An option to specify the position of the banner, either the top or bottom of the page. The default is at the top.
   312    # Uncomment to make the banner appear at the bottom of the page. Any value other than "bottom" will make the banner appear at the top.
   313    # ui.bannerposition: "bottom"
   314  
   315    # Application reconciliation timeout is the max amount of time required to discover if a new manifests version got
   316    # published to the repository. Reconciliation by timeout is disabled if timeout is set to 0. Three minutes by default.
   317    # > Note: argocd-repo-server deployment must be manually restarted after changing the setting.
   318    timeout.reconciliation: 180s
   319    # With a large number of applications, the periodic refresh for each application can cause a spike in the refresh queue
   320    # and can cause a spike in the repo-server component. To avoid this, you can set a jitter to the sync timeout, which will
   321    # spread out the refreshes and give time to the repo-server to catch up. The jitter is the maximum duration that can be
   322    # added to the sync timeout. So, if the sync timeout is 3 minutes and the jitter is 1 minute, then the actual timeout will
   323    # be between 3 and 4 minutes. Disabled when the value is 0, defaults to 0.
   324    timeout.reconciliation.jitter: 0
   325  
   326    # cluster.inClusterEnabled indicates whether to allow in-cluster server address. This is enabled by default.
   327    cluster.inClusterEnabled: "true"
   328  
   329    # Application pod logs RBAC enforcement enables control over who can and who can't view application pod logs.
   330    # When you enable the switch, pod logs will be visible only to admin role by default. Other roles/users will not be able to view them via cli and UI.
   331    # When you enable the switch, viewing pod logs for other roles/users will require explicit RBAC allow policies (allow get on logs subresource).
   332    # When you disable the switch (either add it to the configmap with a "false" value or do not add it to the configmap), no actual RBAC enforcement will take place.
   333    server.rbac.log.enforce.enable: "false"
   334  
   335    # exec.enabled indicates whether the UI exec feature is enabled. It is disabled by default.
   336    exec.enabled: "false"
   337  
   338    # exec.shells restricts which shells are allowed for `exec`, and in which order they are attempted
   339    exec.shells: "bash,sh,powershell,cmd"
   340  
   341    # oidc.tls.insecure.skip.verify determines whether certificate verification is skipped when verifying tokens with the
   342    # configured OIDC provider (either external or the bundled Dex instance). Setting this to "true" will cause JWT
   343    # token verification to pass despite the OIDC provider having an invalid certificate. Only set to "true" if you
   344    # understand the risks.
   345    oidc.tls.insecure.skip.verify: "false"
   346  
   347    # Add Deep Links to ArgoCD UI
   348    # sample project level links
   349    project.links: |
   350      - url: https://myaudit-system.com?project={{.metadata.name}}
   351        title: Audit
   352        description: system audit logs
   353        icon.class: "fa-book"
   354    # sample application level links
   355    application.links: |
   356      # pkg.go.dev/text/template is used for evaluating url templates
   357      - url: https://mycompany.splunk.com?search={{.spec.destination.namespace}}
   358        title: Splunk
   359      # conditionally show link e.g. for specific project
   360      # github.com/antonmedv/expr is used for evaluation of conditions
   361      - url: https://mycompany.splunk.com?search={{.spec.destination.namespace}}
   362        title: Splunk
   363        if: spec.project == "default"
   364      - url: https://{{.metadata.annotations.splunkhost}}?search={{.spec.destination.namespace}}
   365        title: Splunk
   366        if: metadata.annotations.splunkhost
   367    # sample resource level links
   368    resource.links: |
   369      - url: https://mycompany.splunk.com?search={{.metadata.namespace}}
   370        title: Splunk
   371        if: kind == "Pod" || kind == "Deployment"
   372  
   373    extension.config: |
   374      extensions:
   375          # Name defines the endpoint that will be used to register
   376          # the extension route.
   377          # Mandatory field.
   378        - name: some-extension
   379          backend:
   380            # ConnectionTimeout is the maximum amount of time a dial to
   381            # the extension server will wait for a connect to complete.
   382            # Optional field. Default: 2 seconds
   383            connectionTimeout: 2s
   384  
   385            # KeepAlive specifies the interval between keep-alive probes
   386            # for an active network connection between the API server and
   387            # the extension server.
   388            # Optional field. Default: 15 seconds
   389            keepAlive: 15s
   390  
   391            # IdleConnectionTimeout is the maximum amount of time an idle
   392            # (keep-alive) connection between the API server and the extension
   393            # server will remain idle before closing itself.
   394            # Optional field. Default: 60 seconds
   395            idleConnectionTimeout: 60s
   396  
   397            # MaxIdleConnections controls the maximum number of idle (keep-alive)
   398            # connections between the API server and the extension server.
   399            # Optional field. Default: 30
   400            maxIdleConnections: 30
   401  
   402            services:
   403                # URL is the address where the extension backend must be available.
   404                # Mandatory field.
   405              - url: http://httpbin.org
   406  
   407                # Cluster if provided, will have to match the application
   408                # destination name or the destination server to have requests
   409                # properly forwarded to this service URL.
   410                # Optional field if only one service is specified.
   411                # Mandatory if multiple services are specified.
   412                cluster:
   413                  name: some-cluster
   414                  server: https://some-cluster