Artifactory Provider Kinds

Look up the fields, identifiers, and caveats of each Kind in the JFrog Crossplane Artifactory provider.

This page lists every Kind of the provider-artifactory package releases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-artifactory:v0.0.1. The package requires registry credentials. For more information, see Install the JFrog Crossplane Providers. The provider configuration API group is artifactory.m.crossplane.io. The provider has 214 Kinds, all version v1alpha1.

The apiVersion of each Kind is <group>/v1alpha1. The legacy cluster-scoped variant drops .m from the group. For more information about how to read an entry, see JFrog Crossplane Kinds Reference.

The Kinds are grouped by API group.

SectionAPI groupKinds
Repositoriesrepository.artifactory.m.crossplane.io150
Usersuser.artifactory.m.crossplane.io4
Securitysecurity.artifactory.m.crossplane.io11
Instance Configurationconfiguration.artifactory.m.crossplane.io16
Webhookswebhook.artifactory.m.crossplane.io24
Replicationreplication.artifactory.m.crossplane.io5
Release Bundleslifecycle.artifactory.m.crossplane.io2
Artifacts and Propertiesartifact.artifactory.m.crossplane.io2

Repositories

Repository Kinds are named <Class><PackageType>Repository, for example LocalDockerV2Repository. The kubectl names are the lowercase plural, for example localdockerv2repositories.repository.artifactory.m.crossplane.io. API group repository.artifactory.m.crossplane.io, 150 Kinds.

The following rules apply to every repository Kind:

  • metadata.name is the repository key. Like the package type, you can't change it.
  • To assign a repository to a project, use projectKey plus projectEnvironments, or use the project provider's Repository Kind. Don't use both. With projectKey, the repository key must start with <projectKey>-.
  • xrayIndex: true enables Xray scanning.

Repository Kinds share most fields, so this section documents them per class: common fields once, then only the additional fields of each package type.

Package Types

The following table lists the package types of each repository class.

ClassKindsPackage types (<Class><PackageType>Repository)
Local40Alpine, Ansible, Bower, Cargo, Chef, Cocoapods, Composer, Conan, Conda, Cran, Debian, DockerV1, DockerV2, Gems, Generic, GitLFS, Go, Gradle, HelmOCI, Helm, Hex, HuggingFaceML, Ivy, MachineLearning, Maven, NPM, Nix, Nuget, OCI, Opkg, Pub, Puppet, PyPI, RPM, SBT, Swift, TerraformModule, TerraformProvider, Terraformbackend, Vagrant
Remote40AIEditorExtensions, Alpine, Ansible, Bazel, Bower, Cargo, Chef, Cocoapods, Composer, Conan, Conda, Cran, Debian, Docker, Gems, Generic, GitLFS, Go, Gradle, HelmOCI, Helm, Hex, HuggingFaceML, Ivy, JetBrainsPlugins, Maven, NPM, Nix, Nuget, OCI, Opkg, P2, Pub, Puppet, PyPI, RPM, SBT, Swift, Terraform, VCS
Virtual33Alpine, Ansible, Bower, Chef, Cocoapods, Composer, Conan, Conda, Cran, Debian, Docker, Gems, Generic, GitLFS, Go, Gradle, HelmOCI, Helm, Hex, Ivy, Maven, NPM, Nix, Nuget, OCI, P2, Pub, Puppet, PyPI, RPM, SBT, Swift, Terraform
Federated37Alpine, Ansible, Bower, Cargo, Chef, Cocoapods, Composer, Conan, Conda, Cran, Debian, Docker, DockerV1, DockerV2, Gems, Generic, GitLFS, Go, Gradle, HelmOCI, Helm, HuggingFaceML, Ivy, Maven, NPM, Nuget, OCI, Opkg, Puppet, PyPI, RPM, Releasebundles, SBT, Swift, TerraformModule, TerraformProvider, Vagrant

Local Repositories

Local repositories store artifacts you deploy: build outputs, internal packages, and images.

  • Common optional fields: archiveBrowsingEnabled, blackedOut, cdnRedirect, description, downloadDirect, excludesPattern, includesPattern, notes, priorityResolution, projectEnvironments, projectKey, propertySets, repoLayoutRef, xrayIndex.
  • Immutable: packageType.

The following table lists the additional fields by package type. Package types not listed have only the common fields.

Package typeAdditional fields
AlpineprimaryKeypairRef
AnsibleprimaryKeypairRef
CargoanonymousAccess, enableSparseIndex
ConanforceConanAuthentication
DebianddebSupported, indexCompressionFormats, primaryKeypairRef, secondaryKeypairRef, trivialLayout
DockerV2blockPushingSchema1, maxUniqueTags, tagRetention
GradlechecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks
HelmOCImaxUniqueTags, tagRetention
HelmforceMetadataNameVersion, forceNonDuplicateChart
HexhexPrimaryKeypairRef (required)
IvychecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks
MavenchecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks
NugetforceNugetAuthentication, maxUniqueSnapshots
OCImaxUniqueTags, tagRetention
RPMcalculateYumMetadata, enableFileListsIndexing, primaryKeypairRef, secondaryKeypairRef, yumGroupFileNames, yumRootDepth
SBTchecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks

