Harness Platform FAQs
I have a secret that is connected to Vault. Do I need to connect to Vault to view it?
For security reasons, access to the secrets requires a connection to Vault. However, you are allowed to use them. For more information, go to the following:
You can reference the secrets using the following as a guide.
Reference the secret by identifier
Why am I getting a "missing expected [" error when I didn't get it before?
You might get the error below because Harness standardized to move from using maps to sets of strings for tags.
Planning failed. Terraform encountered an error while generating this plan.
Error: missing expected [
...
Error: Terraform exited with code 1.
Error: Process completed with exit code 1.
To fix this, update your state file to change the tags field from a map to a set of strings, for example "tags": {}
to "tags": []
.
Which RBAC permissions are required for users who execute pipeline tasks using the API?
The user needs the same permissions to execute pipeline tasks via API as they would need when running the same tasks through the Harness UI.
How can I resolve environment variables in JEXL conditions?
Unfortunately, JEXL conditions do not support the direct usage of environment variables. The conditions in JEXL only allow the use of variable expressions that can be resolved before the stage is executed. Since environment variables are resolved during runtime, it is not possible to utilize variable expressions that cannot be resolved until the stage is run.
What is the Perpetual Task (PT) iterator delay (Max delay from PT created, to PT being assigned if delegate is available)?
The max delay is 60 seconds. Harness runs the PT iterator every 60 seconds for task assignment.
What is the delegate poll interval for new PT tasks. (Max delay from PT being assigned to delegate picking it up and executing it, say there is only 1 delegate)?
It depends on task to task, you can find the interval for your task in the perpetualTaskScheduleConfig
in the dms db.
Can I verify if delegates were available at a specific time and check their past connectivity?
Yes, you can check delegate logs for this information.
If there are some users that were manually added to the account, then will they get removed once the SCIM integration is configured/enabled for the account?
No, manually added users will not be removed after SCIM integration added, they would continue to be part of account.
What happens if the same user was manually added first and is part of the SCIM?
If the same user was manually added first and now pushed from SCIM, it would be marked externally managed, and from that point onwards this user would be updated through SCIM (i.e. name, email of user would get updated through SCIM).
Do we have any notification when delegates enter an expired state in NextGen?
We currently do not offer support for this feature. However, it is included in our roadmap for future development.
Do we have a dashboard where I can track the current status of my delegate?
Yes , you can set up Prometheus to get the metrics. For more information, go to Configure delegate metrics.
Does delegates logs are only sent to Harness or can I also query delegate logs in my own cloud logging system?
By default, delegate logs are only sent to Harness and it can be enabled/disabled using this env variable - STACK_DRIVER_LOGGING_ENABLED
. For more information, go to Delegate environment variables.
I have set up SAML successfully. Why doesn't the link populate to SSO inside the user group?
You need to enable authorization in your SAML.
I have the PL_NO_EMAIL_FOR_SAML_ACCOUNT_INVITES feature flag enabled, why am I still getting emails when I add a user in an Org/Project?
The PL_NO_EMAIL_FOR_SAML_ACCOUNT_INVITES
feature flag works for user invites. When a user is added as member to a user group, a separate notification is sent, which is not dependent on this feature flag.
I have a large list of users to fetch, but the API has a limit of 100 and takes lot of time. Do I have an alternative?
To retrieve the list of users from API, you can use the following curl command.
curl --location --request GET 'https://app.harness.io/gateway/api/users?accountId=<AccountId>&limit=3000&offset=0' \
--header 'accept: application/json, text/plain, */*' \
--header 'authorization: Bearer ${token}' \
Can the same Github Repository be used for different projects with GitX Enabled?
Yes, you can add multiple projects to the same repository. GitX is entity-based, not project-based.
Does Harness Support ever have write access to our account?
No, Harness will never have any write access to your account.
Is auto-upgrade available for ECS delegates?
No, we only support auto upgrade for Kubernetes delegates.
Is SAML single logout URL supported?
Yes it is supported. You can configure this while setting up SAML.
What is the Idle Session Timeout? Can it be configured?
The idle session timeout is 24 hours. You can configure the session timeout via Account Settings.
When does the old replicas get clear out post getting disconnected for immutable delegates?
They are cleared out in 6 hours after they're disconnected. For more information, go to Delete replica pods.
Do we support auto upgrade in Helm type delegates?
Yes, we support auto upgrade in both these type delegates. This can be achieved by following upgrader.enabled=true
while running the install command.
Do we log the GET Calls in our Audit Logs?
We don't support Audit Trails for read API request like GET.
I have my Environment at Org/Project/Account Level can I Git sync them?
No, this isn't currently supported.
Is there a way to exclude a delegate from taking a task?
There is no way as of now to exclude delegates from picking up tasks for other pipelines.
What is the difference between the delegate YAMLs of account vs org vs project?
We differentiate the delegate YAML based on the value of DELEGATE_TOKEN
.
There are ‘Delegate Profiles’ for delegates in the FirstGen. There are 'Startup Script' in it. What is the equivalent in NextGen?
You can use INIT_SCRIPT
when launching the delegate. For more information, go to Install a delegate with third-party tool custom binaries.
How can I find User login activity in Harness?
You can filter and find user login activity in the Audit trail (in both FirstGen and NextGen).
How can I securely store my delegate tokens?
You can store delegate tokens as Kubernetes secrets. For more information, go to Store delegate tokens as secrets.
You can also store the token in vault and reference the token in YAML. For more information, go to Rotate tokens.
Why don't I see data for a new user?
Check the user group assigned to the user. If the user isn't assigned to any user group/role, they will not be able to view or access any relevant data.
What is the Helm delegate chart name?
The Helm chart name is harness-delegate-ng
. You can access the metadata and the repo below.
- https://app.harness.io/storage/harness-download/harness-helm-charts/
- https://github.com/harness/delegate-helm-chart
Is there an expiry for 2FA secrets?
No, there is no expiry for 2FA secrets.
Is there any way to automatically accept an invite for local login users?
No, it’s not possible because initially, the user must use the invite email to set their password. This is only possible when using SAML authentication.
Is there any ability for an admin user to assume the same role as an alternate user for testing permission issues?
No, there is no such option currently. To debug permission related issues, check the groups and roles assigned to user.
What causes the “User is not authorized to access the account. Please contact your admin” when trying to accept the invite and set up a local login password?
The most common reason for this failure is your account has domain whitelisting applied, and the domain used in your username is not in the allowed list. In this case, you can see the DOMAIN_WHITELIST_FILTER_CHECK_FAILED
on the Network tab.
How is rate limiting applied in Harness?
Harness internally imposed a limit to allow a certain number of requests per minute as well as per second.
The limit we have imposed is if an account exceeds 350 QPM or 350/60 = 5.833 QPS, then the requests will be throttled for all the external facing APIs.
There are 14 external facing API resources, and this limit applies to all those APIs.
350 QPM and 5.833 QPS
The limit gets imposed based on QPM as well as QPS.
The Ratelimiter decides on what seconds out of the 60 for every minute which 50 seconds it will allow 6 QPS and rest 10 seconds allow only 5.
While running queries you might sometimes observe 429s that is because of the above limit.
429 - Server Errors : The rate limit is exceeded.
Why do I receive errors with Okta SCIM provisioning?
Below are the steps you can use to troubleshoot SCIM provisioning with Okta.
Validate the SCIM Connector Base URL. This can be mistaken with the SAMl URL.
URL: https://app.harness.io/gateway/ng/api/scim/account/<account_id>
Also, when you create the personal access token, make sure it has the required the role bindings (admin).
What is the Graphql API query to list executions with details between a specific time range?
{
executions(filters:[{startTime:{operator:AFTER, value:1643285847000}},{endTime:{operator:BEFORE,value:1656332247000}}], limit:30) {
pageInfo {
limit
offset
total
}
nodes {
startedAt
endedAt
tags {
name
value
}
id
application {
id
name
}
status
cause {
... on ExecutedByUser {
user {
email
}
}
... on ExecutedByTrigger {
trigger {
id
name
}
}
}
... on PipelineExecution {
pipeline {
id
name
}
memberExecutions{
nodes{
... on WorkflowExecution{
workflow{
id
name
}
id
artifacts {
buildNo
artifactSource {
name
}
}
outcomes{
nodes{
... on DeploymentOutcome{
service{
id
name
}
environment{
id
name
}
}
}
}
}
}
}
}
... on WorkflowExecution {
workflow {
id
name
}
id
artifacts {
buildNo
artifactSource {
name
}
}
outcomes{
nodes{
... on DeploymentOutcome{
service{
id
name
}
environment{
id
name
}
}
}
}
}
}
}
}
2FA not working and user is unable to login
A user can either request the admin to resend the 2FA and user can reset the 2FA in authenticator app or use the https://totp.danhersam.com/ to enter the secret key and generate the code to login.
What are the required permissions for SCIM tokens?
To perform SCIM operation with a token, the Service Account needs to have the mandatory permission in the role. Only the User/User Group permission should be assigned to the service account to perform SCIM operations with the created token.
How can I disable Local Login in my Harness account?
Contact Harness Support to enable the feature flag DISABLE_LOCAL_LOGIN
to disable local login for the account.
Which API fetches all the users in Harness?
curl --location --request GET 'https://app.harness.io/gateway/api/users?accountId=enter_accountid_here&limit=3000&offset=0' \
--header 'authority: app.harness.io' \
--header 'accept: application/json, text/plain, */*' \
--header 'accept-language: en-GB,en-US;q=0.9,en;q=0.8' \
--header 'adrum: isAjax:true' \
--header 'authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'referer: https://vanitytest.harness.io/' \
--header 'sec-ch-ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"' \
--header 'sec-ch-ua-mobile: ?0' \
--header 'sec-ch-ua-platform: "macOS"' \
--header 'sec-fetch-dest: empty' \
--header 'sec-fetch-mode: cors' \
--header 'sec-fetch-site: same-origin'
Why don't I have the Launch Next Gen button in the First Gen UI after logging in?
There are permissions for the User group Hide NextGen Button under Account Permission in any User Group. Make sure this is toggled to Off, or you won't see the Launch Next Gen option in the UI.
What causes user login issues when users are part of multiple accounts?
If you have multiple accounts and one of them uses SAML login while the others use username and password, you need to ensure that the SAML account is set as the default account. Otherwise, the SAML login mechanism won't work as Harness considers the login mechanism of the default account only.
Are delegate tokens stored in MongoDB?
Yes, the delegate tokens are stored in MongoDB.
Should we store the token that hasn't been generally available yet in the secret manager?
No, we don't use the customer secret manager to encrypt delegate tokens. Rather than storing the token in plain text, we leverage Harness' internal encryption mechanism. This mechanism enables us to store the token's encrypted value in the database. This approach enhances security and mitigates potential risks associated with storing sensitive information.
Do we have any static limit in NextGen like FirstGen (pipeline/service creation etc)?
No, we don't have limit on pipeline creation. We do have a limit for entity creation for the free/community tier, but no limits for the enterprise tier.
Is there a limit to the number of triggers a pipeline can have?
There is no limit to the number of triggers for a pipeline.
Can we raise the parallel stage limit for a customer?
These limits are important for the stability of our systems. The limit is set at 30 for parallel stages for enterprise customers.
Do we have the ability in NextGen to alert/notify when a delegate is down?
No, we don't currently have this feature.
Why can't I delete a connector referenced by an entity that is no longer present?
You can delete a connector referenced by an entity that is no longer present by enabling the Force Delete option in default settings.
What is the naming convention used when creating a default delegate token?
The default token is named using the convention of the level at which it is being called, for example, default_token/org/project
.
Can I delete my delegate token?
The delegate token cannot be deleted, it can be only revoked. Revoked tokens are deleted after 30 days.
When we add a delegate tag via API, why does the tag disappear when the delegate is restarted?
The delegate tags disappear because they are not in the original delegate YAML that was used to start the delegate.
When my delegate is restarting, why do I see "Failed to find field for io.kubernetes.client.openapi.models.V1JSONSchemaProps.x-kubernetes-list-map-keys" in logs?
You should create the delegate with the minimum recommended resources to solve this issue. For more information, go to Delegate sizes.
Is there functionality to auto-accept invites for username/password login?
No. This option is available for SAML-based logins because authentication is handled by the SAML provider. For username/password logins, you must create a password in Harness.
Do we have documentation for installing a custom certificate in a Kubernetes-based delegate?
Yes you can install custom certificates for Kubernetes delegates. For more information, go to Install delegates with custom certs.
What happens to tasks rejected by the delegate?
Delegate reject tasks or fail to acquire tasks when CPU and memory reach above a certain threshold if the flag DYNAMIC_REQUEST_HANDLING
is set as true in the YAML.
Can we set the delegate to reject new tasks if x% of memory is being consumed?
Yes, you can specify what threshold to reject the task using the flag DELEGATE_RESOURCE_THRESHOLD
, otherwise, the default value is 80%. For more information, go to Configure delegate resource threshold.
What is the behavior when DYNAMIC_REQUEST_HANDLING is set to false or not set at all when memory reaches 100% ?
It will not try to acquire any task. Once the resource level goes down it will start accepting tasks again. There will be no crash of delegates or shut down of delegates during this case.
If project level users don't have access to account-level secrets, they should not be able to access them. What can I do so that project level users won't be able to access account-level secrets? How is this handled by RBAC when using expressions?
The feature flag PIE_USE_SECRET_FUNCTOR_WITH_RBAC
when enabled can help you achieve this.
How can we prevent users with project scope access to account-level secrets?
This can be changed by modifying the role bindings of the All Account Users user group and assigning any other Role and ResourceGroup as per their need.
Does Harness support auto-upgrade for Docker delegates?
No, auto-upgrade is not an option for Docker delegates. You can update your Docker delegate image when Harness releases a newer version.
Do we have rate limit For FirstGen, exporting deployment logs? Can this be removed or modified per account?
Yes, Harness enforces rate limits. For more information, go to Rate limits. We cannot remove rate limits per account, but you can always request an increase.
Is there a way to get a secret as base64-encoded?
No there isn't support for getting secrets as base64, but you can store the value as a base64-encoded secret and then get the value using the expression secrets.getValue("my_secret")
.
In pipeline chaining, is it possible to reference a child's variables in the parent pipeline without using outputs?
We can refer to child execution expression in parent pipeline only via outputs using the following expression <+pipeline.stages.child.pipeline.stages.b_stage.spec.artifacts.primary.tag>
.
Is create-namespace option available in Harness while deploying chart?
You can point to a manifest file containing just the namespace YAML. This means you can create a Kubernetes YAML file that defines only the namespace you want to use for your application. Even a shell script step would be simple enough in this case, and use a kubectl command directly. This suggests that using a shell script as a step in your deployment process to apply the namespace YAML file is straightforward. You can use the kubectl command in the shell script to create the namespace.
Where can we download the Helm chart for delegate manually and not using Helm commands?
The delegate Helm chart is available here.
I have a custom delegate and I'm trying to execute the script, but the script is executing as a root user. How can I change the user?
In the delegate YAML, you need to modify the runAsUser
field, which is set to 0, indicating that the script runs as the root user.
How can I list all delegates in account?
You can use the list delegate API.
How can I revert the "externally managed" status of user groups if they were indeed managed by SCIM earlier?
If user groups were previously provisioned via SCIM and marked as "externally managed," you can update it by updating the "externally managed" field back to false via Terraform or API.
Can I rename the project identifier?
No, the project identifier can't be renamed because it is set when the project is created. You can rename the project, but not the identifier.
Is the io_harness_custom_metric_task_execution_time in seconds or milliseconds?
The time it takes to complete a task (in seconds). For more information, go to Configure delegate metrics.
We have a user group named Ex:"Test", where the team members are given access to edit cloud providers. Even though Manage Cloud Provider option is enabled, User from that User Group are not able to edit.
Check the usage scope. Even if the user group has permissions, if the usage scope has a different application added apart from the ones specified, then the users won't be able to edit the cloud providers.
Delegate mTLS Support
Currently, mTLS is only supported for Kubernetes delegated. We will be adding support for Helm and Docker delegates in the future. Harness supports both Loose and Strict mode.
How do I check the version in Harness Self-Managed Enterprise Edition?
You can check the version by running the command below.
helm list -n namespace
It will show the app version, which is the version of your Harness edition.
Do you have documentation for network setup or Harness Deployment Architecture?
Yes, we do have documentation for Harness deployment architecture, refer to this Documentation.
Do you have either a Splunk option or another public cloud option like GCS for audit log streaming?
No, we don't currently have this option.
Can I set the delegate upgrader job to point to a custom private registry?
Yes, the delegate upgrader
job can be set to point to a custom private registry. For more information, go to Use automatic upgrade with custom delegate images.
Can I set SCM_SKIP_SSL while working on Docker delegate?
Yes, you can add SCM_SKIP_SSL=true
to the environment
section of the delegate YAML.
For example, here is the environment
section of a docker-compose.yml
file with the SCM_SKIP_SSL
variable:
environment:
- ACCOUNT_ID=XXXX
- DELEGATE_TOKEN=XXXX
- MANAGER_HOST_AND_PORT=https://app.harness.io
- LOG_STREAMING_SERVICE_URL=https://app.harness.io/log-service/
- DEPLOY_MODE=KUBERNETES
- DELEGATE_NAME=test
- NEXT_GEN=true
- DELEGATE_TYPE=DOCKER
- SCM_SKIP_SSL=true
Can I create another project under the project?
As per the current design, you can't create a project under the project. The project is a separate entity that can't be created inside another project.
How can I customize a build pipeline? For example, how can I create a script to clone the repo from TFS?
You can run a script in a run step of a build pipeline, as detailed in this Run step settings, and you should be able to clone the repo.
How does the active service count show in License subscription?
We show the service usage account for the last 30 days.
When we try to open a Git-enabled pipeline, why doesn't the branch dropdown display all the branches?
This behavior is expected when there are many branches in the repo due to pagination. To select branches that are not listed, try entering the full branch name manually. This should allow you to open the pipeline from that branch.
How many branches are listed in the branch dropdown UI when we try to open a Git-enabled pipeline?
We typically list 20-30 branches, depending on the Git provider. Fetching all branches would be time-consuming.
Where can we add the env attributes for delegate during Helm chart installation?
Delegate deployment for Helm chart installation is configured to pick the environment variable from ConfigMap. Check the name of the ConfigMap in the chart deployment YAML, the attribute is envFrom and edit the ConfigMap to add the corresponding environment variables.
How does a delegate identify its scope for registration?
While installing delegates, we do not explicitly configure it to connect at the account, organization, or project scope. It is decided based on the scope of the delegate token. If the token is from the project scope, the delegate will register at the project level. This also applies to the organization and account level.
Will the delegate continue to work if we delete the delegate token being used?
The delegate registration is only valid till the delegate token with which it has registered is available and not expired/revoked. If the delegate token is deleted, the delegate registration will no longer be valid, and it will fail authorization.
How many types of API tokens are there?
There are two types of API tokens, one can be created at the user profile level. These are prefixed with pat.xxxx....
, meaning personal account token. The second one can be created at the service account level, which is prefixed as sat.xxxxx....
, meaning service account token.
How do we assign permission to the API tokens?
We do not assign permission directly to the account tokens. They inherit permissions from the user if they are created at the user profile level, or the service account if they are created at service account level.
What are Harness Conditional Alerts and Notifications?
Conditional alerts are a useful tool, which you can use to trigger notifications on specific conditions that are met or exceeded.
For more information, go to Create conditional alerts.
Why am I receiving a 429 error response with regards to rate limits?
Harness has several rate limiters on the platform. Sending multiple requests in quick succession will generate the 429 response. For more information, go to Rate limits.
Do we have docs for the infrastructure requirements to install Harness Self-Managed Enterprise Edition?
Yes, for more information, go to Production environment deployment infrastructure.
What is required permission to add a SMTP configuration? I am getting a "Missing permission core_smtp_edit on smtp" error when I try to add Authentication Settings or Account Settings.
The permission needed for this Account Admin. Currently, only an Account Admin can edit the SMTP configuration.
Does Harness allow you to set 2 AMIs with different CPU architecture?
Harness doesn't allow this in the same ASG.
How can you control on-demand or spot provisioning within ASG group / target?
We supported spotinst ASG in FirstGen and we also have spotinst for NG also, to know more about it please read the following Documentation.
Can I pull in from multiple different Okta providers for multiple different teams with different RBAC/group needs?
No, we support only one SSO provider at a time, which is configured at the account level.
Will the Cloud Connector propagate the tags to AWS calls?
No, The cloud connector will not propagate the tags to AWS while making calls.
Where can we see the logs of AWS calls?
We have limited logging for the AWS calls.
Ho do delegate selectors work in connectors?
The delegate selector in a connector always works as AND and not OR. Let's say you have delegate A named "ABC" and delegate B named "BCD". In the connector selector options, you will need to give only 1 tag, either "ABC" or "BCD". If you need to have multiple delegates there, then you will need to add custom tags to the delegate and specify the common one in the selector.
If the value for secret starts with # for reference secrets
In case you value start with # in case of reference secrets, always use Double quotes as “#” is a special character to represent comments and it will work as expected.
Ex: The value for the secret is say "#7767test"
echo "<+secrets.getValue("account.aaaatestaaatest")>"
Can I delete a user in the UI that was provisioned via SCIM?
Admins can delete users from the Harness UI, even if the user is provisioned via SCIM. However, this feature should only be used if the user is in a state where the SCIM app was removed, and hence the user cannot be removed.
It's important to note that if the user is a part of multiple accounts, deleting them from one account will not remove their backend entry, and they may still exist in other accounts. If you try to re-provision the user from the SCIM app, you may encounter errors as the user is still present with the same user ID in the backend.
To avoid these issues, you will need to remove the user completely from the SCIM app and provision them again as a new user.
Is their a way to check which delegates are running at a particular time?
You can review the delegate logs to find the task that it was executing around a given time frame.
Why am I getting an "IllegalArgumentException: kubectl is not installed for version V1_13. Available versions are: []" error?
You might receive this error if you are using minimal delegate images. Install the kubectl version and check to see if the $PATH is updated correctly.
Why is the delegate not coming up and returning a no space left error?
When starting delegates, Harness installs some third party binaries(kubectl, Helm, etc.). These binaries require space. Make sure the delegate machine has sufficient remaining disk space.
Is there a tool available for unit testing Harness rego policies before deployment?
No, we don't provide a dedicated tool for testing Harness rego policies. However, you can use the general-purpose testing tool provided by Open Policy Agent (OPA) to test your policies. More details can be found in the Policy Testing with OPA documentation.
How can I assign the same delegate replica to all steps in my pipeline?
While there isn't a dedicated configuration option for this purpose, you can output the environment variable $HOSTNAME in a Shell script and refer the delegate selector of the subsequent steps to that output. Short example:
# Step 1
name: select_delegate
identifier: select_delegate
spec:
spec:
script: |
HOST_SELECTOR=$HOSTNAME
...
outputVariables:
- name: HOST_SELECTOR
type: String
value: HOST_SELECTOR
# Step 2
name: use delegate
identifier: use_delegate
spec:
...
delegateSelectors:
- <+execution.steps.select_delegate.output.outputVariables.HOST_SELECTOR>
Does the NextGen platform support the same cron syntax for triggers as the FirstGen platform?
Yes, the NextGen platform supports both the QUARTZ and UNIX syntax formats for cron triggers. For more information, go to Schedule Pipelines Using Cron Triggers.
Can I get user group and user lists in CSV or Excel?
No, we don't support that feature currently.
What are the differences between delegate tag formats?
yy.mm.xxxxx.minimal
: This tag represents the minimal image format, which is recommended for production usage. It stands out due to its absence of high or critical vulnerabilities, making it a secure choice. Furthermore, this image format is lighter than the default option because it doesn't have the default binaries installed.yy.mm.xxxxx
: This format corresponds to the standard delegate image. It includes all the default binaries and is a suitable choice for users who are relatively new to Harness and do not have stringent security requirements. This image provides a comprehensive set of tools and functionalities for general usage.1.0.8XXX
X`: This format denotes an older version of the delegate, often referred to as the legacy delegate. New Harness accounts no longer include this delegate version, and users are strongly encouraged to migrate to the standard delegate for better compatibility, performance, and security.
For more information, go to Delegate image types.
Does Harness have OOTB roles at the project level?
Yes, we do have a Project Admin role built in and also no ability to delete built in roles. Org and Project specific built-in roles are available only after the corresponding entity is created, and they are only available in the respective scope.
Why are delegates added to the blocklist?
The purpose behind the blocklisting of delegates is to ensure that every delegate task undergoes one or more validation/capability checks. When a task is assigned, we check if we have previously validated the delegate's capabilities. If the validation was done within the past 6 hours, it is considered valid.
However, if it has been more than 6 hours or if it's the first time, we perform the validation again. If the validation fails, the delegate is blocklisted for 5 minutes for the same criteria. If another task with the same criteria is assigned during these 5 minutes, the delegate will be blocklisted for it as well. So, it's important to check which validation criteria were added to the task and which validation is failing.
What are the Kubernetes version requirements for delegate installations?
We try to support all the active Kubernetes releases (that’s last 3 releases according to our versioning policy), i.e. we support anything that’s not EOL.
Can we increase the daily deployment limit to 10000 for a customer?
Yes, we are capable of increasing the daily deployment limit > 10000 per day.
How do delegates share information like a Helm Chart and its contents on the same stage?
To share information like a Helm Chart and its contents among delegates, there are two steps. First, download the values.yaml
files on any of the delegates (it could be just one or more depending upon how many values.yaml
files have been configured) and pass them to the next step. Then, the delegate downloads the Helm chart and uses the values.yaml
files that were passed by the previous step. For instance, Delegate 1 can execute Fetch Files and pass the values/manifests to Delegate 2 that will execute the Helm Install/Apply.
How do delegates communicate with each other when they are sharing information?
Delegates don't communicate with each other. They go through Harness Manager to retrieve the result of the tasks performed by another delegate.
Are customer files stored in the manager during execution while Delegate 1 is communicating directly with Delegate 2?
Harness doesn't store customer manifest files in Harness Manager. Only values.yaml
files are passed through Harness Manager.
Are secrets in values.yaml
files rendered in Harness Manager?
No, these secrets are never rendered in Harness Manager. They are only rendered in the delegate.
Is it possible to define per User Groups who can/can’t open support tickets?
Currently anyone in the account can open a ticket, and access is not restricted.
How can I see who's logged into my account?
You can use the audit trail. For more information, go to Audit trail.
Is there documentation on installing and upgrading the Harness Self-Managed Enterprise Edition cluster?
Yes. For more information, go to Install using Helm and Upgrade the Helm chart.
How do I retrieve the correct author's email on a GitHub Pull Request Event?
When you push commits from the command line, the email address that you have configured in Git is associated with your commits. However, for web-based operations, GitHub provides an option to maintain privacy regarding your email address. To ensure that you can fetch the correct user email through the expression <codebase.gitUserEmail>
, you will need to disable the "Keep my email addresses private" option in your GitHub settings.
Why is my commitSha resolving as null on manual runs?
The expression <+trigger.commitSha>
is available when the event comes from a Git operation. Instead, use the expression <+codebase.commitSha>
for parsing manual triggers.
How can I specify my pipeline to select a delegate based on a tag?
In the advanced tab of your pipeline, you can add specific tags in the Delegate Selector field.
How can I prevent lockouts when using SSO for login?
To prevent lockouts or in the case of OAuth downtime, a user in the Harness Administrators Group can utilize the Local Login URL [http://app.harness.io/auth/#/local-login] to log in and update the OAuth settings. For the Harness production cluster prod-3, the local login URL is [https://app3.harness.io/auth/#/local-login].
How can I autoscale a delegate using HPA?
By default, Helm delegates have autoscaling disabled, which you can enable by setting the value autoscaling.enabled=false
. For Kubernetes delegates, you need to write an HPA manifest to scale the delegate's replicas.
When defining a secret with a dollar sign, why does the shell print the secret partially?
Harness doesn't allow the $
symbol in your secret value. If your secret value includes this symbol, you must use single quotes when you use the expression in a script.
How can I access comprehensive information on Harness Security, including disaster recovery procedures, infrastructure details, and policies?
For in-depth insights into Harness' security practices, including disaster recovery procedures, infrastructure aspects, and policies, we recommend visiting our Trust Center. This centralized resource is designed to provide you with all the necessary information regarding the security measures we have in place to safeguard your data and operations.
How do we provision users with pre-defined or custom roles?
With Harness, users and groups can be created automatically via SCIM. Permissions in Harness are granted via roles. You can use built-in roles or create your own at every Harness level (Account, Organization, and Project). You can assign roles to groups, and assigning roles to groups gives all the users in the group the permissions spelled out in the role. For more information, go to Role-Based Access Control (RBAC) in Harness.
My delegate shows that it will expire in 2 months. Will it shut down after it expires?
Harness follows an N-3 support policy for delegates, which means we support the current version and the three preceding versions. With a new version released approximately every two weeks, each update brings enhanced features and general fixes. For instance, if you have version 24.03.XXXXX
installed, all images from 24.01.XXXXX
to 24.03.XXXXX
are supported. Delegate expiration doesn't imply that the delegate ceases to function. However, it may lead to potential issues if the backend advances significantly, causing the delegate to lose backward compatibility. To avoid this, we recommend upgrading the delegate at least once per quarter if you don't have automatic upgrades enabled.
How do I create a custom URL for my Harness account?
If you want a vanity URL, you can reach out through to Harness Support and request to create a custom subdomain, for instance: mycompany.harness.io
.
How do I identify files changed in a Git push event?
We don't support this feature natively, but you can write a similar script to the following:
# Get commits from the payload
commits='\<+trigger.payload.commits>'
# Extract the values of added, removed, and modified attributes using string manipulation
added=$(echo "$commits" | sed -n 's/.*"added":\s*\(\[[^]]*\]\).*/\1/p')
removed=$(echo "$commits" | sed -n 's/.*"removed":\s*\(\[[^]]*\]\).*/\1/p')
modified=$(echo "$commits" | sed -n 's/.*"modified":\s*\(\[[^]]*\]\).*/\1/p')
# Remove the square brackets and quotes from the extracted values
added=$(echo "$added" | tr -d '[],"')
removed=$(echo "$removed" | tr -d '[],"')
modified=$(echo "$modified" | tr -d '[],"')
# Concatenate the values into an array
array=($added $removed $modified)
# Print the concatenated array
for element in "${array[@]}"; do
echo "$element"
done
What rate limiting policy does Harness employ for API requests?
Harness imposes a rate limiting policy on API requests to ensure system stability. This policy sets a limit of 350 queries per minute (QPM) and 5.833 queries per second (QPS) for all external-facing APIs.
How is the rate limit calculated?
The rate limit is imposed based on both QPM (queries per minute) and QPS (queries per second). If an account exceeds 350 QPM or 5.833 QPS, the requests will be throttled for all external-facing APIs.
How does the Rate Limiter work within a minute?
Within a minute, the Rate Limiter dynamically allocates time intervals. For 50 seconds, it allows up to 6 QPS, and for the remaining 10 seconds, it restricts the rate to 5 QPS.
What happens when the rate limit is exceeded?
If the rate limit is exceeded during API requests, you may encounter HTTP status code 429 (Server Errors) indicating that the rate limit has been exceeded. This is a temporary restriction, and it is recommended to wait until the rate limit resets before making additional requests.
How can I pass input variables to pipelines using a custom Curl trigger in Harness?
You can pass input variables to a pipeline using a custom Curl trigger in Harness by making a POST request to the Webhook URL associated with the pipeline trigger. You can include your custom variables as JSON data in the request body. Here's an example command:
curl -X POST -H 'content-type: application/json' \
--url 'https://app.harness.io/gateway/pipeline/api/webhook/custom/v2?accountIdentifier=&orgIdentifier=default&projectIdentifier=CD_Docs&pipelineIdentifier=Triggers&triggerIdentifier=Custom' \
-d '{"sample_key": "sample_value"}'
Replace {"sample_key": "sample_value"}
with your custom variables, such as {"tag": "stable-perl"}
, which can be declared as part of the pipeline and provided as runtime inputs when triggering the pipeline.
What should I do if I want to update an existing User Group in Harness, but I encounter an error preventing me from saving the changes?
If you encounter an error when attempting to save changes to an existing User Group in Harness, particularly an error related to the Harness Identifier, it may be due to a restriction on naming Entity identifiers. According to Harness design specifications, certain characters, such as hyphens (e.g., "-"), are not allowed in Entity identifiers.
Why am I experiencing this issue with User Groups?
This issue can occur if a User Group was provisioned via SCIM (System for Cross-domain Identity Management) before October 2022, and it contained a hyphen ("-") in its name. At that time, the hyphen was allowed, but the design restrictions have since changed.
What is the recommended resolution for this issue?
To resolve this issue, you need to de-provision the affected User Group from Harness and then provision the same User Group again. This will create a new Harness Identifier for the group, ensuring that any naming restrictions are applied correctly, and it should no longer contain hyphens or other disallowed characters.
Why is the Harness delegate instance status showing Expiring in 2 months but the latest version is valid for 3 months?
For the delegates with an immutable image type, the instance status will show Expiring in 2 months only, it's the expected behavior.
Why am I not seeing my deployments on the Overview page of the project?
Please check the timeframe for the page. By default the timeframe is set to 30 days. You can adjust this to a different time frame.
Harness dashboard is not showing a previous deployment, why?
Please check the timeframe for the dashboard page. By default Harness sets this value at 30 days. It is possible that the deployment was executed before this timeframe.
When we recommend setting POLL_FOR_TASKS to true in a non production environment?
For customers who do not want to take the web socket path due to any infrastructure challenges, we recommend enabling POLL_FOR_TASKS
.
For customers with polling enabled, delegate checks with Harness for any task to execute based on the interval set, versus web socket communication being immediate.
Does polling mode only work for legacy delegates and not delegates with an immutable image type?
Currently, by default polling is only supported for legacy delegates, not for delegates with an immutable type. Polling mode works for delegates with an immutable when you add POLL_FOR_TASK
as true
in the delegate YAML.
What does Delegate Identifier=DETECTING mean?
Delegate Identifier=DETECTING
is auto upgrade which can be on or off, for more information, go to Determine if automatic upgrade is enabled.
What is cron job in the Kubernetes manifest, and why is it needed?
The Kubernetes manifest has a component called upgrader. The upgrader is a cron job that runs every hour. Every time it runs, it makes a call to Harness Manager to determine which delegate version is published for the account. The cron job is required for the auto upgrade flow.
How can we disable cron job?
If you need to disable auto upgrade, first run the following command to suspend auto-upgrade on the installed image:
kubectl patch cronjobs <job-name> -p '{"spec" : {"suspend" : true }}' -n <namespace>
Then, in the delegate manifest, locate the CronJob
resource. In the resource spec, set the suspend field to true spec: --suspend: true
.
Why don't I see Dashboards in my Harness Self-Managed Enterprise Edition installation?
Dashboards are a licensed functionality. If you don't have a current license, dashboards are not available in your installation.
Connector error causing pipeline failure
Connectors are often tied to a secret, such as a password or SSH key, that can expire. Expired credentials are a common cause of execution failures with connector errors. If your build fails due to a connector error, check your connector's configuration to confirm that the credentials aren't expired.
How can I avoid pulling Harness delegate images from a public repo?
You can add a special Harness Container Image Registry connector to your Harness account. With this connector, the delegate pulls these images from the Harness Container Image Registry only.
For more information, go to Connect to the Harness container image registry
Does Harness support Google cloud functions in FirstGen and NextGen?
Yes, Harness supports Google cloud functions in both FirstGen and NextGen.
For more information, go to Google cloud functions
How can I use Harness CD with Google Cloud Functions?
Harness CD pipelines help you to orchestrate and automate your Google Cloud Function deployments and push updated functions to Google Cloud.
For more information, go to Google Cloud Functions.
Why am I getting the "Unsupported block type with the Run on Remote Workspace" error?
It might be due to the configuration. Try this instead for the Terraform config file:
terraform {
backend "remote" {
hostname = "http://app.terraform.io "
organization = "your-organization"
workspaces {
name = "your-workspace"
}
}
}
For more information, go to Run on remote workspace.
What are delegate rings?
Harness uses the ring methodology, which is a popular approach in software release management for delegate releases. There are four rings, and to mitigate any adverse effects that may arise from new delegate releases, each Harness account is assigned a specific ring that corresponds to the latest delegate version for that account.
I have automatic upgrade on in my delegate. Why is my delegate version behind what's listed as the latest version in Docker Hub?
Harness uses the ring methodology commonly used in software release management for delegate releases. The version for your account can be overridden to use the latest in Docker Hub using the override delegate image tag API.
Why does the reset password link keep sending me back to the login page?
The account password authentication might be disabled with another auth enabled, such as Active Directory. Reach out to your Active Directory Administrator in that case to reset it.
How can I restore deleted projects and pipelines?
Unfortunately, we don't soft delete entities and hard delete them. Therefore they can't be easily restored. Some entities can be restored using YAML from the audit trail.
We don't have certain projects, but the Harness Terraform modules continue to read them. How can we remove unwanted data that exists in Harness?
This data could be in the state file if changes were made outside of the it. Inspect your state file.
I am getting an "Error Summary Invalid request: At least 1 valid user group is required in Approval". What causes this error?
The variable being passed for the Approvers > User Groups is potentially invalid or at the wrong scope.
Can I use the delegate image from my immutable image type delegate and replace it in the YAML for the statefulset from the legacy delegate?
This is not supported. Delegates with an immutable image type should be run with delegate YAML generated from the UI, which will generate a deployment if the delegate is enabled for the account.
Here is an example manifest file for NextGen.
Why do I get a 400 error when creating a connector via the Create Connector API?
When using the Create Connector API, invalid characters (such as parenthesis) in the name can cause Bad Request (400) errors, such as:
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url https://app.harness.io/gateway/ng/api/connectors?accountIdentifier=\<ACCOUNT_IDENTIFIER>?
Doe Harness support TLS 1.3?
Both the Harness Delegate & SaaS support TLS 1.3, the default TLS version. It is worth noting that each specific task implementation can create its own separate HTTP client, which can advertise any TLS version of its choice. The connector check uses the task-specific HTTP client rather than the delegate's HTTP client. Some tasks prefer to use TLSv1.2 in certain use cases, perhaps due to legacy reasons. However, it is possible that this might change in the future, and full TLS 1.3 support might eventually be rolled out. As of now, certain connectors still prefer TLS 1.2.
Is there a tool to migrate from FirstGen to NextGen?
Yes. You can use the migrator tool.
Is there a timeline of when I need to upgrade to NextGen by from FirstGen?
Yes. For more information, go to Timeline.
Where can I find the source code to the Harness Delegate?
Here is the link to the source code for the delegate.
Where can I find the source of the Helm chart for the delegate?
Here is the source of the Helm chart for the delegate.
Where can I find delegate release notes?
For information about Harness Delegate features, go to the Delegate release notes.
Why is automatic upgrade turned off for my delegate?
It could be it was disabled through kubectl patch cronjobs <job-name> -p '{"spec" : {"suspend" : true }}' -n <namespace>
, or the cronjob was deleted, or the cronjob never existed (the Kubernetes audit logs can help you find out if it exists).
Is there documentation for the list Harness allowlists for Google GCP?
Yes. For more information, go to GitOps allowlist.
Is there a feature to route info/error diagnostics through the Harness network?
At this time, the feature is not yet available. The delegate sends information and error diagnostic logs directly to the Harness Stackdriver in the Google Cloud. This traffic does not go through the Harness network, but directly to the Google Cloud network. However, if you prefer not to send diagnostic logs, there is an option to disable this feature.
For more information, go to Delegate logs.
Is there documentation for adding and referencing text secrets?
Yes. For more information, go to Reference the secret by identifier.
What is the expression we can use if we want to use secret in a script?
If you want to use a secret in script, you can use the expression <+secrets.getValue("account.mySecret")>
.
The Harness Delegate config-watcher is causing heavy usage of disk space and causing alerts in prod nodes. How can we increase the watcher memory settings?
You can overwrite the watcher memory setting via WATCHER_JAVA_OPTS
. If you want to increase the memory for watcher, you can add the following in the delegate YAML env section - name: WATCHER_JAVA_OPTS value: "-Xmx512M"
.
Can scope creation happen during delegate install?
Delegate scope is decided by the scope of delegate token. For more information, go to Delegate scope.
Is it possible to increase the client side timeout when getting pods for a Kubernetes delegate?
Yes, you can increase the step timeout.
How can we enable the feature flag DELEGATE_TASK_CAPACITY?
For information about this feature flag, go to Delegate task capacity.
Do we need to provide both sso_group_id and sso_group_name, and if so, should they match?
Yes, you must provide both. The value provided for both sso_group_id
and sso_group_name
should be same.
Why does the Okta login goe to the FirstGen interface?
Change the Default Experience to Harness Next generation under Account Overview.
How do I scale delegate replicas?
You can update autoscaling parameters in your values.yaml
file.
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 80
For more information, go to Autoscale using replicas.
Why aren't approval notifications getting triggered when the correct user group is selected?
Please check and verify if the user group selected has any channel (email/slack, etc.) is configured under Notification Preferences.
For more information, go to Notification settings.
Do we need to enable authorization for SSO to work while setting up SAML?
Authorization is used for group mapping. It's optional and not required for SSO login to work.
How do I use a custom Helm3 version in the FirstGen legacy delegate?
You can install the latest version and set the env variable to the binary path HELM3_PATH=/opt/harness-delegate/client-tools/helm
.
For the delegates hosted on Azure VM, which authentication method should we use when setting up a vault connector?
For Hashicorp Vault, there are 5 types of Auth supported. Except AWS Auth and Token (not recommended because they need periodic renewal), any of other 3 work, depending on your setup and preference. For more information, go to Add Hashicorp Vault step 2 overview.
How can we export all FirstGen information: deployments, services, env, etc. that have been deployed?
Go to Export deployment logs and Use API audit trails.
Are trial accounts able to use the GitHub connector to attach their GitHub account?
Trial accounts are able to use the same functionality as paid accounts during the trial time period.
At what port are the delegate Prometheus metrics exposed?
The delegate Prometheus metrics are exposed on the port 3460 in the running delegate container.
How do I check for the listen ports on the delegate if netstat is not installed?
You can run the command lsof -nP -iTCP -sTCP:LISTEN
, install netstat, or bake it into the delegate image.
What Prometheus metrics are exposed on the delegate?
For a list of Prometheus metrics exposed on the Harness Delegate, go to Delegate metrics.
The Harness Delegate went down, and I didn't get a notification via Prometheus that it was in a disconnected state. Why not?
When the Harness Delegate pod goes down, its exposed metrics endpoint also goes down. These metrics can be helpful in notifying you of lost connectivity between Harness Manager and the delegate pod. However, it should be noted that your Prometheus server can also notify you of the same issue.
What API can I use to check the delegate connectivity status?
You can use the list delegates API.
Legacy delegates aren't starting up and creating a .hprof file in the container. What should I do?
For the statefulset, updating the environment variable WATCHER_JAVA_OPTS
with -Xmx512m
might help.
Deploy stage requires a service defined. Can I set up a pipeline without a service defined at a stage?
Yes, you can use the custom stage. This is a selection you can make initially while defining a pipeline stage.
How can I execute a simple Shell or Bash script step?
With a custom stage, you don't need to define a service. This is the preferred method to execute a shell or bash script step.
Is there a way to create delegate tokens via API calls in which we can do the API call for token creation and use in personalized way?
Yes there is way to create delegate tokens via API calls. For more information, go to the Create delegate token API documentation.
Does Harness support Workload identity federation for authentication?
Harness supports workload identify for Google Secret Manager.
Can we use alphanumeric characters in delegate names?
Yes, you can use alphanumeric characters, but the name shouldn't start or end with a number.
Can you give details about recent changes to Harness Self-Managed Enterprise Edition?
Yes, you can refer to the release notes.
If we have a main pipeline linked to a chained pipeline, when main pipeline gets executed which pipeline settings have precedence?
For example, if a main pipeline has notifications set, pipeline timeout set and chain pipeline is a template pipeline with notifications set, pipeline timeout set.
The notification/timeout settings for each entity will be honored as the pipeline progresses.
Can we use expressions in delegate tags in NextGen like we used custom selectors in delegates in FirstGen?
Yes, expressions in delegate selections are supported. You can pass expressions during delegate selection in a pipeline. This will be resolved to the value of that variable. If that value is present as a tag in a delegate, then that delegate will be selected.
Why am I getting an "Error: Rate limit reached for tasks with rank IMPORTANT. Current task count 5985 and max limit 5000"?
This could happen when manager iterator is not running, there is a limit of 5000 delegate tasks at a time per account, but if iterator is not running, it will not get deleted automatically and this error is returned.
Can we limit our account/org access only to our users and not to Harness users (even read-only access)?
This feature is currently available in FirstGen. You can use Restrict users to email domains
feature and only and set your email domain only. You must enable the feature flag LIMITED_ACCESS_FOR_HARNESS_USER_GROUP
.
The user is blocked because of entry not cleared for his prod2 account from gateway, What could be possible steps to login?
The user can directly login using deep link, https://app.harness.io/ng/account/AccountId/main-dashboard.
The user is unable to log in, they're getting unable to log in with SSO when we have SSO enabled on the account.
This is a very common scenario when users get this issue. The reason behind this is mostly that the User has signed up for a personal account or part of a different account that doesn't have the SSO enabled which is set as his default account. Hence User can log in using a username and password. If he has forgotten his password, he can always use the forgot password and then try to log in.
Not viewing the Allowlist option under the account
The feature for allowlist is behind a Feature Flag PL_IP_ALLOWLIST_NG, kindly raise a ticket to get this enabled. You can refer to this documentation
Not able to setup/reset MFA
When the 2FA is set as force enabled on the account level by an admin of the account. The users will have to setup the 2FA for their profile. It can enabled by scanning the QR code sent in the email or using the secret key also sent in the same email using any authenticator app.
Issue decrypting secret from Harness Secret Manager
When you are getting some errors for decryption of the secret in your pipeline. Always try to test the same secret using a shell script and try to print it. The secret will always be printed in encrypted *** so you don't have to worry about the value been shown but it will make sure to isolate the issue further if the secret itself is having the issue or the way it is been referenced.
Issue while accessing other accounts when a user is part of multiple accounts.
Sometimes, this might happen due to some edge case where a user is somehow unable to access his other account when he is part of multiple accounts as the login mechanism works for the default account. The user can still try to get to his account (not the default one) by using the deep link. The deep link is nothing y the full URL of the account he wants to access : https://app.harness.io/ng/account/**accountidhere**/main-dashboard
How can I disable a pipeline?
You can use the Deployment Freeze option. For more information, go to Deployment freeze.
Slack Notifications are not working
In case your Slack notifications are not working, you can start by troubleshooting and validating the webhook for Slack and then check how the notifications are configured at the pipeline level or user group level. When executing the pipeline don't check the box for notifying only me.
Harness NG project admin permission after creating a project
When you create a project using the API, by default the Project inherits the project admin permissions on creation from the Service Account where the API token was generated.
Harness API Token validity
In Harness under Service Account when you create the token, the validity of the token depends on how the token was created. If you have specified the expiry date. In case you want the token to never expire you can set the expiration to No Expiration option.
Providing Access to Specific Pipelines in Harness
You can make use of the RBAC documentation You can create a resource group and pick specific pipelines to have specific RBAC access to.
Not able to remove a pipeline
In case of force deletion of Harness Resources : Account resources --> Default Settings and then under General enable the "Enable Force Delete of Harness Resources and then try to delete the pipeline from Harness UI. This option is force deleted for entities.
VAULT operation error: Decryption failed after 3 retries for secret
Sometimes, you might encounter errors while executing pipelines. These errors could be due to issues with the network or the delegate's connection to the Vault where the secret is created. The first step is to verify that the delegates are operational and that the connectors used in the pipelines are connected properly. If the connectivity test fails, log in to the delegate and attempt to reach the connector URL from there.
Can I update an email address in a user account?
If users are provisioned via SCIM, then you can update the email in the SSO provider end and they will get updated in Harness.
If the users were added manually, you must remove them and add the new emails.
Problems enabling mTLS - Error [IOException: Unexpected response code for CONNECT: 403]
When mTLS has been enabled for your delegates, you might see the 403 errors, this could be due to the proxy not resolving harness domain app.harness.io from the delegate.
I am trying to confirm whether creating a role with Administrator privileges at an account level and applying it to a resource group with scope for a specific Harness organization will grant admin access only to that organization. Is my understanding correct?
To achieve your use case, it is recommended that you create a user with limited access at the account level. Then, add the same user to the organization level where you require admin access. This way, you can have control over user RBAC at the organization level scope.
Changes identity provider to OKTA from some other provider
This is the document which talks about OKTA SAML setup with Harness : documentation, When you will be setting up a new OKTA SAML and then migrating your users to it, You will need to setup the same with Harness as mentioned in the above document , as Harness needs the metadata XML file from OKTA with the configuration.
The permissions for Harness are managed by the User Groups present in Harness. In case of authorization, the user groups from SAML app are linked to Harness Local User groups.
Is there an easy way to see the de-factor roles/permissions assigned to a user
You can view all permissions for a user by going to Access Control --> Search for the User click on it. Click on Role Bindings and you can see permissions for the user with the scope, All, Account, Organization and Organizations with Projects in one place. If you need to see the permissions inside of a role say Account Viewer or any custom-created role and same with Resource Group then you will always need to individually click on that specific role/ resource group as it's not shown on the user permission page.
We only show the Account/Project/Organization level permissions with the role-resource group with where it is assigned at and assigned through in case of a User group or directly.
But you can view all of them together by selecting the scope to All instead of Individual.
I need to create an AWS Secrets Manager reference type secret. I am not sure how to accomplish it. Is the "secret_manager_identifier" for the AWS Secrets Manager secret name?
The secret_manager_identifier will be the identifier if your AWS secret manager which you added in your Harness as a connector. Also, The secrets need to be stored in the same scope of the secret manager. So for account secrets they will be stored in the account secret manager.
RBAC for pipeline to hide few pipelines
We don't have the hide pipeline functionality. The way you can do this is to create a role and resource group with specific pipelines and assign it to the Users, the users can view the pipelines but will be able to execute them based on the Resource Group assignments.
Delegate Token behavior
Token revocation is done server side. We have a 20 minutes cache, so the delegate will be disconnected within 20 minutes of the token removal on the server side. The Token is used in heartbeat but is loaded at the delegate process startup. Changing the token delegate side requires a restart of the delegate process (cycle).
How do I view the secrets value stored in Harness Secrets Manager?
As the secrets stored in Harness are saved as encrypted hence you can't see the value for those secrets from the Harness UI. There would be a tidy way to print it using a pipeline execution.
Create a shellscript execution , add 2 different shell script steps, do specify the same delegate selector. In shell script 1 :
echo "text secret is: " \<+secrets.getValue("printsecret")> >> /tmp/abc.txt
Here printsecret is the secret name.
in 2nd shell script :
cat /tmp/abc.txt
The first shell script will output like :
text secret is: **************
but the second one will print the value for the secret :
text secret is: hellohello
Also, if you try to do the cat in the first step it won't print the secret in plain text.
How can we forcibly disconnect a delegate and delete it as admin?
As Harness Delegates are managed by customers in their own infrastructure, Harness doesn't have any control on it.
Harness can't control the delegates on your infrastructure.
In Harness's architecture, the delegates in your infrastructure connect to Harness Manager. For more information, go to Harness Platform components.
Hence you will need to stop the delegate service in your infrastructure.
There is another way to remove the delegate is, you will need to revoke the token used by the delegate and it will get disconnected and then auto-deleted in 7 days.
Is there a limit to the number of pipelines a project can have? What is the character limit on pipeline names?
We have no limit for pipeline creation. But the pipeline name character limit is 128 characters.
Data Deletion handling for exiting customers
The process is simple when a customer account expires or leaves/churns/offboards. All the data for the customer is cleaned up after the expiry or churn/offboarding.
Delegate disconnected status in the API
{delegateList(filters: [{accountId: "xxxxx"}], limit: 10) {
nodes {
delegateName
ip
status
disconnected
version
hostName
lastHeartBeat
}
}
}
How do I deploy a delegate in Amazon ECS for Harness NextGen?
The Harness Delegate is a software that gets installed in your environment which connects to Harness Manager and performs Continuous Delivery/Continuous Integration tasks.
In Harness NextGen, ECS delegate can be deployed as a Docker delegate both for ECS and ECS Fargate. This tutorial shows you how to install the Harness Delegate in an ECS cluster as an ECS service to enable the Delegate to connect to your AWS resources.
https://discuss.harness.io/t/how-to-deploy-delegate-in-amazon-ecs-for-harness-ng/13056
I use a Slack bot to send messages about test job results. I couldn't find a variable for job URL
For the pipeline execution URL: <+pipeline.execution.url>
https://docs.harness.io/article/lml71vhsim-harness-variables#pipeline_execution_url
Harness Hosted GitOps IP Address
Access to Kubernetes clusters that are behind strict firewalls and are not accessible from the public internet is controlled through authorized IP addresses. To allow access to these clusters, Harness provides a list of IP addresses that need to be configured on the clusters.
https://developer.harness.io/docs/continuous-delivery/gitops/gitops-ref/gitops-allowlist/
Info of connected delegate when it's started connected to Harness
The delegate initiates communication on its startup to the Harness Platform. There is also a heartbeat connection every 60 seconds from the delegate to the delegate harness to notify that it is running.
Understand the logic behind the six-letter account identifier that Harness uses while creating the delegate
This identifier refers to your account, without this, we don't know how to link old pod lifecycles and new ones, hence we will treat them differently as pod names and pod IPs change.
How Vault agent secret manager actually works with vault
The below article talks about how secret manager works with vault :
How Harness is able to prevent tampering of artifacts and instructions from the customer infrastructure. Sounds like TLS is used, but what specific integrity checking approach is used to check instructions are not changed in flight?
Details below for the protection details for the below Artifact Sources :
Related to SSH/WinRm NG
Artifactory For downloading artifacts from Artifactory to delegate, we are using org.jfrog.artifactory.client:artifactory-java-client-api:jar:2.9.1 This is the maven repo : https://mvnrepository.com/artifact/org.jfrog.artifactory.client/artifactory-java-client-services/2.9.1 and we see that there are reported vulnerabilities for this lib version. We are working on updating the above lib to the version without vulnerabilities and we will be secure. If Artifactory URL is https, the calls are secure with TLS
AWS S3 For downloading artifacts from AWS S3 to delegate, we are using com.amazonaws:aws-java-sdk-s3:1.12.261 We don't see any reported vulnerabilities : https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3/1.12.261 we are secure. AWS SDK makes HTTP calls in a secure way using TLS
Azure For downloading artifacts from Azure to delegate, we are using okhttp-4.9.2.jar, we see there are reported vulnerabilities and we are working to update this lib : https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/4.9.2 One note here is that updating this lib will be a long significant process which could last more weeks.
Jenkins For downloading artifacts from Jenkins to delegate, we are using com.offbytwo.jenkins:jenkins-client:0.3.9, Can't find any info related to vulnerabilities.
Nexus For downloading artifacts from Nexus to delegate, we are using javax.net.ssl.HttpsURLConnection from Java SDK. When downloading artifacts we are using SSL and we are secure here.
Artifacts will be downloaded on the delegate and it should be safe if the network where delegates are running is secure.
One note here, the chosen cipher suits depend on the remote server. During the SSL handshake the “server hello” message contains the Cipher suite chosen by the server from the list provided by the client (our side).
How do I make config changes to increase memory consumption in a delegate YAML?
You will have to make config changes in your delegate YAML to increase memory consumption. This can be done by setting the value in JAVA_OPTS to increase the Xmx value
What is the Xmx value in the JAVA_OPTS setting?
The Xmx value is a parameter used to specify the maximum heap size for a Java virtual machine (JVM) when running a Java application. It determines the amount of memory the application can use for its operations.
name: JAVA_OPTS
value: "-Xms64M -Xmx8192M"
What is the API used to pull a list of users and their roles from a specific project?
You can refer these docs here.
Are there RBAC permissions on Audit Trail in NextGen like there are in FirstGen?
This feature is not currently in NextGen, but we do have viewer permissions in place.
What is advisable to retain your current configuration during the Harness installation process?
Harness recommends that you keep your existing Java KeyStore in place during the installation process. Updating the KeyStore may cause issues with your delegate. For more information, go to Install delegates with custom certs.
What is linkedSsId in SSO groups?
linkedSsoId
is the uuid of SSO setting creating in Harness.
What is the purpose of linkedSsoDisplayName
?
LinkedSsoDisplayName
is the same SSO setting name in Harness. For SAML the value provided for both ssoGroupId and ssoGroupName should be same.
How can we implement an approval mechanism for authorizing the deletion of marked accounts to prevent accidental deletions and ensure that the right accounts are flagged for deletion?
The implementation of this feature is currently pending. Presently, the ability to mark accounts for deletion is allowed through the "update account" permission in the admin tool, which has been granted to a wide range of users.
How are Create APIs supposed to work as if we are creating API it won't be having permission and will return false? How do we restrict creation of resources?
There are two types of scope, one is complete scope(which indicates ALL) and the other is specific.
- To allow creation of entity in certain scope, it means allowing to creation that entity at complete Scope level(which indicates ALL).
- If the use case is to allow Create Governance policy at scope and restrict edit to specific policies then ideally we should split it into specific Create and Edit permissions.
- And then define 2 Role Assignments. One with Create and All Governance policy. One with Edit and Specific selected Governance policies.
What is difference between terminationGracePeriodSeconds and preStopHook?
-
TerminationGracePeriodSeconds
- This is used to allow the main process (delegate) to delay the shutdown so that this process can perform some cleanup. The key here is that container shutdown is delayed by UP TO the specified duration. This works by delegate specifically handling SIGTERM kill signal. -
preStopHook
- This is used to allow any other kind of cleanup outside of the main process (e.g. one wants to save files, make database backup etc..). This hook runs IN PARALLEL to the terminationGracePeriodSeconds not before, but before delegate process shutdown is triggered (i.e. before delegate process receives SIGTERM). So if the grace period expires the hook will be killed as well.
What is the impact of having one less delegate instance during a task with a long terminationGracePeriodSeconds for reasons other than upgrades?
Having one less delegate instance during a task with a long terminationGracePeriodSeconds
for reasons other than upgrades can impact the availability of delegate resources. Other tasks may fail to get scheduled because there are not enough delegates available to handle them. This can lead to inefficiencies and delays in task processing. It's crucial to consider the potential impact on the overall system and task scheduling when using extended termination grace periods.
What environment variable or Java option should be configured to stop exposure in the Gateway container when JWT is getting exposed?
- create a ConfigMap containing the new logback.xml (everything set to level=WARN )
- mount it wherever and pass:
-Dlogging.config=file:/path/to/mounted/logback.xml
to the JVM via JAVA_OPTS in config.
We want to know the status (failed/pass) and reason for verification step using graphQL API
You can make use of workflow/pipeline grapnel api for execution and failureDetails field will give you desired information.
Why am I redirected after login to FirstGen when I enabled NextGen?
Make sure you have set the Default Experience as NextGen on the Account overview page.
Is the Harness FirstGen/NextGen SAML setting shared?
Yes, if you have configured SAML on FirstGen, the same setting is used for login to NextGen.
How do I migrate a user from FirstGen to NextGen?
Users are migrated automatically once NextGen is enabled.
How can I add an admin in a newly-enabled NextGen account?
Users from your FirstGen Administrators group are automatically assigned as admin role in NextGen. You can then create/update other roles in NextGen.
What is the role of PROXY_HOST in the proxy.config?
This is the host address of your proxy, which you want to configure
If we enable proxy in delegate does that mean it is including all communication of "Connectors" - Artifact Servers, Source Repo Providers, Collaboration Providers? and also Cloud Providers?
Yes that’s correct any outbound connection made via delegate through Harness will use that proxy
Can you manage org level entities at the account level?
This is a use case of user-group inheritance,
- Create User Group at account scope.
- Inherit User Group at each Organization scope and create appropriate role binding.
- When trying to onboard new user to all this Orgs, all you have to do is to add that user in User Group and that will provide you access to all Org.
- This UG would still be managed to Account Scope.
For more details you can refer this doc.
Do we plan to support AsyncAPI specs (for messaging) in our Harness APIs?
This has not been planned yet.
How events are generated on Harness platform?
Audit Trail displays a record for each event of the Harness account, Modules, or Harness entities. You can refer this docs.
Do we have some documentation to know about the delegate size guidelines ?
You can refer to the following, documentation and also here.
Can a Golang service directly provide a secret reference to an internal API and receive the decrypted secret ?
Yes, there is an internal API for that, with the limitation that only the secrets stored in Harness Built in Secret manager can be retrieved. You can refer here. Please note that if the secret is stored in vault or customer’s secret manager then this won’t work.
Can I have an API to perform the operation of IP allowlist?
These are APIs to create/update IP allowlist https://apidocs.harness.io/tag/IP-Allowlist#operation/create-ip-allowlist-config, Also you can refer here.
Can we point auto update to our helm chart. Can we point auto update to a different registry?
You can set auto upgrade to true in the helm command and control the upgrade and the repository using this.
Can I use a "bindSecret" in Harness LDAP settings to avoid using an inline password, as suggested in the API documentation?
No, you cannot use a "bindSecret" in Harness LDAP settings to avoid using an inline password in NG LDAP. Currently, NG LDAP only allows for the use of an "INLINE" password. The appearance of "bindSecret" in the API documentation is due to a shared bean between FirstGen and NextGen, and in FirstGen, support for secret references is available. However, NG LDAP still requires an inline password, and this limitation should be considered when configuring LDAP settings in your environment.
Can we create a delegate token with the name using which it was previously created and then deleted ?
No it is not possible as same name is not possible within 30 days once it is revoked. There is a ttl for 30 days for deletion after revoke of token.
What is the expected behavior when a customer aborts a pipeline task, and what actions are taken to ensure a clean state in the system?
When you initiates an abort for a pipeline task, the expected behavior is to take actions to halt the task's execution as promptly as possible.
we have a method, io.harness.delegate.service.DelegateAgentServiceImpl#abortDelegateTask
, which is used to abort a task. This method typically leverages Thread.interrupt() to initiate the abort process. The key here is to interrupt or cancel the running task effectively.
An abort could leave the system in a potentially inconsistent or 'dirty' state, it's crucial to consider rollback procedures.
Delegate actions, such as canceling or ending running tasks, should play a central role in preventing system inconsistencies and maintaining system integrity.
How can I automatically start a delegate when running as a Docker container?
Docker provides restart policies to control whether your containers start automatically when they exit, or when Docker restarts. Restart policies start linked containers in the correct order. Docker recommends that you use restart policies, and avoid using process managers to start containers.
Including the flag --restart
in the docker run command will configure it to always restart, unless the container is explicitly stopped, or the daemon restarts.
If restart policies don't suit your needs, such as when processes outside Docker depend on Docker containers, you can use a process manager such as upstart, systemd, or supervisor instead.
To use a process manager, configure it to start your container or service using the same docker start or docker service command you would normally use to start the container manually. Consult the documentation for the specific process manager for more details.
Warning: Don't combine Docker restart policies with host-level process managers, as this creates conflicts.
This information was provided by Docker documentation
Which API Method to invoke a pipeline is the best when using multiple dynamic parameters?
It depends of your scenario. If you use the same set of inputs to invoke a pipeline, we recommend to use the API Method Execute a Pipeline with Input Set References. You can refer to an existing input set in the InputSet API method, so you don't need to specify all the parameters each time. For example, if you have a pre-defined input set for staging deployments, you can create an input set called "staging-inputset", as well as others for different environments. Then, you can use the environment_name
to dynamically select the appropriate input set.
If your pipeline has a very specific context of each execution, where you need to pass different parameters on each execution, we commend to use the approach Execute a Pipeline with Runtime Input YAML.
Perpetual Task was not assigned to my delegate, what is most probably cause?
Generally, when a perpetual task wasn't assigned to any delegates, probably you have a conflicting delegate selector. When you use connectors like secret manager, git connector along with a delegate selector in the step, mind that the manager can combine selectors from those connectors and step in order to select the most appropriate delegate selector. Review your configurations in order to make sure the selectors are matching.
Is it possible to store a Shell Script Provision in a Git provider?
At the moment, you can only store Shell Script provisions in two ways: either as inline code or within the Harness file store. Regrettably, the option to store them directly in a Git provider like GitHub or Bitbucket is not available.
Is it possible to access vault secrets across different regions?
As long as your vault server in a specific region permits access from a delegate in another region, it should function properly. You can even attempt to retrieve secrets directly from this delegate host outside of Harness to resolve any access issues, and it should work with Harness as well. Additionally, you have the option to create separate connectors for each region.
Is there a difference between the NextGen delegates and the FirstGen delegates?
We have many architectural changes between our legacy delegate, which was deployed as a StatefulSet, in comparison to the new-generation delegates, also known as immutable delegates, which are deployed as Deployment-type resources. Legacy delegates used to have both a watcher and a delegate process; however, immutable delegates only have one delegate process. The base OS has also changed. It was Ubuntu for legacy delegate images, but now it is RHEL for immutable delegate images. Immutable delegates work with the first generation as well. If you have an immutable delegate installation in your first generation, you can reuse it with your next-generation instance. You will need to regenerate the token in the next generation and enable the "next gen" attribute of the delegate to true. However, if you have legacy delegates in your first generation, you will require new delegate installations.
How do I deactivate Harness Secrets Manager via API?
Unfortunately, at this time, there is no API or Terraform approach to achieve this configuration.
Is there a way to obtain data on monthly active users (MAU) on the Harness platform?
You can retrieve information about user logins from the audit log. If you need to do this through an API, we have an audit log API available. However, we do not have a consolidated view or report of all the users who have accessed the Harness platform. Nevertheless, you can use the audit log information mentioned above to obtain this data.
Can I safely utilize API Endpoints marked as beta?
API Endpoints labeled as beta have been tested by our teams and are generally safe for consumption. However, we caution against using them for critical workloads, as they are not classified as stable yet.
Can the delegate's StatefulSet be scaled?
Yes, you can scale the delegate StatefulSet. For more information, go to Autoscale using replicas.
Why is the delegate image based on UBI instead of Ubuntu?
- Security: UBI is considered a more secure option compared to Ubuntu in today's landscape. It benefits from Red Hat's rigorous security practices and is designed to be more resilient against vulnerabilities.
- Compatibility: When you are running workloads on OpenShift, using UBI-based images is often the preferred choice. In some scenarios, Red Hat may even mandate the use of UBI-based images. This ensures compatibility and support within the OpenShift environment.
- Customer Demand: We have received numerous requests from our customers to provide UBI-based images due to their security and compatibility advantages. In response to these requests, we have published UBI-based legacy delegate images.
- Consistency: We are not only transitioning our delegate to UBI but also all of our SaaS offerings. This provides a consistent and unified environment across our services. While UBI is the preferred choice, we want to emphasize that we do provide a Dockerfile for building an Ubuntu-based delegate image if you have specific requirements.
What is RBAC and how do I manage users and roles?
Harness NextGen platform utilizes RBAC or Role-Based Access Control. Additional details on RBAC can be found in this blog post:
[https://www.harness.io/blog/user-role-management]
What are the main components of RBAC?
RBAC uses Principals, Resource Groups, and Roles to control access.
Principals are entities taking action in the system. These include users, user groups, and service accounts. Resource Groups define what objects can be acted on. Objects include organizations, projects, pipelines, connectors, users, and more. Roles define what actions can be taken on objects. Actions include view, create, edit, delete, and so on.
What is Role Binding and how does it relate to Harness RBAC?
Role binding refers to the process of assigning roles and resource groups to principals (users, user groups, and service accounts). Role binding can be configured at all scopes.
Are there any built-in roles that I can utilize?
Yes, for more information on built-in roles, please see our RBAC doc: [https://developer.harness.io/docs/platform/role-based-access-control/rbac-in-harness/]
What is the best way of implementing the Harness RBAC?
Following a workflow can be a useful process for implementing and understanding RBAC:
To configure RBAC in Harness, you must:
- Create roles.
- Create resource groups and, optionally, apply RBAC.
- Create user groups, create service accounts, and add users.
- Assign roles and resource groups to users, user groups, and service accounts.
- If you have not already done so, configure authentication.
Is there additional information on built-in roles for Harness RBAC?
Yes, for more information, go to Built-in roles.
What is a Resource Group?
Resource groups are an RBAC component that defines the objects that a user or service account can access. Objects are any Harness resource, including projects, pipelines, connectors, secrets, delegates, environments, users, and more.
More information on Harness Resource Group and managing this can be found here: [https://developer.harness.io/docs/platform/role-based-access-control/add-resource-groups]
What integration does Harness offer with SCIM providers?
Harness integrates with multiple third-party SCIM providers
Okta SCIM: [https://developer.harness.io/docs/platform/role-based-access-control/provision-users-with-okta-scim] Azure AD SCIM: [https://developer.harness.io/docs/platform/role-based-access-control/provision-users-and-groups-using-azure-ad-scim] OneLogin SCIM: [https://developer.harness.io/docs/platform/role-based-access-control/provision-users-and-groups-with-one-login-scim]
What is Just-in-time user provisioning?
Automated provisioning eliminates repetitive tasks related to manual provisioning and simplifies user management.
Just-in-time (JIT) provisioning in Harness lets you provision users automatically when they first sign-in to Harness through SAML SSO. Harness supports JIT provisioning only for new users logging in through an IdP, such as Okta.
JIT is currently behind a feature flag '''PL_ENABLE_JIT_USER_PROVISION'''
Is there an overview doc on Harness RBAC and permissions?
Yes, please see this doc for more details [https://developer.harness.io/docs/platform/role-based-access-control/permissions-reference]
How can I install Terraform on the delegate?
- microdnf install yum
- yum install unzip
- curl -O -L https://releases.hashicorp.com/terraform/1.6.1/terraform_1.6.1_linux_amd64.zip
- unzip terraform_1.6.1_linux_amd64.zip
- mv ./terraform /usr/bin/
- terraform --version
How can I install the AWS CLI in delegate?
-
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
-
microdnf install yum
-
yum install unzip
-
unzip awscliv2.zip
-
./aws/install
Can user able to configure RBAC for the environment based on the stage?
No, As per the current design user can only configure the RBAC for environment based on environment type.
How can user install without root permission?
Our delegate will get installed without root permissions by default, you don't need to make any changes for that.
Can user install the docker delegate with rootless docker?
Yes, you can install the rootless docker and after install the docker delegate.
Can we have multiple docker delegate under same delegate name?
When you have same name for multiple delegates they appear under one group and treated as multiple instances of that specific delegate. Whenever that delegate names get selected any instance registered under the name can be picked for executing the task.
Can docker delegates be auto upgraded?
Delegate auto upgrade occurs through the cron job that gets created when deploying a helm or a kubernetes delegate. We do not have any such cron in case of docker delegate and hence the image for docker delegate needs to be manually changed for delegate upgrades.
What is the base OS for delegates with an immutable image type?
Immutable delegates are based on RHEL ubi8 minimal image. On the other hand our legacy delegate were based on Ubuntu.
Do we have delegate metrics in case of legacy delegates as well?
Custom delegate metrics are only available for immutable delegates, there is no custom metric for legacy delegates. Also for immutable delegates the custom metrics are available from the version 23.05.79311 onwards.
Where does delegate look for third party client utilities?
The immutable delegates look for the third party client utilities in the PATH location during startup. Hence any third party utility that is installed in delegate is expected to be either present in the default PATH location or the path to the binary added in the environment variable PATH.
How can I find out which user is running the delegate?
We can exec into the pod and run the below command to find out which user is currently owning the delegate process:
ps -ef | grep delegate
How do I check the custom metrics currently being published by delegate?
Delegate has a metrics api end point which we can access on the delegate host for checking the delegate metrics available. Below is the sample curl:
curl localhost:30109/api/metrics
What is the health api end point for the immutable delegates?
Immutable delegates has a health api end point on which delegate health related information is related. Below is a sample curl for the same:
curl localhost:30109/api/health
How do I pass jvm arguments for watcher process?
Watcher process for delegates uses jvm options from the environment variable WATCHER_JAVA_OPTS. Any custom jvm argument that we want to pass to watcher process can be configured in the WATCHER_JAVA_OPTS variable in the init script.