JFrog Crossplane Providers

Manage the JFrog Platform declaratively from Kubernetes with the JFrog Crossplane providers.

The JFrog Crossplane providers let you manage the JFrog Platform declaratively from Kubernetes. You describe JFrog objects, such as repositories, users, projects, and security policies, as Kubernetes objects. The providers then create and keep those objects in JFrog.

Find What You Need

The following table lists common goals and the page that covers each one.

I want to…Go to
Install and try the providersGet Started with the JFrog Crossplane Providers
Understand identity, references, and conditionsHow the JFrog Crossplane Providers Work
Create and manage JFrog objects, and see worked examplesManage JFrog Objects with Crossplane
Upgrade, troubleshoot, or remove the providersOperate the JFrog Crossplane Providers
Look up a Kind and its fieldsJFrog Crossplane Kinds Reference

This section covers installation and configuration, how the providers work, object management, best practices, recipes, the Kind reference, upgrade, uninstall, and troubleshooting.

This section is for platform engineers and DevOps teams who operate Kubernetes and administer a JFrog Platform:

  • You need to be familiar with kubectl and YAML.
  • You don't need prior Crossplane knowledge.

The Four Providers

The following table shows what each provider manages and its package image.

ProviderManagesPackage image
provider-artifactoryRepositories (local, remote, virtual, federated for every package type), users, groups, permission targets, webhooks, replication, release bundles, instance configuration (LDAP, SAML, OAuth, proxies, backups, property sets, layouts, cleanup and archive policies, mail server, trash can)releases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-artifactory:v0.0.1
provider-xraySecurity, license, operational-risk, and curation policies, watches, ignore rules, custom issues, reports, Xray settings and indexingreleases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-xray:v0.0.1
provider-projectProjects, environments, project roles, project membership, repository assignment and sharingreleases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-project:v0.0.1
provider-platformGlobal roles, groups, group membership, permissions, System for Cross-domain Identity Management (SCIM), OpenID Connect (OIDC), SAML, Crowd, HTTP SSO, AWS IAM roles, lifecycle stages, license, reverse proxy, Workersreleases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-platform:v0.0.1

The providers operate independently. Install only the providers you need.

Supported Kinds

The providers support 260 Kinds. Each Kind is available in two forms:

  • Namespaced (recommended): <group>.<provider>.m.crossplane.io
  • Legacy cluster-scoped: <group>.<provider>.crossplane.io

The following table shows the number of Kinds for each provider and API group.

ProviderKindsAPI groups (number of Kinds)
provider-artifactory214artifact (2), configuration (16), lifecycle (2), replication (5), repository (150), security (11), user (4), webhook (24)
provider-xray21configuration (7), policy (7), report (5), watch (1), webhook (1)
provider-project8access (3), project (2), repository (3)
provider-platform17access (6), authentication (6), configuration (3), lifecycle (2)

How It Works

To manage JFrog resources with the providers:

  1. Install the providers.
  2. Provide a JFrog URL and token through a ClusterProviderConfig.
  3. Create Kubernetes objects such as LocalDockerV2Repository, User, Project, or SecurityPolicy.

Each object acts as a managed resource. For each managed resource, the provider does the following:

  • Creates the matching JFrog object.
  • Updates the object when the manifest changes.
  • Reverts changes made outside Kubernetes (drift).
  • Deletes the object when the Kubernetes object is deleted (unless configured otherwise).

Conditions and events on each object report whether JFrog accepted the configuration.

Conventions

  • Examples use namespace team-a and a ClusterProviderConfig named jfrog.
  • Values in angle brackets, such as <access-token>, are placeholders.
  • A Kind is a Kubernetes resource type.
  • Namespaced Kinds live in API groups ending in .m.crossplane.io (recommended).
  • Legacy cluster-scoped variants use groups ending in .crossplane.io.
  • Field names use the manifest (camelCase) form, for example xrayIndex. Upstream JFrog Terraform documentation uses snake_case (xray_index) for the same fields.
  • Use fully-qualified names with kubectl. Several providers share these short names: Group, User, Permission, Role, Repository, and Webhook. Fully-qualified names avoid this ambiguity. For example:
kubectl get localnpmrepositories.repository.artifactory.m.crossplane.io -n team-a

Pages in This Section

Get Started

How the Providers Work

Manage JFrog Objects

Operate the Providers

Kinds Reference


Did this page help you?