Kind-specific notes:

  • LocalAlpineRepository: Index signing needs an existing RSA key pair in Artifactory (primaryKeypairRef).
  • LocalAnsibleRepository: Signing needs an existing RSA key pair (primaryKeypairRef).
  • LocalCargoRepository: Requires the Artifactory Custom URL Base to be configured.
  • LocalDebianRepository: Metadata signing needs existing GNU Privacy Guard (GPG) key pairs (primaryKeypairRef, optional secondaryKeypairRef).
  • LocalHexRepository: Requires an existing RSA key pair (hexPrimaryKeypairRef).
  • LocalRPMRepository: Metadata signing needs existing GPG key pairs (primaryKeypairRef, optional secondaryKeypairRef).

Remote Repositories

Remote repositories proxy and cache an upstream registry (url). Many server-defaulted settings, such as timeouts, offline mode, proxy, and cache periods, are late-initialized into the spec.

  • Common optional fields: allowAnyHostAuth, archiveBrowsingEnabled, assumedOfflinePeriodSecs, blackedOut, blockMismatchingMimeTypes, cdnRedirect, clientTlsCertificate, contentSynchronisation, description, disableProxy, disableUrlNormalization, downloadDirect, enableCookieManagement, enableTokenAuthentication, excludesPattern, hardFail, includesPattern, listRemoteFolderItems, localAddress, metadataRetrievalTimeoutSecs, mismatchingMimeTypesOverrideList, missedCachePeriodSeconds, notes, offline, passwordSecretRef, passwordWoSecretRef, passwordWoVersion, priorityResolution, projectEnvironments, projectKey, propertySets, proxy, queryParams, remoteRepoLayoutRef, repoLayoutRef, retrievalCachePeriodSeconds, shareConfiguration, socketTimeoutMillis, storeArtifactsLocally, synchronizeProperties, unusedArtifactsCleanupPeriodHours, username, xrayIndex.
  • Immutable: externalDependenciesPatterns, packageType.
  • Secrets: customHttpHeaders[].valueSecretRef, passwordSecretRef, passwordWoSecretRef.

The following table lists the additional fields by package type. Package types not listed have only the common fields.

Package typeAdditional fields
AIEditorExtensionscurated, customHttpHeaders, externalDependenciesEnabled, externalDependenciesPatterns, passThrough, propagateQueryParams, retrieveSha256FromServer, url (required)
AlpinebypassHeadRequests, url (required)
AnsiblebypassHeadRequests, url
BazelbypassHeadRequests, url (required)
BowerbowerRegistryUrl, bypassHeadRequests, url (required), vcsGitDownloadUrl, vcsGitProvider
CargoanonymousAccess, bypassHeadRequests, enableSparseIndex, gitRegistryUrl, url (required)
ChefbypassHeadRequests, url (required)
CocoapodsbypassHeadRequests, podsSpecsRepoUrl, url (required), vcsGitDownloadUrl, vcsGitProvider
ComposerbypassHeadRequests, composerRegistryUrl, url (required), vcsGitDownloadUrl, vcsGitProvider
ConanbypassHeadRequests, curated, forceConanAuthentication, passThrough, url (required)
CondabypassHeadRequests, curated, passThrough, propagateQueryParams, retrieveSha256FromServer, url (required)
CranbypassHeadRequests, url (required)
DebianbypassHeadRequests, curated, passThrough, propagateQueryParams, retrieveSha256FromServer, url (required)
DockerblockPushingSchema1, bypassHeadRequests, curated, externalDependenciesEnabled, externalDependenciesPatterns, passThrough, projectId, url (required)
GemsbypassHeadRequests, curated, passThrough, propagateQueryParams, retrieveSha256FromServer, url (required)
GenericbypassHeadRequests, customHttpHeaders, propagateQueryParams, retrieveSha256FromServer, url (required)
GitLFSbypassHeadRequests, url (required)
GobypassHeadRequests, curated, passThrough, propagateQueryParams, retrieveSha256FromServer, url (required), vcsGitProvider
GradlebypassHeadRequests, curated, fetchJarsEagerly, fetchSourcesEagerly, handleReleases, handleSnapshots, maxUniqueSnapshots, passThrough, rejectInvalidJars, remoteRepoChecksumPolicyType, suppressPomConsistencyChecks, url (required)
HelmOCIbypassHeadRequests, externalDependenciesEnabled, externalDependenciesPatterns, projectId, url (required)
HelmbypassHeadRequests, externalDependenciesEnabled, externalDependenciesPatterns, helmChartsBaseUrl, url (required)
HexbypassHeadRequests, hexPrimaryKeypairRef (required), publicKey (required), url (required)
HuggingFaceMLbypassHeadRequests, curated, passThrough, url
IvybypassHeadRequests, fetchJarsEagerly, fetchSourcesEagerly, handleReleases, handleSnapshots, maxUniqueSnapshots, rejectInvalidJars, remoteRepoChecksumPolicyType, suppressPomConsistencyChecks, url (required)
JetBrainsPluginsbypassHeadRequests, url (required)
MavenbypassHeadRequests, curated, fetchJarsEagerly, fetchSourcesEagerly, handleReleases, handleSnapshots, maxUniqueSnapshots, passThrough, rejectInvalidJars, remoteRepoChecksumPolicyType, suppressPomConsistencyChecks, url (required)
NPMbypassHeadRequests, curated, passThrough, url
NixbypassHeadRequests, url (required)
NugetbypassHeadRequests, curated, downloadContextPath, feedContextPath, forceNugetAuthentication, passThrough, symbolServerUrl, url (required), v3FeedUrl
OCIbypassHeadRequests, externalDependenciesEnabled, externalDependenciesPatterns, projectId, url (required)
OpkgbypassHeadRequests, url (required)
P2bypassHeadRequests, url (required)
PubbypassHeadRequests, url (required)
PuppetbypassHeadRequests, url (required)
PyPIbypassHeadRequests, curated, passThrough, pypiRegistryUrl, pypiRepositorySuffix, url (required)
RPMbypassHeadRequests, url (required)
SBTbypassHeadRequests, fetchJarsEagerly, fetchSourcesEagerly, handleReleases, handleSnapshots, maxUniqueSnapshots, rejectInvalidJars, remoteRepoChecksumPolicyType, suppressPomConsistencyChecks, url (required)
SwiftbypassHeadRequests, url (required)
TerraformbypassHeadRequests, terraformProvidersUrl, terraformRegistryUrl, url (required)
VCSbypassHeadRequests, maxUniqueSnapshots, url (required), vcsGitDownloadUrl, vcsGitProvider

Kind-specific notes:

  • RemoteAIEditorExtensionsRepository: Works only on Artifactory versions that support the aieditorextensions package type. Older instances reject it with The package type aieditorextensions is not supported.
  • RemoteCargoRepository: Requires the Artifactory Custom URL Base to be configured.
  • RemoteHexRepository: Requires an existing RSA key pair (hexPrimaryKeypairRef) and the upstream public key (publicKey).
  • RemoteJetBrainsPluginsRepository: Works only on Artifactory versions that support the jetbrainsplugins package type. Older instances reject it with The package type jetbrainsplugins is not supported.

Virtual Repositories

Virtual repositories aggregate local and remote repositories under one URL. repositories lists the members in resolution order. This list is authoritative, and every member must exist. defaultDeploymentRepo receives deployments.

  • Common optional fields: artifactoryRequestsCanRetrieveRemoteArtifacts, defaultDeploymentRepo, description, excludesPattern, hideUnauthorizedResources, includesPattern, notes, projectEnvironments, projectKey, repoLayoutRef, repositories.
  • Immutable: packageType.

The following table lists the additional fields by package type. Package types not listed have only the common fields.

Package typeAdditional fields
AlpineprimaryKeypairRef, retrievalCachePeriodSeconds
AnsibleretrievalCachePeriodSeconds
BowerexternalDependenciesEnabled, externalDependenciesPatterns, externalDependenciesRemoteRepo
ChefretrievalCachePeriodSeconds
ConanforceConanAuthentication, retrievalCachePeriodSeconds
CondaretrievalCachePeriodSeconds
CranretrievalCachePeriodSeconds
DebiandebianDefaultArchitectures, optionalIndexCompressionFormats, primaryKeypairRef, retrievalCachePeriodSeconds, secondaryKeypairRef
DockerresolveDockerTagsByTimestamp
GoexternalDependenciesEnabled, externalDependenciesPatterns
GradleforceMavenAuthentication, keyPair, pomRepositoryReferencesCleanupPolicy
HelmOCIresolveOciTagsByTimestamp
HelmretrievalCachePeriodSeconds, useNamespaces
HexhexPrimaryKeypairRef (required)
IvyforceMavenAuthentication, keyPair, pomRepositoryReferencesCleanupPolicy
MavenforceMavenAuthentication, keyPair, pomRepositoryReferencesCleanupPolicy
NPMexternalDependenciesEnabled, externalDependenciesPatterns, externalDependenciesRemoteRepo, retrievalCachePeriodSeconds
NugetforceNugetAuthentication
OCIresolveOciTagsByTimestamp
RPMprimaryKeypairRef, retrievalCachePeriodSeconds, secondaryKeypairRef
SBTforceMavenAuthentication, keyPair, pomRepositoryReferencesCleanupPolicy

Kind-specific notes:

  • VirtualHexRepository: Requires an existing RSA key pair (hexPrimaryKeypairRef).
  • VirtualOCIRepository: Every key in repositories must exist before you create or update the virtual repository. Otherwise, the request fails with Repository <key> does not exist.
  • VirtualRPMRepository: Metadata signing needs existing GPG key pairs (primaryKeypairRef, optional secondaryKeypairRef).

Federated Repositories

Federated repositories are local repositories mirrored bi-directionally across Artifactory instances (member[]).

  • Required on every Kind: member.
  • Common optional fields: archiveBrowsingEnabled, blackedOut, cdnRedirect, cleanupOnDelete, description, disableProxy, downloadDirect, excludesPattern, includesPattern, notes, priorityResolution, projectEnvironments, projectKey, propertySets, proxy, repoLayoutRef, xrayIndex.
  • Immutable: packageType.
  • Secrets: member[].accessTokenSecretRef.

Federated repositories need the following:

  • At least two Artifactory instances that can reach each other on their external URLs.
  • An Enterprise+ federation subscription.
  • member[] entries with the full repository URL of each member (https://<host>/artifactory/<key>). List the repository on the local instance as a member too.

The following table lists the additional fields by package type. Package types not listed have only the common fields.

Package typeAdditional fields
AlpineindexCompressionFormats, primaryKeypairRef
AnsibleprimaryKeypairRef
CargoanonymousAccess, enableSparseIndex, indexCompressionFormats
ConanforceConanAuthentication
DebianindexCompressionFormats, primaryKeypairRef, secondaryKeypairRef, trivialLayout
DockerblockPushingSchema1, maxUniqueTags, tagRetention
DockerV1maxUniqueTags
DockerV2blockPushingSchema1, maxUniqueTags, tagRetention
GradlechecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks
HelmOCImaxUniqueTags, tagRetention
IvychecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks
MavenchecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks
NugetforceNugetAuthentication, maxUniqueSnapshots
OCImaxUniqueTags, tagRetention
RPMcalculateYumMetadata, enableFileListsIndexing, primaryKeypairRef, secondaryKeypairRef, yumGroupFileNames, yumRootDepth
SBTchecksumPolicyType, handleReleases, handleSnapshots, maxUniqueSnapshots, snapshotVersionBehavior, suppressPomConsistencyChecks

Kind-specific notes:

  • FederatedReleasebundlesRepository: Requires an existing JFrog project (projectKey).

Users

Artifactory user accounts. User and ManagedUser manage users with passwords. UnmanagedUser manages users without a password, for example SSO users. AnonymousUser adopts the built-in anonymous user. API group user.artifactory.m.crossplane.io, 4 Kinds.

AnonymousUser

Provides an Artifactory anonymous user resource.

  • kubectl: anonymoususers.user.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_anonymous_user.
  • Fields: optional name.
  • Represents the built-in anonymous user. This Kind is useful only to observe or adopt the built-in user, for example with managementPolicies: ["Observe"] and metadata.name: anonymous. You can't create or delete it.
  • forProvider.name is a normal field here, not the identifier. If you create two managed resources with the same name, the second fails with an already exists-style error. To adopt an existing object, use the external-name annotation.

ManagedUser

Provides an Artifactory managed user resource.

  • kubectl: managedusers.user.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_managed_user.
  • Fields: required email, passwordSecretRef. Optional: admin, disableUiAccess, groups, internalPasswordDisabled, passwordPolicy, profileUpdatable.
  • Secrets: passwordSecretRef.
  • groups works the same way as in User: membership is authoritative. If you manage membership elsewhere, use initProvider. passwordSecretRef is required.

UnmanagedUser

Provides an Artifactory unmanaged user resource.

  • kubectl: unmanagedusers.user.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_unmanaged_user.
  • Fields: required email. Optional: admin, disableUiAccess, groups, internalPasswordDisabled, passwordPolicy, passwordSecretRef, profileUpdatable.
  • Secrets: passwordSecretRef.
  • groups works the same way as in User. The password is optional. If you omit it, Artifactory generates one.

User

Provides an Artifactory user resource.

  • kubectl: users.user.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_user.
  • Fields: required email. Optional: admin, disableUiAccess, groups, internalPasswordDisabled, passwordPolicy, passwordSecretRef, profileUpdatable.
  • Secrets: passwordSecretRef.
  • The password is a Secret reference (passwordSecretRef). The Secret must be in the same namespace as the managed resource.
  • groups is authoritative in Artifactory. If you set it in forProvider, the provider resets the user's membership to exactly that list on every poll. If groups isn't specified, the user's group membership is set to empty.
  • If you manage group membership elsewhere, such as with the platform provider's GroupMembers or the Artifactory provider's Group.usersNames, put groups under spec.initProvider instead. The provider then sends it only at creation. If groups is in forProvider while a GroupMembers object also manages the group, membership changes back and forth every poll interval.

Security

Groups, legacy permission targets, certificates, key pairs, password expiration and user lock policies, Vault configuration, distribution public keys, global environments, scoped tokens, and API keys. API group security.artifactory.m.crossplane.io, 11 Kinds.

APIKey

Provides an Artifactory API key resource.

  • kubectl: apikeys.security.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_api_key.
  • Fields: none (forProvider: {}).
  • API keys are deprecated in the JFrog Platform and are being removed. Use access tokens. The provider itself also refuses api_key credentials.

Certificate

Provides an Artifactory certificate resource.

  • kubectl: certificates.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the alias.
  • Upstream: artifactory_certificate.
  • Fields: required contentSecretRef.
  • Secrets: contentSecretRef.
  • The upstream file argument (a local path) was removed. Supply the PEM through forProvider.contentSecretRef, a Secret key that holds the PEM. With the default management policy, a Certificate that omits it is rejected with spec.forProvider.contentSecretRef is a required parameter.

DistributionPublicKey

Provides an Artifactory Distribution public key resource.

  • kubectl: distributionpublickeys.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the alias.
  • Upstream: artifactory_distribution_public_key.
  • Fields: required publicKey.

GlobalEnvironment

Provides a global environment resource.

  • kubectl: globalenvironments.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_global_environment.
  • Fields: none (forProvider: {}).
  • This is a name-only Kind: spec.forProvider has no fields. metadata.name, or the crossplane.io/external-name annotation, is the global environment name. Set spec.forProvider: {}.

Group

Provides an Artifactory group resource.

  • kubectl: groups.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_group.
  • Fields: optional adminPrivileges, autoJoin, description, detachAllUsers, externalId, policyManager, realm, realmAttributes, reportsManager, usersNames, usersNamesSelector, watchManager.
  • References: usersNamesRefs to User.
  • You can populate usersNames with usersNamesRefs or usersNamesSelector that point at Artifactory User resources. If User.groups or platform GroupMembers also manage the same users, choose one owner of membership. Otherwise, the controllers overwrite each other.

KeyPair

RSA key pairs are used to sign and verify the Alpine Linux index files in JFrog Artifactory.

  • kubectl: keypairs.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the pairName.
  • Upstream: artifactory_keypair.
  • Fields: required alias, pairType, privateKeySecretRef, publicKey. Optional: passphraseSecretRef.
  • Immutable: pairType, alias, privateKey, passphrase, publicKey.
  • Secrets: passphraseSecretRef, privateKeySecretRef.
  • All key material fields are immutable. A change to any of them is refused. To change them, delete and recreate the key pair.

PasswordExpirationPolicy

Provides an Artifactory password expiration policy resource.

  • kubectl: passwordexpirationpolicies.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_password_expiration_policy.
  • Fields: required enabled, notifyByEmail, passwordMaxAge.

PermissionTarget

Provides an Artifactory permission target resource.

  • kubectl: permissiontargets.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_permission_target.
  • Fields: optional build, releaseBundle, repo.
  • References: build[].repositoriesRefs to LocalGenericRepository, releaseBundle[].repositoriesRefs to LocalGenericRepository, and repo[].repositoriesRefs to LocalGenericRepository.
  • Deprecated in terraform-provider-artifactory v12.x. For new work, use the platform provider's Permission Kind (access.platform.m.crossplane.io).

ScopedToken

Provides an Artifactory scoped token resource.

  • kubectl: scopedtokens.security.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_scoped_token.
  • Fields: optional audiences, description, expiresIn, grantType, ignoreMissingTokenWarning, includeReferenceToken, projectKey, refreshable, scopes, username.
  • In v0.0.1, you can't manage scoped tokens declaratively. Access tokens are write-once: the token value is returned only at creation, and the upstream resource doesn't support import. The computed id of the upstream resource is empty in the observed state. As a result, Observe fails with cannot find id in tfstate before Create runs. The managed resource then stops progressing.
  • Create tokens outside Crossplane, with the UI, jf access-token-create, or POST /access/api/v1/tokens, and store them in a Kubernetes Secret.

UserLockPolicy

Provides an Artifactory user lock policy resource.

  • kubectl: userlockpolicies.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_user_lock_policy.
  • Fields: required enabled, loginAttempts.

VaultConfiguration

Configures an external vault connector as a centralized secret management tool for the keys used to sign packages.

  • kubectl: vaultconfigurations.security.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_vault_configuration.
  • Fields: required config.
  • Secrets: config.auth.certificateKeySecretRef, config.auth.roleIdSecretRef, config.auth.secretIdSecretRef. config and auth are objects. mounts is the array.
  • Requires a reachable, configured HashiCorp Vault. Without it, reads fail with Unable to find Vault configuration. config.auth.certificate is a plain PEM string. The private key, role ID, and secret ID are Secret references.

Instance Configuration

Instance-wide configuration: LDAP, OAuth, and SAML settings, proxies, backups, property sets, repository layouts, package cleanup and archive policies, mail server, trash can, and general security. Singletons allow at most one managed resource per JFrog Platform. API group configuration.artifactory.m.crossplane.io, 16 Kinds.

ArchivePolicy

Provides an Artifactory archive policy resource.

  • kubectl: archivepolicies.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the key.
  • Upstream: artifactory_archive_policy.
  • Fields: required searchCriteria. Optional: cronExpression, description, durationInMinutes, enabled, projectKey, skipTrashcan.
  • Requires the Package Archive Policies feature to be enabled on the JFrog Platform. Otherwise, reads fail with Package Archive Policies are disabled.

Backup

Manages the automatic and periodic backups of the entire Artifactory instance.

  • kubectl: backups.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the key.
  • Upstream: artifactory_backup.
  • Fields: required cronExp. Optional: createArchive, enabled, excludeNewRepositories, excludedRepositories, exportMissionControl, retentionPeriodHours, sendMailOnError, verifyDiskSpace.
  • Backups that reference repositories can make Artifactory reject later repository deletes. Delete or update the Backup before you delete the repositories it covers.

GeneralSecurity

Manages the Artifactory general security settings.

  • kubectl: generalsecurities.configuration.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_general_security.
  • Fields: optional enableAnonymousAccess, encryptionPolicy.
  • Instance-wide singleton. Create at most one per JFrog Platform.

LdapGroupSetting

Manages the Artifactory LDAP group settings for user authentication.

  • kubectl: ldapgroupsettings.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_ldap_group_setting.
  • Fields: required descriptionAttribute, filter, groupMemberAttribute, groupNameAttribute, ldapSettingKey, strategy. Optional: groupBaseDn, subTree.
  • Requires an existing LDAP setting and LDAP server.

LdapGroupSettingV2

  • kubectl: ldapgroupsettingv2s.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_ldap_group_setting_v2.
  • Fields: required descriptionAttribute, filter, groupMemberAttribute, groupNameAttribute, strategy. Optional: enabledLdap, forceAttributeSearch, groupBaseDn, refreshOperation, subTree.
  • Requires an existing LDAP setting and LDAP server.

LdapSetting

Manages the Artifactory LDAP settings for user authentication.

  • kubectl: ldapsettings.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_ldap_setting.
  • Fields: required key, ldapUrl. Optional: allowUserToAccessProfile, autoCreateUser, emailAttribute, enabled, ldapPoisoningProtection, managerDn, managerPasswordSecretRef, pagingSupportEnabled, searchBase, searchFilter, searchSubTree, userDnPattern.
  • Secrets: managerPasswordSecretRef.
  • Requires a reachable LDAP server. Supply the bind password through a Secret reference.

LdapSettingV2

Provides an Artifactory LDAP setting resource.

  • kubectl: ldapsettingv2s.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_ldap_setting_v2.
  • Fields: required key, ldapUrl. Optional: allowUserToAccessProfile, autoCreateUser, emailAttribute, enabled, ldapPoisoningProtection, managerDn, managerPasswordSecretRef, pagingSupportEnabled, searchBase, searchFilter, searchSubTree, userDnPattern.
  • Secrets: managerPasswordSecretRef.
  • Requires a reachable LDAP server. Supply the bind password through a Secret reference.

MailServer

Provides an Artifactory mail server resource.

  • kubectl: mailservers.configuration.artifactory.m.crossplane.io.
  • Identifier: singleton (mailserver).
  • Upstream: artifactory_mail_server.
  • Fields: required enabled, host, port. Optional: artifactoryUrl, from, passwordSecretRef, subjectPrefix, useSsl, useTls, username.
  • Immutable: host.
  • Secrets: passwordSecretRef.
  • Instance-wide singleton. The external name is always mailserver. Create at most one per JFrog Platform. password is a Secret reference (passwordSecretRef). host is immutable.

OauthSettings

Manages the Artifactory OAuth SSO settings.

  • kubectl: oauthsettings.configuration.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_oauth_settings.
  • Fields: required oauthProvider. Optional: allowUserToAccessProfile, enable, persistUsers.
  • Secrets: oauthProvider[].clientSecretSecretRef.

PackageCleanupPolicy

Provides an Artifactory package cleanup policy resource.

  • kubectl: packagecleanuppolicies.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the key.
  • Upstream: artifactory_package_cleanup_policy.
  • Fields: required searchCriteria. Optional: cronExpression, description, durationInMinutes, enabled, projectKey, skipTrashcan.

PropertySet

Provides an Artifactory property set resource.

  • kubectl: propertysets.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_property_set.
  • Fields: optional property, visible.

Proxy

Provides an Artifactory proxy resource.

  • kubectl: proxies.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the key.
  • Upstream: artifactory_proxy.
  • Fields: required host, port. Optional: ntDomain, ntHost, passwordSecretRef, platformDefault, redirectToHosts, services, username.
  • Immutable: host.
  • Secrets: passwordSecretRef.
  • Artifactory attaches proxies to remote repositories. Remote repositories late-initialize their proxy field from the server, so a proxy can end up recorded in many remote repository specs. If you later delete the Proxy, those repositories stay in permanent drift. If you manage proxies with Crossplane, set proxy explicitly on remote repositories, or omit LateInitialize from their managementPolicies.
  • key and host are immutable.

ReleaseBundleV2CleanupPolicy

  • kubectl: releasebundlev2cleanuppolicies.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the key.
  • Upstream: artifactory_release_bundle_v2_cleanup_policy.
  • Fields: required searchCriteria. Optional: cronExpression, description, durationInMinutes, enabled, itemType.
  • Only meaningful once Release Bundles v2 exist on the JFrog Platform.

RepositoryLayout

Manages the Artifactory repository layout settings.

  • kubectl: repositorylayouts.configuration.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the name.
  • Upstream: artifactory_repository_layout.
  • Fields: required artifactPathPattern, fileIntegrationRevisionRegexp, folderIntegrationRevisionRegexp. Optional: descriptorPathPattern, distinctiveDescriptorPathPattern.

SamlSettings

Manages the Artifactory SAML SSO settings.

  • kubectl: samlsettings.configuration.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_saml_settings.
  • Fields: required loginUrl, logoutUrl, serviceProviderName. Optional: allowUserToAccessProfile, autoRedirect, certificate, emailAttribute, enable, groupAttribute, noAutoUserCreation, syncGroups, useEncryptedAssertion, verifyAudienceRestriction.
  • Deprecated upstream. Create fails with artifactory_saml_settings deprecated. Use platform_saml_settings instead. Use the platform provider's SAMLSettings Kind (authentication.platform.m.crossplane.io) instead.

TrashcanConfig

Provides an Artifactory trash can configuration resource.

  • kubectl: trashcanconfigs.configuration.artifactory.m.crossplane.io.
  • Identifier: singleton (trashcan).
  • Upstream: artifactory_trashcan_config.
  • Fields: optional enabled, retentionPeriodDays.
  • Instance-wide singleton. The external name is always trashcan. Create at most one per JFrog Platform. Deleting it resets the trash can settings to defaults.

Webhooks

<Domain>Webhook Kinds post the standard JFrog payload to a URL. <Domain>CustomWebhook Kinds send a custom payload with custom headers and secrets. API group webhook.artifactory.m.crossplane.io, 24 Kinds.

Follow these rules for every webhook Kind:

  • List eventTypes in alphabetical order. The API stores them sorted, so any other order produces a permanent diff: the resource stays Ready but never settles.
  • Avoid anyLocal, anyRemote, anyFederated, anyBuild, or anyReleaseBundle set to true together with empty sibling lists (selectedBuilds, registeredReleaseBundleNames). The server echoes the empty list while the spec omits it, which causes perpetual updates. Name concrete entities instead.
  • handler[].secretsSecretRef (custom webhooks) is a whole-Secret reference (name only) and is optional.
  • The Distribution and Release Bundle (v1, v2, promotion) webhook domains need the Distribution service or the release-bundle webhook domain on the JFrog Platform. Otherwise, create fails with domain with id 'artifactory_release_bundle' was not found or HTTP 404.
  • You can fill criteria.repoKeys with repoKeysRefs or repoKeysSelector that point at LocalGenericRepository objects only. Reference other repository Kinds by literal key.

All 24 webhook Kinds share this shape:

  • API group: webhook.artifactory.m.crossplane.io.
  • Identifier: metadata.name is the webhook key.
  • Upstream: artifactory_<domain>_webhook and artifactory_<domain>_custom_webhook.
  • Fields: required eventTypes. Optional: criteria, description, enabled, handler.
  • handler (standard Kinds): customHttpHeaders, proxy, secretSecretRef, url, useSecretForSigning. The payload is the standard JFrog event payload.
  • handler (custom Kinds): httpHeaders, method, payload, proxy, secretsSecretRef, url. You define the payload and the HTTP method.
  • Secrets: standard Kinds use handler[].secretSecretRef. Custom Kinds use handler[].secretsSecretRef.
  • Valid eventTypes values depend on the domain, for example deployed, deleted, moved, copied, and cached for artifacts. For the full list, see the JFrog webhook documentation.

The following table lists the webhook domains with their standard Kind, custom Kind, and criteria fields.

DomainStandard KindCustom Kindcriteria fields
ArtifactLifecycleArtifactLifecycleWebhookArtifactLifecycleCustomWebhooknone
ArtifactPropertyArtifactPropertyWebhookArtifactPropertyCustomWebhookanyFederated, anyLocal, anyRemote, excludePatterns, includePatterns, repoKeys, repoKeysSelector
ArtifactArtifactWebhookArtifactCustomWebhookanyFederated, anyLocal, anyRemote, excludePatterns, includePatterns, repoKeys, repoKeysSelector
ArtifactoryReleaseBundleArtifactoryReleaseBundleWebhookArtifactoryReleaseBundleCustomWebhookanyReleaseBundle, excludePatterns, includePatterns, registeredReleaseBundleNames
BuildBuildWebhookBuildCustomWebhookanyBuild, excludePatterns, includePatterns, selectedBuilds
DestinationDestinationWebhookDestinationCustomWebhookanyReleaseBundle, excludePatterns, includePatterns, registeredReleaseBundleNames
DistributionDistributionWebhookDistributionCustomWebhookanyReleaseBundle, excludePatterns, includePatterns, registeredReleaseBundleNames
DockerDockerWebhookDockerCustomWebhookanyFederated, anyLocal, anyRemote, excludePatterns, includePatterns, repoKeys, repoKeysSelector
ReleaseBundleV2PromotionReleaseBundleV2PromotionWebhookReleaseBundleV2PromotionCustomWebhookexcludePatterns, includePatterns, selectedEnvironments
ReleaseBundleV2ReleaseBundleV2WebhookReleaseBundleV2CustomWebhookanyReleaseBundle, excludePatterns, includePatterns, selectedReleaseBundles
ReleaseBundleReleaseBundleWebhookReleaseBundleCustomWebhookanyReleaseBundle, excludePatterns, includePatterns, registeredReleaseBundleNames
UserUserWebhookUserCustomWebhooknone

Replication

Push and pull replication of repositories between Artifactory instances. API group replication.artifactory.m.crossplane.io, 5 Kinds.

LocalRepositoryMultiReplication

Provides a local repository replication resource, also called Artifactory push replication.

  • kubectl: localrepositorymultireplications.replication.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_local_repository_multi_replication.
  • Fields: required cronExp, repoKey. Optional: enableEventReplication, replication.
  • Immutable: url.
  • References: repoKeyRef to LocalGenericRepository.
  • Secrets: replication[].passwordSecretRef.
  • Requires the source local repository, a reachable target Artifactory URL, a username, and a password Secret. url (per replication) is immutable.

LocalRepositorySingleReplication

Provides a local repository replication resource, also called Artifactory push replication.

  • kubectl: localrepositorysinglereplications.replication.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_local_repository_single_replication.
  • Fields: required cronExp, repoKey, url, username. Optional: checkBinaryExistenceInFilestore, disableProxy, enableEventReplication, enabled, excludePathPrefixPattern, includePathPrefixPattern, passwordSecretRef, proxy, socketTimeoutMillis, syncDeletes, syncProperties, syncStatistics.
  • Immutable: url.
  • References: repoKeyRef to LocalGenericRepository.
  • Secrets: passwordSecretRef.
  • Requires the source local repository, a reachable target Artifactory URL, a username, and a password Secret. url is immutable.

PullReplication

📘

Note

This Kind is deprecated and replaced by RemoteRepositoryReplication for clarity.

  • kubectl: pullreplications.replication.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_pull_replication.
  • Fields: required repoKey. Optional: checkBinaryExistenceInFilestore, cronExp, enableEventReplication, enabled, passwordSecretRef, pathPrefix, proxy, socketTimeoutMillis, syncDeletes, syncProperties, syncStatistics, url, username.
  • Immutable: url.
  • References: repoKeyRef to LocalGenericRepository.
  • Secrets: passwordSecretRef.
  • Requires an existing remote repository (repoKey, or repoKeyRef to a Crossplane-managed LocalGenericRepository). url is immutable.

PushReplication

📘

Note

This Kind is deprecated and replaced by LocalRepositoryMultiReplication for clarity.

  • kubectl: pushreplications.replication.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_push_replication.
  • Fields: required cronExp, repoKey. Optional: enableEventReplication, replications.
  • Immutable: url.
  • References: repoKeyRef to LocalGenericRepository.
  • Secrets: replications[].passwordSecretRef.
  • Requires the source repository, a target URL, a username, and a password Secret. url is immutable.

RemoteRepositoryReplication

Provides a remote repository replication resource, also called Artifactory pull replication.

  • kubectl: remoterepositoryreplications.replication.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_remote_repository_replication.
  • Fields: required repoKey. Optional: checkBinaryExistenceInFilestore, cronExp, enableEventReplication, enabled, excludePathPrefixPattern, includePathPrefixPattern, replicationKey, syncDeletes, syncProperties.
  • References: repoKeyRef to LocalGenericRepository.
  • Requires an existing remote repository (repoKey).

Release Bundles

Release Lifecycle Management: Release Bundles v2 and their promotion between environments. API group lifecycle.artifactory.m.crossplane.io, 2 Kinds.

ReleaseBundleV2

Creates a Release Bundle v2, uniquely identified by a combination of repository key, name, and version.

  • kubectl: releasebundlev2s.lifecycle.artifactory.m.crossplane.io.
  • Identifier: composite <name>:<version>.
  • Upstream: artifactory_release_bundle_v2.
  • Fields: required keypairName, source, sourceType, version. Optional: projectKey, skipDockerManifestResolution.
  • Immutable: projectKey, sourceType.
  • The source artifacts, builds, or Release Bundles must already exist. Otherwise, the Lifecycle API returns 404 Source artifacts not found.
  • Requires a signing key (keypairName) configured on the JFrog Platform. The external name is <name>:<version>.
  • projectKey and sourceType are immutable. A Release Bundle version is effectively write-once.

ReleaseBundleV2Promotion

Promotes a Release Bundle v2 version.

  • kubectl: releasebundlev2promotions.lifecycle.artifactory.m.crossplane.io.
  • Identifier: composite <name>:<version>:<environment>.
  • Upstream: artifactory_release_bundle_v2_promotion.
  • Fields: required environment, keypairName, version. Optional: excludedRepositoryKeys, includedRepositoryKeys, projectKey.
  • Immutable: projectKey, environment.
  • Requires an existing signed Release Bundle v2 with the same name and version, and an existing lifecycle environment (environment). The external name is <name>:<version>:<environment>. projectKey and environment are immutable.

Artifacts and Properties

Single-artifact uploads and item properties. Both are affected by known issues in v0.0.1. API group artifact.artifactory.m.crossplane.io, 2 Kinds.

Artifact

Provides a resource to deploy an artifact to an Artifactory repository.

  • kubectl: artifacts.artifact.artifactory.m.crossplane.io.
  • Identifier: server-assigned ID (never edit the external-name annotation).
  • Upstream: artifactory_artifact.
  • Fields: required contentBase64, path, repository.
  • Immutable: repository, path.
  • In v0.0.1, you can't use this Kind. The local file_path argument was removed, because a provider pod can't read files on your machine. contentBase64 is required instead. After the upload succeeds, Observe fails with cannot find id in tfstate. The failure occurs because the upstream Artifact resource never writes an id attribute while the provider uses the IdentifierFromProvider strategy. The managed resource stays Synced=False forever.
  • To recover an existing Artifact managed resource:
    1. Delete the file through the Artifactory UI or the REST API (DELETE /artifactory/<repo>/<path>).

    2. (Optional) Empty it from the trash can (DELETE /artifactory/api/trash/clean/<repo>/<path>).

    3. Remove the finalizer:

      kubectl patch artifact.artifact.artifactory.m.crossplane.io/<name> -n <ns> --type merge -p '{"metadata":{"finalizers":[]}}'
  • Upload binaries with the JFrog CLI (jf rt upload), a build tool, or the REST API instead.

ItemProperties

Provides a resource to manage the properties of an item: a file, a folder, or a repository.

  • kubectl: itemproperties.artifact.artifactory.m.crossplane.io.
  • Identifier: composite <repoKey>[:<itemPath>].
  • Upstream: artifactory_item_properties.
  • Fields: required properties, repoKey. Optional: isRecursive, itemPath.
  • Immutable: repoKey, itemPath.
  • In v0.0.1, you can't use this Kind. When the target item has no properties yet, JFrog returns HTTP 404 No properties could be found. The provider reports this response as an error instead of as a missing object. As a result, the provider never creates the properties (Synced=False, ReconcileError).
  • Set properties with jf rt set-props or PUT /artifactory/api/storage/<repo>/<path>?properties=k=v instead.

Next Steps


Did this page help you?