{
  "name": "harbor",
  "displayName": "Harbor",
  "version": "3.10.21",
  "description": "A Pulumi package for creating and managing Harbor resources.",
  "keywords": [
    "pulumi",
    "harbor",
    "category/utility"
  ],
  "homepage": "https://www.pulumi.com",
  "license": "Apache-2.0",
  "attribution": "This Pulumi package is based on the [`harbor` Terraform Provider](https://github.com/goharbor/terraform-provider-harbor).",
  "repository": "https://github.com/pulumiverse/pulumi-harbor",
  "pluginDownloadURL": "github://api.github.com/pulumiverse/pulumi-harbor",
  "publisher": "Pulumiverse",
  "meta": {
    "moduleFormat": "(.*)(?:/[^/]*)"
  },
  "language": {
    "csharp": {
      "packageReferences": {
        "Pulumi": "3.*"
      },
      "compatibility": "tfbridge20",
      "rootNamespace": "Pulumiverse"
    },
    "go": {
      "importBasePath": "github.com/pulumiverse/pulumi-harbor/sdk/v3/go/harbor",
      "generateResourceContainerTypes": true,
      "generateExtraInputTypes": true
    },
    "java": {
      "basePackage": "com.pulumiverse",
      "buildFiles": "",
      "gradleNexusPublishPluginVersion": "",
      "gradleTest": ""
    },
    "nodejs": {
      "packageName": "@pulumiverse/harbor",
      "packageDescription": "A Pulumi package for creating and managing Harbor resources.",
      "readme": "> This provider is a derived work of the [Terraform Provider](https://github.com/goharbor/terraform-provider-harbor)\n> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n> first check the [`pulumi-harbor` repo](https://github.com/pulumiverse/pulumi-harbor/issues); however, if that doesn't turn up anything,\n> please consult the source [`terraform-provider-harbor` repo](https://github.com/goharbor/terraform-provider-harbor/issues).",
      "dependencies": {
        "@pulumi/pulumi": "^3.0.0"
      },
      "devDependencies": {
        "@types/mime": "^2.0.0",
        "@types/node": "^10.0.0"
      },
      "compatibility": "tfbridge20",
      "disableUnionOutputTypes": true
    },
    "python": {
      "packageName": "pulumiverse_harbor",
      "requires": {
        "pulumi": ">=3.0.0,<4.0.0"
      },
      "readme": "> This provider is a derived work of the [Terraform Provider](https://github.com/goharbor/terraform-provider-harbor)\n> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n> first check the [`pulumi-harbor` repo](https://github.com/pulumiverse/pulumi-harbor/issues); however, if that doesn't turn up anything,\n> please consult the source [`terraform-provider-harbor` repo](https://github.com/goharbor/terraform-provider-harbor/issues).",
      "compatibility": "tfbridge20",
      "pyproject": {}
    }
  },
  "config": {
    "variables": {
      "apiVersion": {
        "type": "integer",
        "default": 2
      },
      "bearerToken": {
        "type": "string"
      },
      "insecure": {
        "type": "boolean",
        "default": true,
        "defaultInfo": {
          "environment": [
            "HARBOR_IGNORE_CERT"
          ]
        }
      },
      "password": {
        "type": "string",
        "defaultInfo": {
          "environment": [
            "HARBOR_PASSWORD"
          ]
        },
        "secret": true
      },
      "robotPrefix": {
        "type": "string"
      },
      "sessionId": {
        "type": "string"
      },
      "url": {
        "type": "string",
        "defaultInfo": {
          "environment": [
            "HARBOR_URL"
          ]
        }
      },
      "username": {
        "type": "string",
        "defaultInfo": {
          "environment": [
            "HARBOR_USERNAME"
          ]
        }
      }
    },
    "defaults": [
      "url"
    ]
  },
  "types": {
    "harbor:index/ConfigSystemBannerMessage:ConfigSystemBannerMessage": {
      "properties": {
        "closable": {
          "type": "boolean",
          "description": "Whether or not the banner message is closable.\n"
        },
        "fromDate": {
          "type": "string",
          "description": "The date the banner message will start displaying. (Format: `MM/DD/YYYY`)\n"
        },
        "message": {
          "type": "string",
          "description": "The message to display in the banner.\n"
        },
        "toDate": {
          "type": "string",
          "description": "The date the banner message will stop displaying. (Format: `MM/DD/YYYY`)\n"
        },
        "type": {
          "type": "string",
          "description": "The type of banner message. Can be `\"info\"`, `\"warning\"`, `\"success\"` or `\"danger\"`.\n"
        }
      },
      "type": "object",
      "required": [
        "message"
      ]
    },
    "harbor:index/ReplicationFilter:ReplicationFilter": {
      "properties": {
        "decoration": {
          "type": "string",
          "description": "Matches or excludes the result. Can be one of the following. `matches`, `excludes`\n"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Filter on the resource according to labels.\n"
        },
        "name": {
          "type": "string",
          "description": "Filter on the name of the resource.\n"
        },
        "resource": {
          "type": "string",
          "description": "Filter on the resource type. Can be one of the following types. `chart`, `artifact`\n"
        },
        "tag": {
          "type": "string",
          "description": "Filter on the tag/version of the resource.\n"
        }
      },
      "type": "object"
    },
    "harbor:index/RetentionPolicyRule:RetentionPolicyRule": {
      "properties": {
        "alwaysRetain": {
          "type": "boolean"
        },
        "disabled": {
          "type": "boolean"
        },
        "mostRecentlyPulled": {
          "type": "integer"
        },
        "mostRecentlyPushed": {
          "type": "integer"
        },
        "nDaysSinceLastPull": {
          "type": "integer"
        },
        "nDaysSinceLastPush": {
          "type": "integer"
        },
        "repoExcluding": {
          "type": "string"
        },
        "repoMatching": {
          "type": "string"
        },
        "tagExcluding": {
          "type": "string"
        },
        "tagMatching": {
          "type": "string"
        },
        "untaggedArtifacts": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "harbor:index/RobotAccountPermission:RobotAccountPermission": {
      "properties": {
        "accesses": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FRobotAccountPermissionAccess:RobotAccountPermissionAccess"
          }
        },
        "kind": {
          "type": "string",
          "description": "Either `system` or `project`.\n"
        },
        "namespace": {
          "type": "string",
          "description": "namespace is the name of your project. For kind `system` permissions, always use `/` as namespace. Use `*` to match all projects.\n"
        }
      },
      "type": "object",
      "required": [
        "accesses",
        "kind",
        "namespace"
      ]
    },
    "harbor:index/RobotAccountPermissionAccess:RobotAccountPermissionAccess": {
      "properties": {
        "action": {
          "type": "string",
          "description": "Eg. `push`, `pull`, `read`, etc. Check [available actions](https://github.com/goharbor/harbor/blob/-/src/common/rbac/const.go).\n"
        },
        "effect": {
          "type": "string",
          "description": "Either `allow` or `deny`. Defaults to `allow`.\n"
        },
        "resource": {
          "type": "string",
          "description": "Eg. `repository`, `labels`, etc. Check [available resources](https://github.com/goharbor/harbor/blob/-/src/common/rbac/const.go).\n"
        }
      },
      "type": "object",
      "required": [
        "action",
        "resource"
      ]
    },
    "harbor:index/getGroupsGroup:getGroupsGroup": {
      "properties": {
        "groupName": {
          "type": "string",
          "description": "The name of the group to filter by.\n"
        },
        "groupType": {
          "type": "integer"
        },
        "id": {
          "type": "integer",
          "description": "The ID of this resource.\n"
        },
        "ldapGroupDn": {
          "type": "string",
          "description": "The LDAP group DN to filter by.\n"
        }
      },
      "type": "object",
      "required": [
        "groupName",
        "groupType",
        "id",
        "ldapGroupDn"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    },
    "harbor:index/getProjectMemberGroupsProjectMemberGroup:getProjectMemberGroupsProjectMemberGroup": {
      "properties": {
        "groupName": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The id of the project within harbor.\n"
        },
        "role": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "groupName",
        "id",
        "projectId",
        "role"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    },
    "harbor:index/getProjectMemberUsersProjectMemberUser:getProjectMemberUsersProjectMemberUser": {
      "properties": {
        "id": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The id of the project within harbor.\n"
        },
        "role": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "id",
        "projectId",
        "role",
        "userName"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    },
    "harbor:index/getProjectsProject:getProjectsProject": {
      "properties": {
        "name": {
          "type": "string"
        },
        "projectId": {
          "type": "integer"
        },
        "public": {
          "type": "boolean"
        },
        "type": {
          "type": "string"
        },
        "vulnerabilityScanning": {
          "type": "boolean"
        }
      },
      "type": "object",
      "required": [
        "name",
        "projectId",
        "public",
        "type",
        "vulnerabilityScanning"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    },
    "harbor:index/getRobotAccountsRobotAccount:getRobotAccountsRobotAccount": {
      "properties": {
        "description": {
          "type": "string"
        },
        "disable": {
          "type": "boolean"
        },
        "duration": {
          "type": "integer"
        },
        "id": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "level": {
          "type": "string",
          "description": "Level of the robot account, currently either `system` or `project`. Default is `system`.\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the robot account to filter by.\n"
        }
      },
      "type": "object",
      "required": [
        "description",
        "disable",
        "duration",
        "id",
        "level",
        "name"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    },
    "harbor:index/getUsersUser:getUsersUser": {
      "properties": {
        "admin": {
          "type": "boolean"
        },
        "comment": {
          "type": "string"
        },
        "email": {
          "type": "string",
          "description": "The email of the user to filter by.\n"
        },
        "fullName": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "username": {
          "type": "string",
          "description": "The name of the user to filter by.\n"
        }
      },
      "type": "object",
      "required": [
        "admin",
        "comment",
        "email",
        "fullName",
        "id",
        "username"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    }
  },
  "provider": {
    "description": "The provider type for the harbor package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n",
    "properties": {
      "bearerToken": {
        "type": "string"
      },
      "password": {
        "type": "string",
        "secret": true
      },
      "robotPrefix": {
        "type": "string"
      },
      "sessionId": {
        "type": "string"
      },
      "url": {
        "type": "string"
      },
      "username": {
        "type": "string"
      }
    },
    "type": "object",
    "inputProperties": {
      "apiVersion": {
        "type": "integer",
        "default": 2
      },
      "bearerToken": {
        "type": "string"
      },
      "insecure": {
        "type": "boolean",
        "default": true,
        "defaultInfo": {
          "environment": [
            "HARBOR_IGNORE_CERT"
          ]
        }
      },
      "password": {
        "type": "string",
        "defaultInfo": {
          "environment": [
            "HARBOR_PASSWORD"
          ]
        },
        "secret": true
      },
      "robotPrefix": {
        "type": "string"
      },
      "sessionId": {
        "type": "string"
      },
      "url": {
        "type": "string",
        "defaultInfo": {
          "environment": [
            "HARBOR_URL"
          ]
        }
      },
      "username": {
        "type": "string",
        "defaultInfo": {
          "environment": [
            "HARBOR_USERNAME"
          ]
        }
      }
    },
    "methods": {
      "terraformConfig": "pulumi:providers:harbor/terraformConfig"
    }
  },
  "resources": {
    "harbor:index/configAuth:ConfigAuth": {
      "description": "## Example Usage\n\n### OIDC\n\n```terraform\nresource \"harbor_config_auth\" \"oidc\" {\n  auth_mode          = \"oidc_auth\"\n  primary_auth_mode  = true\n  oidc_name          = \"azure\"\n  oidc_endpoint      = \"https://login.microsoftonline.com/{GUID goes here}/v2.0\"\n  oidc_client_id     = \"OIDC Client ID goes here\"\n  oidc_client_secret = \"ODDC Client Secret goes here\"\n  oidc_scope         = \"openid,email\"\n  oidc_verify_cert   = true\n  oidc_auto_onboard  = true\n  oidc_user_claim    = \"name\"\n  oidc_admin_group   = \"administrators\"\n}\n```\n\n### LDAP\n\n```terraform\nresource \"harbor_config_auth\" \"ldap\" {\n  auth_mode            = \"ldap_auth\"\n  primary_auth_mode    = true\n  ldap_url             = \"openldap.default.svc.cluster.local:389\"\n  ldap_search_dn       = \"cn=admin,dc=example,dc=org\"\n  ldap_search_password = \"Not@SecurePassw0rd\"\n  ldap_base_dn         = \"dc=example,dc=org\"\n  ldap_uid             = \"email\"\n  ldap_verify_cert     = false\n}\n```\n",
      "properties": {
        "authMode": {
          "type": "string",
          "description": "Harbor authentication mode. Can be `\"oidc_auth\"`, `\"db_auth\"` or `\"ldap_auth\"`. (Default: `\"db_auth\"`)\n"
        },
        "ldapBaseDn": {
          "type": "string"
        },
        "ldapFilter": {
          "type": "string"
        },
        "ldapGroupAdminDn": {
          "type": "string"
        },
        "ldapGroupBaseDn": {
          "type": "string"
        },
        "ldapGroupFilter": {
          "type": "string"
        },
        "ldapGroupGid": {
          "type": "string"
        },
        "ldapGroupMembership": {
          "type": "string"
        },
        "ldapGroupScope": {
          "type": "string"
        },
        "ldapGroupUid": {
          "type": "string"
        },
        "ldapScope": {
          "type": "string"
        },
        "ldapSearchDn": {
          "type": "string"
        },
        "ldapSearchPassword": {
          "type": "string",
          "secret": true
        },
        "ldapUid": {
          "type": "string"
        },
        "ldapUrl": {
          "type": "string"
        },
        "ldapVerifyCert": {
          "type": "boolean"
        },
        "oidcAdminGroup": {
          "type": "string"
        },
        "oidcAutoOnboard": {
          "type": "boolean"
        },
        "oidcClientId": {
          "type": "string"
        },
        "oidcClientSecret": {
          "type": "string",
          "secret": true
        },
        "oidcEndpoint": {
          "type": "string"
        },
        "oidcGroupFilter": {
          "type": "string"
        },
        "oidcGroupsClaim": {
          "type": "string"
        },
        "oidcName": {
          "type": "string"
        },
        "oidcScope": {
          "type": "string"
        },
        "oidcUserClaim": {
          "type": "string"
        },
        "oidcVerifyCert": {
          "type": "boolean"
        },
        "primaryAuthMode": {
          "type": "boolean"
        }
      },
      "type": "object",
      "required": [
        "authMode"
      ],
      "inputProperties": {
        "authMode": {
          "type": "string",
          "description": "Harbor authentication mode. Can be `\"oidc_auth\"`, `\"db_auth\"` or `\"ldap_auth\"`. (Default: `\"db_auth\"`)\n"
        },
        "ldapBaseDn": {
          "type": "string"
        },
        "ldapFilter": {
          "type": "string"
        },
        "ldapGroupAdminDn": {
          "type": "string"
        },
        "ldapGroupBaseDn": {
          "type": "string"
        },
        "ldapGroupFilter": {
          "type": "string"
        },
        "ldapGroupGid": {
          "type": "string"
        },
        "ldapGroupMembership": {
          "type": "string"
        },
        "ldapGroupScope": {
          "type": "string"
        },
        "ldapGroupUid": {
          "type": "string"
        },
        "ldapScope": {
          "type": "string"
        },
        "ldapSearchDn": {
          "type": "string"
        },
        "ldapSearchPassword": {
          "type": "string",
          "secret": true
        },
        "ldapUid": {
          "type": "string"
        },
        "ldapUrl": {
          "type": "string"
        },
        "ldapVerifyCert": {
          "type": "boolean"
        },
        "oidcAdminGroup": {
          "type": "string"
        },
        "oidcAutoOnboard": {
          "type": "boolean"
        },
        "oidcClientId": {
          "type": "string"
        },
        "oidcClientSecret": {
          "type": "string",
          "secret": true
        },
        "oidcEndpoint": {
          "type": "string"
        },
        "oidcGroupFilter": {
          "type": "string"
        },
        "oidcGroupsClaim": {
          "type": "string"
        },
        "oidcName": {
          "type": "string"
        },
        "oidcScope": {
          "type": "string"
        },
        "oidcUserClaim": {
          "type": "string"
        },
        "oidcVerifyCert": {
          "type": "boolean"
        },
        "primaryAuthMode": {
          "type": "boolean"
        }
      },
      "requiredInputs": [
        "authMode"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ConfigAuth resources.\n",
        "properties": {
          "authMode": {
            "type": "string",
            "description": "Harbor authentication mode. Can be `\"oidc_auth\"`, `\"db_auth\"` or `\"ldap_auth\"`. (Default: `\"db_auth\"`)\n"
          },
          "ldapBaseDn": {
            "type": "string"
          },
          "ldapFilter": {
            "type": "string"
          },
          "ldapGroupAdminDn": {
            "type": "string"
          },
          "ldapGroupBaseDn": {
            "type": "string"
          },
          "ldapGroupFilter": {
            "type": "string"
          },
          "ldapGroupGid": {
            "type": "string"
          },
          "ldapGroupMembership": {
            "type": "string"
          },
          "ldapGroupScope": {
            "type": "string"
          },
          "ldapGroupUid": {
            "type": "string"
          },
          "ldapScope": {
            "type": "string"
          },
          "ldapSearchDn": {
            "type": "string"
          },
          "ldapSearchPassword": {
            "type": "string",
            "secret": true
          },
          "ldapUid": {
            "type": "string"
          },
          "ldapUrl": {
            "type": "string"
          },
          "ldapVerifyCert": {
            "type": "boolean"
          },
          "oidcAdminGroup": {
            "type": "string"
          },
          "oidcAutoOnboard": {
            "type": "boolean"
          },
          "oidcClientId": {
            "type": "string"
          },
          "oidcClientSecret": {
            "type": "string",
            "secret": true
          },
          "oidcEndpoint": {
            "type": "string"
          },
          "oidcGroupFilter": {
            "type": "string"
          },
          "oidcGroupsClaim": {
            "type": "string"
          },
          "oidcName": {
            "type": "string"
          },
          "oidcScope": {
            "type": "string"
          },
          "oidcUserClaim": {
            "type": "string"
          },
          "oidcVerifyCert": {
            "type": "boolean"
          },
          "primaryAuthMode": {
            "type": "boolean"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/configSecurity:ConfigSecurity": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_config_security\" \"main\" {\n  cve_allowlist = [\"CVE-456\", \"CVE-123\"]\n  expires_at = \"1701167767\"\n}\n```\n\n## Import\n\nimport using the id of the repo\n\n```sh\n$ pulumi import harbor:index/configSecurity:ConfigSecurity main \"7\"\n```\n\nNote that at this point of time Harbor doesn't has any api endpoint for deleting this list. Only updating the records.\n\n",
      "properties": {
        "creationTime": {
          "type": "string",
          "description": "Time of creation of the list.\n"
        },
        "cveAllowlists": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "System allowlist. Vulnerabilities in this list will be ignored when pushing and pulling images. Should be in the format or `[\"CVE-123\", \"CVE-145\"]` or `[\"CVE-123\"]`\n"
        },
        "expiresAt": {
          "type": "integer",
          "description": "The time for expiration of the allowlist, in the form of seconds since epoch. This is an optional attribute, if it's not set the CVE allowlist does not expire.\n"
        },
        "updateTime": {
          "type": "string",
          "description": "Time of update of the list.\n"
        }
      },
      "type": "object",
      "required": [
        "creationTime",
        "cveAllowlists",
        "updateTime"
      ],
      "inputProperties": {
        "cveAllowlists": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "System allowlist. Vulnerabilities in this list will be ignored when pushing and pulling images. Should be in the format or `[\"CVE-123\", \"CVE-145\"]` or `[\"CVE-123\"]`\n"
        },
        "expiresAt": {
          "type": "integer",
          "description": "The time for expiration of the allowlist, in the form of seconds since epoch. This is an optional attribute, if it's not set the CVE allowlist does not expire.\n"
        }
      },
      "requiredInputs": [
        "cveAllowlists"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ConfigSecurity resources.\n",
        "properties": {
          "creationTime": {
            "type": "string",
            "description": "Time of creation of the list.\n"
          },
          "cveAllowlists": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "System allowlist. Vulnerabilities in this list will be ignored when pushing and pulling images. Should be in the format or `[\"CVE-123\", \"CVE-145\"]` or `[\"CVE-123\"]`\n"
          },
          "expiresAt": {
            "type": "integer",
            "description": "The time for expiration of the allowlist, in the form of seconds since epoch. This is an optional attribute, if it's not set the CVE allowlist does not expire.\n"
          },
          "updateTime": {
            "type": "string",
            "description": "Time of update of the list.\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/configSystem:ConfigSystem": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_config_system\" \"main\" {\n  project_creation_restriction = \"adminonly\"\n  robot_token_expiration       = 30\n  robot_name_prefix            = \"harbor@\"\n  storage_per_project          = 100\n}\n```\n",
      "properties": {
        "auditLogForwardEndpoint": {
          "type": "string",
          "description": "The endpoint to forward audit logs to.\n"
        },
        "bannerMessage": {
          "$ref": "#/types/harbor:index%2FConfigSystemBannerMessage:ConfigSystemBannerMessage"
        },
        "projectCreationRestriction": {
          "type": "string",
          "description": "Who can create projects within Harbor. Can be `\"adminonly\"` or `\"everyone\"`\n"
        },
        "readOnly": {
          "type": "boolean",
          "description": "Whether or not the system is in read only mode.\n"
        },
        "robotNamePrefix": {
          "type": "string",
          "description": "Robot account prefix.\n"
        },
        "robotTokenExpiration": {
          "type": "integer",
          "description": "The amount of time in days a robot account will expire.\n"
        },
        "scannerSkipUpdatePulltime": {
          "type": "boolean",
          "description": "Whether or not to skip update pull time for scanner.\n"
        },
        "skipAuditLogDatabase": {
          "type": "boolean",
          "description": "Whether or not to skip audit log database.\n"
        },
        "storagePerProject": {
          "type": "integer",
          "description": "Default quota space per project in GIB. Default is -1 (unlimited).\n"
        }
      },
      "type": "object",
      "inputProperties": {
        "auditLogForwardEndpoint": {
          "type": "string",
          "description": "The endpoint to forward audit logs to.\n"
        },
        "bannerMessage": {
          "$ref": "#/types/harbor:index%2FConfigSystemBannerMessage:ConfigSystemBannerMessage"
        },
        "projectCreationRestriction": {
          "type": "string",
          "description": "Who can create projects within Harbor. Can be `\"adminonly\"` or `\"everyone\"`\n"
        },
        "readOnly": {
          "type": "boolean",
          "description": "Whether or not the system is in read only mode.\n"
        },
        "robotNamePrefix": {
          "type": "string",
          "description": "Robot account prefix.\n"
        },
        "robotTokenExpiration": {
          "type": "integer",
          "description": "The amount of time in days a robot account will expire.\n"
        },
        "scannerSkipUpdatePulltime": {
          "type": "boolean",
          "description": "Whether or not to skip update pull time for scanner.\n"
        },
        "skipAuditLogDatabase": {
          "type": "boolean",
          "description": "Whether or not to skip audit log database.\n"
        },
        "storagePerProject": {
          "type": "integer",
          "description": "Default quota space per project in GIB. Default is -1 (unlimited).\n"
        }
      },
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ConfigSystem resources.\n",
        "properties": {
          "auditLogForwardEndpoint": {
            "type": "string",
            "description": "The endpoint to forward audit logs to.\n"
          },
          "bannerMessage": {
            "$ref": "#/types/harbor:index%2FConfigSystemBannerMessage:ConfigSystemBannerMessage"
          },
          "projectCreationRestriction": {
            "type": "string",
            "description": "Who can create projects within Harbor. Can be `\"adminonly\"` or `\"everyone\"`\n"
          },
          "readOnly": {
            "type": "boolean",
            "description": "Whether or not the system is in read only mode.\n"
          },
          "robotNamePrefix": {
            "type": "string",
            "description": "Robot account prefix.\n"
          },
          "robotTokenExpiration": {
            "type": "integer",
            "description": "The amount of time in days a robot account will expire.\n"
          },
          "scannerSkipUpdatePulltime": {
            "type": "boolean",
            "description": "Whether or not to skip update pull time for scanner.\n"
          },
          "skipAuditLogDatabase": {
            "type": "boolean",
            "description": "Whether or not to skip audit log database.\n"
          },
          "storagePerProject": {
            "type": "integer",
            "description": "Default quota space per project in GIB. Default is -1 (unlimited).\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/garbageCollection:GarbageCollection": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_garbage_collection\" \"main\" {\n  schedule        = \"Daily\"\n  delete_untagged = true\n  workers         = 1\n}\n```\n",
      "properties": {
        "deleteUntagged": {
          "type": "boolean",
          "description": "Allow garbage collection on untagged artifacts.\n"
        },
        "schedule": {
          "type": "string",
          "description": "Sets the schedule how often the Garbage Collection will run.  Can be to `\"hourly\"`, `\"daily\"`, `\"weekly\"` or can be a custom cron string ie, `\"0 5 4 * * *\"`\n"
        },
        "workers": {
          "type": "integer",
          "description": "Number of workers to run the garbage collection, value must be between 1 and 5.\n"
        }
      },
      "type": "object",
      "required": [
        "schedule"
      ],
      "inputProperties": {
        "deleteUntagged": {
          "type": "boolean",
          "description": "Allow garbage collection on untagged artifacts.\n"
        },
        "schedule": {
          "type": "string",
          "description": "Sets the schedule how often the Garbage Collection will run.  Can be to `\"hourly\"`, `\"daily\"`, `\"weekly\"` or can be a custom cron string ie, `\"0 5 4 * * *\"`\n"
        },
        "workers": {
          "type": "integer",
          "description": "Number of workers to run the garbage collection, value must be between 1 and 5.\n"
        }
      },
      "requiredInputs": [
        "schedule"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering GarbageCollection resources.\n",
        "properties": {
          "deleteUntagged": {
            "type": "boolean",
            "description": "Allow garbage collection on untagged artifacts.\n"
          },
          "schedule": {
            "type": "string",
            "description": "Sets the schedule how often the Garbage Collection will run.  Can be to `\"hourly\"`, `\"daily\"`, `\"weekly\"` or can be a custom cron string ie, `\"0 5 4 * * *\"`\n"
          },
          "workers": {
            "type": "integer",
            "description": "Number of workers to run the garbage collection, value must be between 1 and 5.\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/group:Group": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_group\" \"storage-group\" {\n  group_name = \"storage-group\"\n  group_type = 3\n  ldap_group_dn = \"storage-group\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/group:Group storage-group /usergroups/19\n```\n\n",
      "properties": {
        "groupName": {
          "type": "string",
          "description": "The name of the group.\n"
        },
        "groupType": {
          "type": "integer",
          "description": "3. Note: group type 3 is OIDC group.\n"
        },
        "ldapGroupDn": {
          "type": "string",
          "description": "The distinguished name of the group within AD/LDAP.\n"
        }
      },
      "type": "object",
      "required": [
        "groupName",
        "groupType"
      ],
      "inputProperties": {
        "groupName": {
          "type": "string",
          "description": "The name of the group.\n",
          "willReplaceOnChanges": true
        },
        "groupType": {
          "type": "integer",
          "description": "3. Note: group type 3 is OIDC group.\n"
        },
        "ldapGroupDn": {
          "type": "string",
          "description": "The distinguished name of the group within AD/LDAP.\n"
        }
      },
      "requiredInputs": [
        "groupName",
        "groupType"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Group resources.\n",
        "properties": {
          "groupName": {
            "type": "string",
            "description": "The name of the group.\n",
            "willReplaceOnChanges": true
          },
          "groupType": {
            "type": "integer",
            "description": "3. Note: group type 3 is OIDC group.\n"
          },
          "ldapGroupDn": {
            "type": "string",
            "description": "The distinguished name of the group within AD/LDAP.\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/immutableTagRule:ImmutableTagRule": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_project\" \"main\" {\n  name = \"acctest\"\n}\n\nresource \"harbor_immutable_tag_rule\" \"main\" {\n  disabled = true\n  project_id = harbor_project.main.id\n  repo_matching = \"**\"\n  tag_matching = \"v2.*\"\n  tag_excluding = \"latest\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/immutableTagRule:ImmutableTagRule main /projects/4/immutabletagrules/25\n```\n\n",
      "properties": {
        "disabled": {
          "type": "boolean",
          "description": "Specify if the rule is disable or not. Defaults to `false`\n"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of which you would like to apply this policy.\n"
        },
        "repoExcluding": {
          "type": "string",
          "description": "For the repositories excluding.\n"
        },
        "repoMatching": {
          "type": "string",
          "description": "For the repositories matching.\n"
        },
        "tagExcluding": {
          "type": "string",
          "description": "For the tag excluding.\n"
        },
        "tagMatching": {
          "type": "string",
          "description": "For the tag matching.\n"
        }
      },
      "type": "object",
      "required": [
        "projectId"
      ],
      "inputProperties": {
        "disabled": {
          "type": "boolean",
          "description": "Specify if the rule is disable or not. Defaults to `false`\n"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of which you would like to apply this policy.\n",
          "willReplaceOnChanges": true
        },
        "repoExcluding": {
          "type": "string",
          "description": "For the repositories excluding.\n"
        },
        "repoMatching": {
          "type": "string",
          "description": "For the repositories matching.\n"
        },
        "tagExcluding": {
          "type": "string",
          "description": "For the tag excluding.\n"
        },
        "tagMatching": {
          "type": "string",
          "description": "For the tag matching.\n"
        }
      },
      "requiredInputs": [
        "projectId"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ImmutableTagRule resources.\n",
        "properties": {
          "disabled": {
            "type": "boolean",
            "description": "Specify if the rule is disable or not. Defaults to `false`\n"
          },
          "projectId": {
            "type": "string",
            "description": "The project id of which you would like to apply this policy.\n",
            "willReplaceOnChanges": true
          },
          "repoExcluding": {
            "type": "string",
            "description": "For the repositories excluding.\n"
          },
          "repoMatching": {
            "type": "string",
            "description": "For the repositories matching.\n"
          },
          "tagExcluding": {
            "type": "string",
            "description": "For the tag excluding.\n"
          },
          "tagMatching": {
            "type": "string",
            "description": "For the tag matching.\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/interrogationServices:InterrogationServices": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_interrogation_services\" \"main\" {\n  default_scanner = \"Clair\"\n  vulnerability_scan_policy = \"Daily\"\n}\n```\n",
      "properties": {
        "defaultScanner": {
          "type": "string",
          "description": "Sets the default interrogation service `\"Clair\"`\n"
        },
        "vulnerabilityScanPolicy": {
          "type": "string",
          "description": "The frequency of the vulnerability scanning is done. This can be `Daily`, `Weekly`, `Monthly` or can be a custom cron string.\n"
        }
      },
      "type": "object",
      "required": [
        "vulnerabilityScanPolicy"
      ],
      "inputProperties": {
        "defaultScanner": {
          "type": "string",
          "description": "Sets the default interrogation service `\"Clair\"`\n"
        },
        "vulnerabilityScanPolicy": {
          "type": "string",
          "description": "The frequency of the vulnerability scanning is done. This can be `Daily`, `Weekly`, `Monthly` or can be a custom cron string.\n"
        }
      },
      "requiredInputs": [
        "vulnerabilityScanPolicy"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering InterrogationServices resources.\n",
        "properties": {
          "defaultScanner": {
            "type": "string",
            "description": "Sets the default interrogation service `\"Clair\"`\n"
          },
          "vulnerabilityScanPolicy": {
            "type": "string",
            "description": "The frequency of the vulnerability scanning is done. This can be `Daily`, `Weekly`, `Monthly` or can be a custom cron string.\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/label:Label": {
      "description": "## Example Usage\n\n### Global\n\n```terraform\nresource \"harbor_label\" \"main\" {\n  name      = \"accTest\"\n  color     = \"#FF0000\"\n  description   = \"Description to for acceptance test\"\n}\n```\n\n### Project\n\n```terraform\nresource \"harbor_project\" \"main\" {\n  name = \"acctest\"\n}\n\nresource \"harbor_label\" \"main\" {\n  name      = \"accTest\"\n  color     = \"#FFFFFF\"\n  description = \"Description for acceptance test\"\n  project_id  = harbor_project.main.id\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/label:Label main /labels/1\n```\n\n",
      "properties": {
        "color": {
          "type": "string",
          "description": "The color of the label within harbor (Default: #FFFFF)\n"
        },
        "description": {
          "type": "string",
          "description": "The Description of the label within harbor\n"
        },
        "name": {
          "type": "string",
          "description": "The of name of the label within harbor.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The id of the project with harbor.\n"
        },
        "scope": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "name",
        "scope"
      ],
      "inputProperties": {
        "color": {
          "type": "string",
          "description": "The color of the label within harbor (Default: #FFFFF)\n"
        },
        "description": {
          "type": "string",
          "description": "The Description of the label within harbor\n"
        },
        "name": {
          "type": "string",
          "description": "The of name of the label within harbor.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The id of the project with harbor.\n"
        }
      },
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Label resources.\n",
        "properties": {
          "color": {
            "type": "string",
            "description": "The color of the label within harbor (Default: #FFFFF)\n"
          },
          "description": {
            "type": "string",
            "description": "The Description of the label within harbor\n"
          },
          "name": {
            "type": "string",
            "description": "The of name of the label within harbor.\n"
          },
          "projectId": {
            "type": "string",
            "description": "The id of the project with harbor.\n"
          },
          "scope": {
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/preheatInstance:PreheatInstance": {
      "description": "## Example Usage\n\n### Basic Usage\n\n```terraform\nresource \"harbor_preheat_instance\" \"example\" {\n  name     = \"example-preheat-instance\"\n  vendor   = \"dragonfly\"\n  endpoint = \"http://example.com\"\n}\n```\n\n### Usage with Authentication\n\n```terraform\nresource \"harbor_preheat_instance\" \"example\" {\n  name       = \"example-preheat-instance\"\n  vendor     = \"dragonfly\"\n  endpoint   = \"http://example.com\"\n  auth_mode  = \"BASIC\"\n  username   = \"example-user\"\n  password   = \"example-password\"\n}\n```\n\n## Import\n\nThe `harbor_preheat_instance` resource can be imported using the preheat instance ID.\n\n```sh\n$ pulumi import harbor:index/preheatInstance:PreheatInstance example /p2p/preheat/instances/example-preheat-instance\n```\n\n",
      "properties": {
        "authMode": {
          "type": "string",
          "description": "The authentication mode for the preheat instance. Must be either \"NONE\", \"BASIC\", or \"OAUTH\". Defaults to \"NONE\".\n"
        },
        "default": {
          "type": "boolean",
          "description": "Whether the preheat instance is the default instance. Defaults to false.\n"
        },
        "description": {
          "type": "string",
          "description": "The description of the preheat instance. Defaults to an empty string.\n"
        },
        "enabled": {
          "type": "boolean",
          "description": "Whether the preheat instance is enabled. Defaults to true.\n"
        },
        "endpoint": {
          "type": "string",
          "description": "The endpoint of the preheat instance.\n"
        },
        "insecure": {
          "type": "boolean",
          "description": "Whether to allow insecure connections to the preheat instance. Defaults to false.\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the preheat instance.\n"
        },
        "password": {
          "type": "string",
          "description": "The password for the preheat instance. Required if `auth_mode` is \"BASIC\". Defaults to an empty string.\n",
          "secret": true
        },
        "token": {
          "type": "string",
          "description": "The token for the preheat instance. Required if `auth_mode` is \"OAUTH\". Defaults to an empty string.\n",
          "secret": true
        },
        "username": {
          "type": "string",
          "description": "The username for the preheat instance. Required if `auth_mode` is \"BASIC\". Defaults to an empty string.\n"
        },
        "vendor": {
          "type": "string",
          "description": "The vendor of the preheat instance. Must be either \"dragonfly\" or \"kraken\".\n"
        }
      },
      "type": "object",
      "required": [
        "endpoint",
        "name",
        "vendor"
      ],
      "inputProperties": {
        "authMode": {
          "type": "string",
          "description": "The authentication mode for the preheat instance. Must be either \"NONE\", \"BASIC\", or \"OAUTH\". Defaults to \"NONE\".\n"
        },
        "default": {
          "type": "boolean",
          "description": "Whether the preheat instance is the default instance. Defaults to false.\n"
        },
        "description": {
          "type": "string",
          "description": "The description of the preheat instance. Defaults to an empty string.\n"
        },
        "enabled": {
          "type": "boolean",
          "description": "Whether the preheat instance is enabled. Defaults to true.\n"
        },
        "endpoint": {
          "type": "string",
          "description": "The endpoint of the preheat instance.\n"
        },
        "insecure": {
          "type": "boolean",
          "description": "Whether to allow insecure connections to the preheat instance. Defaults to false.\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the preheat instance.\n",
          "willReplaceOnChanges": true
        },
        "password": {
          "type": "string",
          "description": "The password for the preheat instance. Required if `auth_mode` is \"BASIC\". Defaults to an empty string.\n",
          "secret": true
        },
        "token": {
          "type": "string",
          "description": "The token for the preheat instance. Required if `auth_mode` is \"OAUTH\". Defaults to an empty string.\n",
          "secret": true
        },
        "username": {
          "type": "string",
          "description": "The username for the preheat instance. Required if `auth_mode` is \"BASIC\". Defaults to an empty string.\n"
        },
        "vendor": {
          "type": "string",
          "description": "The vendor of the preheat instance. Must be either \"dragonfly\" or \"kraken\".\n"
        }
      },
      "requiredInputs": [
        "endpoint",
        "vendor"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering PreheatInstance resources.\n",
        "properties": {
          "authMode": {
            "type": "string",
            "description": "The authentication mode for the preheat instance. Must be either \"NONE\", \"BASIC\", or \"OAUTH\". Defaults to \"NONE\".\n"
          },
          "default": {
            "type": "boolean",
            "description": "Whether the preheat instance is the default instance. Defaults to false.\n"
          },
          "description": {
            "type": "string",
            "description": "The description of the preheat instance. Defaults to an empty string.\n"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the preheat instance is enabled. Defaults to true.\n"
          },
          "endpoint": {
            "type": "string",
            "description": "The endpoint of the preheat instance.\n"
          },
          "insecure": {
            "type": "boolean",
            "description": "Whether to allow insecure connections to the preheat instance. Defaults to false.\n"
          },
          "name": {
            "type": "string",
            "description": "The name of the preheat instance.\n",
            "willReplaceOnChanges": true
          },
          "password": {
            "type": "string",
            "description": "The password for the preheat instance. Required if `auth_mode` is \"BASIC\". Defaults to an empty string.\n",
            "secret": true
          },
          "token": {
            "type": "string",
            "description": "The token for the preheat instance. Required if `auth_mode` is \"OAUTH\". Defaults to an empty string.\n",
            "secret": true
          },
          "username": {
            "type": "string",
            "description": "The username for the preheat instance. Required if `auth_mode` is \"BASIC\". Defaults to an empty string.\n"
          },
          "vendor": {
            "type": "string",
            "description": "The vendor of the preheat instance. Must be either \"dragonfly\" or \"kraken\".\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/project:Project": {
      "description": "## Example Usage\n\n### Hosted\n\n```terraform\nresource \"harbor_project\" \"main\" {\n  name                        = \"main\"\n  public                      = false               # (Optional) Default value is false\n  vulnerability_scanning      = true                # (Optional) Default value is true. Automatically scan images on push\n  enable_content_trust        = true                # (Optional) Default value is false. Deny unsigned images from being pulled (notary)\n  enable_content_trust_cosign = false               # (Optional) Default value is false. Deny unsigned images from being pulled (cosign)\n  auto_sbom_generation        = true                # (Optional) Default value is false. Automatically generate SBOMs for images\n}\n```\n\n### Proxy\n\n```terraform\nresource \"harbor_project\" \"main\" {\n  name        = \"acctest\"\n  registry_id = harbor_registry.docker.registry_id\n}\n\nresource \"harbor_registry\" \"docker\" {\n  provider_name = \"docker-hub\"\n  name          = \"test\"\n  endpoint_url  = \"https://hub.docker.com\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/project:Project main /projects/1\n```\n\n",
      "properties": {
        "autoSbomGeneration": {
          "type": "boolean",
          "description": "Automatically generate SBOM for images pushed to this project. (Default: `false`) can only be used with Harbor version v2.11.0 and above\n"
        },
        "cveAllowlists": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Project allowlist allows vulnerabilities in this list to be ignored in this project when pushing and pulling images. Should be in the format or `[\"CVE-123\", \"CVE-145\"]` or `[\"CVE-123\"]`\n"
        },
        "deploymentSecurity": {
          "type": "string",
          "description": "Prevent deployment of images with vulnerability severity equal or higher than the specified value. Images must be scanned before this takes effect. Possible values: `\"critical\"`, `\"high\"`, `\"medium\"`, `\"low\"`, `\"none\"`. (Default: `\"\"` - empty)\n"
        },
        "enableContentTrust": {
          "type": "boolean",
          "description": "Enables Content Trust for project. When enabled it queries the embedded docker notary server. (Default: `false`).\n"
        },
        "enableContentTrustCosign": {
          "type": "boolean",
          "description": "Enables Content Trust Cosign for project. When enabled it queries Cosign. (Default: `false`)\n"
        },
        "forceDestroy": {
          "type": "boolean",
          "description": "A boolean that indicates all repositories should be deleted from the project so that the project can be destroyed without error. These repositories are *not* recoverable.\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the project that will be created in harbor.\n"
        },
        "projectId": {
          "type": "integer",
          "description": "The project id of this resource.\n"
        },
        "public": {
          "type": "boolean",
          "description": "The project will be public accessibility.(Default: `false`)\n"
        },
        "registryId": {
          "type": "integer",
          "description": "To enable project as Proxy Cache.\n"
        },
        "storageQuota": {
          "type": "integer",
          "description": "The storage quota of the project in GB's.\n"
        },
        "vulnerabilityScanning": {
          "type": "boolean",
          "description": "Images will be scanned for vulnerabilities when push to harbor. (Default: `true`)\n"
        }
      },
      "type": "object",
      "required": [
        "name",
        "projectId",
        "registryId"
      ],
      "inputProperties": {
        "autoSbomGeneration": {
          "type": "boolean",
          "description": "Automatically generate SBOM for images pushed to this project. (Default: `false`) can only be used with Harbor version v2.11.0 and above\n"
        },
        "cveAllowlists": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Project allowlist allows vulnerabilities in this list to be ignored in this project when pushing and pulling images. Should be in the format or `[\"CVE-123\", \"CVE-145\"]` or `[\"CVE-123\"]`\n"
        },
        "deploymentSecurity": {
          "type": "string",
          "description": "Prevent deployment of images with vulnerability severity equal or higher than the specified value. Images must be scanned before this takes effect. Possible values: `\"critical\"`, `\"high\"`, `\"medium\"`, `\"low\"`, `\"none\"`. (Default: `\"\"` - empty)\n"
        },
        "enableContentTrust": {
          "type": "boolean",
          "description": "Enables Content Trust for project. When enabled it queries the embedded docker notary server. (Default: `false`).\n"
        },
        "enableContentTrustCosign": {
          "type": "boolean",
          "description": "Enables Content Trust Cosign for project. When enabled it queries Cosign. (Default: `false`)\n"
        },
        "forceDestroy": {
          "type": "boolean",
          "description": "A boolean that indicates all repositories should be deleted from the project so that the project can be destroyed without error. These repositories are *not* recoverable.\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the project that will be created in harbor.\n",
          "willReplaceOnChanges": true
        },
        "public": {
          "type": "boolean",
          "description": "The project will be public accessibility.(Default: `false`)\n"
        },
        "registryId": {
          "type": "integer",
          "description": "To enable project as Proxy Cache.\n",
          "willReplaceOnChanges": true
        },
        "storageQuota": {
          "type": "integer",
          "description": "The storage quota of the project in GB's.\n"
        },
        "vulnerabilityScanning": {
          "type": "boolean",
          "description": "Images will be scanned for vulnerabilities when push to harbor. (Default: `true`)\n"
        }
      },
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Project resources.\n",
        "properties": {
          "autoSbomGeneration": {
            "type": "boolean",
            "description": "Automatically generate SBOM for images pushed to this project. (Default: `false`) can only be used with Harbor version v2.11.0 and above\n"
          },
          "cveAllowlists": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Project allowlist allows vulnerabilities in this list to be ignored in this project when pushing and pulling images. Should be in the format or `[\"CVE-123\", \"CVE-145\"]` or `[\"CVE-123\"]`\n"
          },
          "deploymentSecurity": {
            "type": "string",
            "description": "Prevent deployment of images with vulnerability severity equal or higher than the specified value. Images must be scanned before this takes effect. Possible values: `\"critical\"`, `\"high\"`, `\"medium\"`, `\"low\"`, `\"none\"`. (Default: `\"\"` - empty)\n"
          },
          "enableContentTrust": {
            "type": "boolean",
            "description": "Enables Content Trust for project. When enabled it queries the embedded docker notary server. (Default: `false`).\n"
          },
          "enableContentTrustCosign": {
            "type": "boolean",
            "description": "Enables Content Trust Cosign for project. When enabled it queries Cosign. (Default: `false`)\n"
          },
          "forceDestroy": {
            "type": "boolean",
            "description": "A boolean that indicates all repositories should be deleted from the project so that the project can be destroyed without error. These repositories are *not* recoverable.\n"
          },
          "name": {
            "type": "string",
            "description": "The name of the project that will be created in harbor.\n",
            "willReplaceOnChanges": true
          },
          "projectId": {
            "type": "integer",
            "description": "The project id of this resource.\n"
          },
          "public": {
            "type": "boolean",
            "description": "The project will be public accessibility.(Default: `false`)\n"
          },
          "registryId": {
            "type": "integer",
            "description": "To enable project as Proxy Cache.\n",
            "willReplaceOnChanges": true
          },
          "storageQuota": {
            "type": "integer",
            "description": "The storage quota of the project in GB's.\n"
          },
          "vulnerabilityScanning": {
            "type": "boolean",
            "description": "Images will be scanned for vulnerabilities when push to harbor. (Default: `true`)\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/projectMemberGroup:ProjectMemberGroup": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_project\" \"main\" {\n    name = \"main\"\n}\n\nresource \"harbor_project_member_group\" \"main\" {\n  project_id    = harbor_project.main.id\n  group_name    = \"testing1\"\n  role          = \"projectadmin\"\n  type          = \"oidc\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/projectMemberGroup:ProjectMemberGroup main /projects/10/members/200\n```\n\n",
      "properties": {
        "groupId": {
          "type": "integer"
        },
        "groupName": {
          "type": "string"
        },
        "ldapGroupDn": {
          "type": "string"
        },
        "memberId": {
          "type": "integer"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of the project that the entity will have access to.\n"
        },
        "role": {
          "type": "string",
          "description": "The permissions that the entity will be granted.\n"
        },
        "type": {
          "type": "string",
          "description": "The group type.  Can be set to `\"ldap\"`, `\"internal\"` or `\"oidc\"`.\n"
        }
      },
      "type": "object",
      "required": [
        "memberId",
        "projectId",
        "role",
        "type"
      ],
      "inputProperties": {
        "groupId": {
          "type": "integer",
          "willReplaceOnChanges": true
        },
        "groupName": {
          "type": "string",
          "willReplaceOnChanges": true
        },
        "ldapGroupDn": {
          "type": "string"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of the project that the entity will have access to.\n",
          "willReplaceOnChanges": true
        },
        "role": {
          "type": "string",
          "description": "The permissions that the entity will be granted.\n"
        },
        "type": {
          "type": "string",
          "description": "The group type.  Can be set to `\"ldap\"`, `\"internal\"` or `\"oidc\"`.\n"
        }
      },
      "requiredInputs": [
        "projectId",
        "role",
        "type"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ProjectMemberGroup resources.\n",
        "properties": {
          "groupId": {
            "type": "integer",
            "willReplaceOnChanges": true
          },
          "groupName": {
            "type": "string",
            "willReplaceOnChanges": true
          },
          "ldapGroupDn": {
            "type": "string"
          },
          "memberId": {
            "type": "integer"
          },
          "projectId": {
            "type": "string",
            "description": "The project id of the project that the entity will have access to.\n",
            "willReplaceOnChanges": true
          },
          "role": {
            "type": "string",
            "description": "The permissions that the entity will be granted.\n"
          },
          "type": {
            "type": "string",
            "description": "The group type.  Can be set to `\"ldap\"`, `\"internal\"` or `\"oidc\"`.\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/projectMemberUser:ProjectMemberUser": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_project\" \"main\" {\n    name = \"main\"\n}\n\nresource \"harbor_project_member_user\" \"main\" {\n  project_id    = harbor_project.main.id\n  user_name     = \"testing1\"\n  role          = \"projectadmin\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/projectMemberUser:ProjectMemberUser main /projects/10/members/200\n```\n\n",
      "properties": {
        "memberId": {
          "type": "integer",
          "description": "The member id of the member.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of the project that the entity will have access to.\n"
        },
        "role": {
          "type": "string",
          "description": "The permissions that the entity will be granted.\n"
        },
        "userName": {
          "type": "string",
          "description": "The name of the member entity.\n"
        }
      },
      "type": "object",
      "required": [
        "memberId",
        "projectId",
        "role",
        "userName"
      ],
      "inputProperties": {
        "projectId": {
          "type": "string",
          "description": "The project id of the project that the entity will have access to.\n",
          "willReplaceOnChanges": true
        },
        "role": {
          "type": "string",
          "description": "The permissions that the entity will be granted.\n"
        },
        "userName": {
          "type": "string",
          "description": "The name of the member entity.\n",
          "willReplaceOnChanges": true
        }
      },
      "requiredInputs": [
        "projectId",
        "role",
        "userName"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ProjectMemberUser resources.\n",
        "properties": {
          "memberId": {
            "type": "integer",
            "description": "The member id of the member.\n"
          },
          "projectId": {
            "type": "string",
            "description": "The project id of the project that the entity will have access to.\n",
            "willReplaceOnChanges": true
          },
          "role": {
            "type": "string",
            "description": "The permissions that the entity will be granted.\n"
          },
          "userName": {
            "type": "string",
            "description": "The name of the member entity.\n",
            "willReplaceOnChanges": true
          }
        },
        "type": "object"
      }
    },
    "harbor:index/projectWebhook:ProjectWebhook": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_project\" \"main\" {\n  name = \"test-project\"\n}\n\nresource \"harbor_project_webhook\" \"main\" {\n  name        = \"test_webhook\"\n  address     = \"https://webhook.domain.com\"\n  project_id  = harbor_project.main.id\n  notify_type = \"http\"\n\n  events_types = [\n    \"DELETE_ARTIFACT\",\n    \"PULL_ARTIFACT\",\n    \"PUSH_ARTIFACT\",\n    \"QUOTA_EXCEED\",\n    \"QUOTA_WARNING\",\n    \"REPLICATION\",\n    \"SCANNING_FAILED\",\n    \"SCANNING_COMPLETED\",\n    \"TAG_RETENTION\"\n  ]\n\n}\n```\n",
      "properties": {
        "address": {
          "type": "string",
          "description": "The address of the webhook.\n"
        },
        "authHeader": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "eventsTypes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The type events you want to subscript to can be\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the webhook that will be created in harbor.\n"
        },
        "notifyType": {
          "type": "string",
          "description": "The notification type either `http` or `slack`.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of the harbor that webhook related to.\n"
        },
        "skipCertVerify": {
          "type": "boolean"
        }
      },
      "type": "object",
      "required": [
        "address",
        "eventsTypes",
        "name",
        "notifyType",
        "projectId"
      ],
      "inputProperties": {
        "address": {
          "type": "string",
          "description": "The address of the webhook.\n"
        },
        "authHeader": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "eventsTypes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The type events you want to subscript to can be\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the webhook that will be created in harbor.\n",
          "willReplaceOnChanges": true
        },
        "notifyType": {
          "type": "string",
          "description": "The notification type either `http` or `slack`.\n"
        },
        "projectId": {
          "type": "string",
          "description": "The project id of the harbor that webhook related to.\n"
        },
        "skipCertVerify": {
          "type": "boolean"
        }
      },
      "requiredInputs": [
        "address",
        "eventsTypes",
        "notifyType",
        "projectId"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering ProjectWebhook resources.\n",
        "properties": {
          "address": {
            "type": "string",
            "description": "The address of the webhook.\n"
          },
          "authHeader": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "eventsTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The type events you want to subscript to can be\n"
          },
          "name": {
            "type": "string",
            "description": "The name of the webhook that will be created in harbor.\n",
            "willReplaceOnChanges": true
          },
          "notifyType": {
            "type": "string",
            "description": "The notification type either `http` or `slack`.\n"
          },
          "projectId": {
            "type": "string",
            "description": "The project id of the harbor that webhook related to.\n"
          },
          "skipCertVerify": {
            "type": "boolean"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/purgeAuditLog:PurgeAuditLog": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_purge_audit_log\" \"main\" {\n  schedule              = \"Daily\"\n  audit_retention_hour  = 24\n  include_operations    = \"create,pull\"\n}\n```\n",
      "properties": {
        "auditRetentionHour": {
          "type": "integer",
          "description": "To configure how long audit logs should be kept. For example, if you set this to 24 Harbor will only purge audit logs that are 24 or more hours old.\n"
        },
        "includeOperations": {
          "type": "string",
          "description": "Valid values are `create` `delete` `pull`, thoses values can be comma separated. When Create, Delete, or Pull is set, Harbor will include audit logs for those operations in the purge.\n"
        },
        "schedule": {
          "type": "string",
          "description": "Sets the schedule how often the Garbage Collection will run.  Can be to `\"Hourly\"`, `\"Daily\"`, `\"Weekly\"` or can be a custom cron string ie, `\"5 4 * * *\"`\n"
        }
      },
      "type": "object",
      "required": [
        "auditRetentionHour",
        "includeOperations",
        "schedule"
      ],
      "inputProperties": {
        "auditRetentionHour": {
          "type": "integer",
          "description": "To configure how long audit logs should be kept. For example, if you set this to 24 Harbor will only purge audit logs that are 24 or more hours old.\n"
        },
        "includeOperations": {
          "type": "string",
          "description": "Valid values are `create` `delete` `pull`, thoses values can be comma separated. When Create, Delete, or Pull is set, Harbor will include audit logs for those operations in the purge.\n"
        },
        "schedule": {
          "type": "string",
          "description": "Sets the schedule how often the Garbage Collection will run.  Can be to `\"Hourly\"`, `\"Daily\"`, `\"Weekly\"` or can be a custom cron string ie, `\"5 4 * * *\"`\n"
        }
      },
      "requiredInputs": [
        "auditRetentionHour",
        "includeOperations",
        "schedule"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering PurgeAuditLog resources.\n",
        "properties": {
          "auditRetentionHour": {
            "type": "integer",
            "description": "To configure how long audit logs should be kept. For example, if you set this to 24 Harbor will only purge audit logs that are 24 or more hours old.\n"
          },
          "includeOperations": {
            "type": "string",
            "description": "Valid values are `create` `delete` `pull`, thoses values can be comma separated. When Create, Delete, or Pull is set, Harbor will include audit logs for those operations in the purge.\n"
          },
          "schedule": {
            "type": "string",
            "description": "Sets the schedule how often the Garbage Collection will run.  Can be to `\"Hourly\"`, `\"Daily\"`, `\"Weekly\"` or can be a custom cron string ie, `\"5 4 * * *\"`\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/registry:Registry": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_registry\" \"main\" {\n  provider_name = \"docker-hub\"\n  name          = \"test_docker_harbor\"\n  endpoint_url  = \"https://hub.docker.com\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/registry:Registry main /registries/7\n```\n\n",
      "properties": {
        "accessId": {
          "type": "string"
        },
        "accessSecret": {
          "type": "string",
          "secret": true
        },
        "description": {
          "type": "string"
        },
        "endpointUrl": {
          "type": "string",
          "description": "The url endpoint for the external container register ie `\"https://hub.docker.com\"`\n"
        },
        "insecure": {
          "type": "boolean"
        },
        "name": {
          "type": "string",
          "description": "The name of the register.\n"
        },
        "providerName": {
          "type": "string",
          "description": "The name of the provider.\n"
        },
        "registryId": {
          "type": "integer"
        },
        "status": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "endpointUrl",
        "name",
        "providerName",
        "registryId",
        "status"
      ],
      "inputProperties": {
        "accessId": {
          "type": "string"
        },
        "accessSecret": {
          "type": "string",
          "secret": true
        },
        "description": {
          "type": "string"
        },
        "endpointUrl": {
          "type": "string",
          "description": "The url endpoint for the external container register ie `\"https://hub.docker.com\"`\n"
        },
        "insecure": {
          "type": "boolean"
        },
        "name": {
          "type": "string",
          "description": "The name of the register.\n"
        },
        "providerName": {
          "type": "string",
          "description": "The name of the provider.\n",
          "willReplaceOnChanges": true
        }
      },
      "requiredInputs": [
        "endpointUrl",
        "providerName"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Registry resources.\n",
        "properties": {
          "accessId": {
            "type": "string"
          },
          "accessSecret": {
            "type": "string",
            "secret": true
          },
          "description": {
            "type": "string"
          },
          "endpointUrl": {
            "type": "string",
            "description": "The url endpoint for the external container register ie `\"https://hub.docker.com\"`\n"
          },
          "insecure": {
            "type": "boolean"
          },
          "name": {
            "type": "string",
            "description": "The name of the register.\n"
          },
          "providerName": {
            "type": "string",
            "description": "The name of the provider.\n",
            "willReplaceOnChanges": true
          },
          "registryId": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/replication:Replication": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_registry\" \"main\" {\n  provider_name = \"docker-hub\"\n  name          = \"test_docker_harbor\"\n  endpoint_url  = \"https://hub.docker.com\"\n\n}\n\nresource \"harbor_replication\" \"push\" {\n  name        = \"test_push\"\n  action      = \"push\"\n  registry_id = harbor_registry.main.registry_id\n}\n\nresource \"harbor_replication\" \"alpine\" {\n  name        = \"alpine\"\n  action      = \"pull\"\n  registry_id = harbor_registry.main.registry_id\n  schedule = \"0 0/15 * * * *\"\n  filters {\n    name = \"library/alpine\"\n  }\n  filters {\n    tag = \"3.*.*\"\n  }\n  filters {\n    resource = \"artifact\"\n  }\n  filters {\n    labels = [\"qa\"]\n  }\n}\n\nresource \"harbor_replication\" \"alpine\" {\n  name        = \"alpine\"\n  action      = \"push\"\n  registry_id = harbor_registry.main.registry_id\n  schedule = \"event_based\"\n  filters {\n    name = \"library/alpine\"\n  }\n  filters {\n    tag = \"3.*.*\"\n  }\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/replication:Replication main /replication/policies/1\n```\n\n",
      "properties": {
        "action": {
          "type": "string"
        },
        "copyByChunk": {
          "type": "boolean",
          "description": "Specify whether to enable the artifact blobs copied by chunks. (Default: `false`)\n"
        },
        "deletion": {
          "type": "boolean",
          "description": "Specify whether to delete the remote resources when locally deleted. (Default: `false`)\n"
        },
        "description": {
          "type": "string",
          "description": "Description of the replication policy.\n"
        },
        "destNamespace": {
          "type": "string",
          "description": "Specify the destination namespace. if empty, the resource will be put under the same namespace as the source.\n"
        },
        "destNamespaceReplace": {
          "type": "integer",
          "description": "Specify the destination namespace flattening policy. Integers from `-1` to `3` are valid values in the harbor API. A value of `-1` will 'Flatten All Levels', `0` means 'No Flattening', `1` 'Flatten 1 Level', `2` 'Flatten 2 Levels', `3` 'Flatten 3 Levels' (Default: `-1`, see [Replication Rules](https://goharbor.io/docs/latest/administration/configuring-replication/create-replication-rules/) for more details)\n"
        },
        "enabled": {
          "type": "boolean",
          "description": "Specify whether the replication is enabled. (Default: `true`)\n"
        },
        "executeOnChanged": {
          "type": "boolean",
          "description": "Specify whether to execute the replication rule if new or modified. (Default: `false`)\n"
        },
        "filters": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FReplicationFilter:ReplicationFilter"
          }
        },
        "name": {
          "type": "string",
          "description": "The name of the replication.\n"
        },
        "override": {
          "type": "boolean",
          "description": "Specify whether to override the resources at the destination if a resources with the same name exist. (Default: `true`)\n"
        },
        "registryId": {
          "type": "integer",
          "description": "The registry ID of the Registry Endpoint.\n"
        },
        "replicationPolicyId": {
          "type": "integer"
        },
        "schedule": {
          "type": "string",
          "description": "The scheduled time of when the container register will be push / pull. In cron base format. Hourly `\"0 0 * * * *\"`, Daily `\"0 0 0 * * *\"`, Monthly `\"0 0 0 * * 0\"`. Can be one of the following: `event_based`, `manual`, `cron format` (Default: `manual`)\n"
        },
        "speed": {
          "type": "integer",
          "description": "The Maximum network bandwidth in Kbps for each execution. Default is `-1` (unlimited).\n"
        }
      },
      "type": "object",
      "required": [
        "action",
        "name",
        "registryId",
        "replicationPolicyId"
      ],
      "inputProperties": {
        "action": {
          "type": "string",
          "willReplaceOnChanges": true
        },
        "copyByChunk": {
          "type": "boolean",
          "description": "Specify whether to enable the artifact blobs copied by chunks. (Default: `false`)\n"
        },
        "deletion": {
          "type": "boolean",
          "description": "Specify whether to delete the remote resources when locally deleted. (Default: `false`)\n"
        },
        "description": {
          "type": "string",
          "description": "Description of the replication policy.\n"
        },
        "destNamespace": {
          "type": "string",
          "description": "Specify the destination namespace. if empty, the resource will be put under the same namespace as the source.\n"
        },
        "destNamespaceReplace": {
          "type": "integer",
          "description": "Specify the destination namespace flattening policy. Integers from `-1` to `3` are valid values in the harbor API. A value of `-1` will 'Flatten All Levels', `0` means 'No Flattening', `1` 'Flatten 1 Level', `2` 'Flatten 2 Levels', `3` 'Flatten 3 Levels' (Default: `-1`, see [Replication Rules](https://goharbor.io/docs/latest/administration/configuring-replication/create-replication-rules/) for more details)\n"
        },
        "enabled": {
          "type": "boolean",
          "description": "Specify whether the replication is enabled. (Default: `true`)\n"
        },
        "executeOnChanged": {
          "type": "boolean",
          "description": "Specify whether to execute the replication rule if new or modified. (Default: `false`)\n"
        },
        "filters": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FReplicationFilter:ReplicationFilter"
          }
        },
        "name": {
          "type": "string",
          "description": "The name of the replication.\n"
        },
        "override": {
          "type": "boolean",
          "description": "Specify whether to override the resources at the destination if a resources with the same name exist. (Default: `true`)\n"
        },
        "registryId": {
          "type": "integer",
          "description": "The registry ID of the Registry Endpoint.\n"
        },
        "schedule": {
          "type": "string",
          "description": "The scheduled time of when the container register will be push / pull. In cron base format. Hourly `\"0 0 * * * *\"`, Daily `\"0 0 0 * * *\"`, Monthly `\"0 0 0 * * 0\"`. Can be one of the following: `event_based`, `manual`, `cron format` (Default: `manual`)\n"
        },
        "speed": {
          "type": "integer",
          "description": "The Maximum network bandwidth in Kbps for each execution. Default is `-1` (unlimited).\n"
        }
      },
      "requiredInputs": [
        "action",
        "registryId"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Replication resources.\n",
        "properties": {
          "action": {
            "type": "string",
            "willReplaceOnChanges": true
          },
          "copyByChunk": {
            "type": "boolean",
            "description": "Specify whether to enable the artifact blobs copied by chunks. (Default: `false`)\n"
          },
          "deletion": {
            "type": "boolean",
            "description": "Specify whether to delete the remote resources when locally deleted. (Default: `false`)\n"
          },
          "description": {
            "type": "string",
            "description": "Description of the replication policy.\n"
          },
          "destNamespace": {
            "type": "string",
            "description": "Specify the destination namespace. if empty, the resource will be put under the same namespace as the source.\n"
          },
          "destNamespaceReplace": {
            "type": "integer",
            "description": "Specify the destination namespace flattening policy. Integers from `-1` to `3` are valid values in the harbor API. A value of `-1` will 'Flatten All Levels', `0` means 'No Flattening', `1` 'Flatten 1 Level', `2` 'Flatten 2 Levels', `3` 'Flatten 3 Levels' (Default: `-1`, see [Replication Rules](https://goharbor.io/docs/latest/administration/configuring-replication/create-replication-rules/) for more details)\n"
          },
          "enabled": {
            "type": "boolean",
            "description": "Specify whether the replication is enabled. (Default: `true`)\n"
          },
          "executeOnChanged": {
            "type": "boolean",
            "description": "Specify whether to execute the replication rule if new or modified. (Default: `false`)\n"
          },
          "filters": {
            "type": "array",
            "items": {
              "$ref": "#/types/harbor:index%2FReplicationFilter:ReplicationFilter"
            }
          },
          "name": {
            "type": "string",
            "description": "The name of the replication.\n"
          },
          "override": {
            "type": "boolean",
            "description": "Specify whether to override the resources at the destination if a resources with the same name exist. (Default: `true`)\n"
          },
          "registryId": {
            "type": "integer",
            "description": "The registry ID of the Registry Endpoint.\n"
          },
          "replicationPolicyId": {
            "type": "integer"
          },
          "schedule": {
            "type": "string",
            "description": "The scheduled time of when the container register will be push / pull. In cron base format. Hourly `\"0 0 * * * *\"`, Daily `\"0 0 0 * * *\"`, Monthly `\"0 0 0 * * 0\"`. Can be one of the following: `event_based`, `manual`, `cron format` (Default: `manual`)\n"
          },
          "speed": {
            "type": "integer",
            "description": "The Maximum network bandwidth in Kbps for each execution. Default is `-1` (unlimited).\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/retentionPolicy:RetentionPolicy": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_project\" \"main\" {\n  name = \"acctest\"\n}\n\nresource \"harbor_retention_policy\" \"main\" {\n  scope = harbor_project.main.id\n  schedule = \"Daily\"\n  rule {\n    n_days_since_last_pull = 5\n    repo_matching = \"**\"\n    tag_matching = \"latest\"\n  }\n  rule {\n    n_days_since_last_push = 10\n    repo_matching = \"**\"\n    tag_matching = \"{latest,snapshot}\"\n  }\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/retentionPolicy:RetentionPolicy main /retentions/10\n```\n\n",
      "properties": {
        "rules": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FRetentionPolicyRule:RetentionPolicyRule"
          }
        },
        "schedule": {
          "type": "string",
          "description": "The schedule of when you would like the policy to run. This can be `Hourly`, `Daily`, `Weekly` or can be a custom cron string.\n"
        },
        "scope": {
          "type": "string",
          "description": "The project id of which you would like to apply this policy.\n"
        }
      },
      "type": "object",
      "required": [
        "rules",
        "scope"
      ],
      "inputProperties": {
        "rules": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FRetentionPolicyRule:RetentionPolicyRule"
          }
        },
        "schedule": {
          "type": "string",
          "description": "The schedule of when you would like the policy to run. This can be `Hourly`, `Daily`, `Weekly` or can be a custom cron string.\n"
        },
        "scope": {
          "type": "string",
          "description": "The project id of which you would like to apply this policy.\n",
          "willReplaceOnChanges": true
        }
      },
      "requiredInputs": [
        "rules",
        "scope"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering RetentionPolicy resources.\n",
        "properties": {
          "rules": {
            "type": "array",
            "items": {
              "$ref": "#/types/harbor:index%2FRetentionPolicyRule:RetentionPolicyRule"
            }
          },
          "schedule": {
            "type": "string",
            "description": "The schedule of when you would like the policy to run. This can be `Hourly`, `Daily`, `Weekly` or can be a custom cron string.\n"
          },
          "scope": {
            "type": "string",
            "description": "The project id of which you would like to apply this policy.\n",
            "willReplaceOnChanges": true
          }
        },
        "type": "object"
      }
    },
    "harbor:index/robotAccount:RobotAccount": {
      "description": "## Example Usage\n\n### System Level\nIntroduced in harbor 2.2.0, system level robot accounts can have basically [all available permissions](https://github.com/goharbor/harbor/blob/-/src/common/rbac/const.go) in harbor and are not dependent on a single project.\n\n### Global\n\n```terraform\nresource \"random_password\" \"password\" {\n  length  = 12\n  special = false\n}\n\nresource \"harbor_project\" \"main\" {\n    name = \"main\"\n}\n\nresource \"harbor_robot_account\" \"system\" {\n  name        = \"example-system\"\n  description = \"system level robot account\"\n  level       = \"system\"\n  secret      = resource.random_password.password.result\n  permissions {\n    access {\n      action   = \"create\"\n      resource = \"label\"\n    }\n    kind      = \"system\"\n    namespace = \"/\"\n  }\n  permissions {\n    access {\n      action   = \"push\"\n      resource = \"repository\"\n    }\n    kind      = \"project\"\n    namespace = harbor_project.main.name\n  }\n  permissions {\n    access {\n      action   = \"pull\"\n      resource = \"repository\"\n    }\n    kind      = \"project\"\n    namespace = \"*\"\n  }\n}\n```\n\nThe above example, creates a system level robot account with permissions to\n- permission to create labels on system level\n- pull repository across all projects\n- push repository to project \"my-project-name\"\n\n### Project\n\nOther than system level robot accounts, project level robot accounts can interact on project level only.\nThe [available permissions](https://github.com/goharbor/harbor/blob/-/src/common/rbac/const.go) are mostly the same as for system level robots.\n\n```terraform\nresource \"harbor_project\" \"main\" {\n    name = \"main\"\n}\n\nresource \"harbor_robot_account\" \"project\" {\n  name        = \"example-project\"\n  description = \"project level robot account\"\n  level       = \"project\"\n  permissions {\n    access {\n      action   = \"pull\"\n      resource = \"repository\"\n    }\n    access {\n      action   = \"push\"\n      resource = \"repository\"\n    }\n    kind      = \"project\"\n    namespace = harbor_project.main.name\n  }\n}\n```\n\nThe above example creates a project level robot account with permissions to\n- pull repository on project \"main\"\n- push repository on project \"main\"\n\n## Import\n\n```sh\n$ pulumi import harbor:index/robotAccount:RobotAccount system /robots/123\n```\n\n",
      "properties": {
        "description": {
          "type": "string",
          "description": "The description of the robot account will be displayed in harbor.\n"
        },
        "disable": {
          "type": "boolean",
          "description": "Disables the robot account when set to `true`.\n"
        },
        "duration": {
          "type": "integer",
          "description": "By default, the robot account will not expire. Set it to the amount of days until the account should expire.\n"
        },
        "fullName": {
          "type": "string"
        },
        "level": {
          "type": "string",
          "description": "Level of the robot account, currently either `system` or `project`.\n"
        },
        "name": {
          "type": "string",
          "description": "The name of the project that will be created in harbor.\n"
        },
        "permissions": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FRobotAccountPermission:RobotAccountPermission"
          }
        },
        "robotId": {
          "type": "string"
        },
        "secret": {
          "type": "string",
          "description": "The secret of the robot account used for authentication. Defaults to random generated string from Harbor.\n",
          "secret": true
        }
      },
      "type": "object",
      "required": [
        "fullName",
        "level",
        "name",
        "permissions",
        "robotId",
        "secret"
      ],
      "inputProperties": {
        "description": {
          "type": "string",
          "description": "The description of the robot account will be displayed in harbor.\n"
        },
        "disable": {
          "type": "boolean",
          "description": "Disables the robot account when set to `true`.\n"
        },
        "duration": {
          "type": "integer",
          "description": "By default, the robot account will not expire. Set it to the amount of days until the account should expire.\n"
        },
        "level": {
          "type": "string",
          "description": "Level of the robot account, currently either `system` or `project`.\n",
          "willReplaceOnChanges": true
        },
        "name": {
          "type": "string",
          "description": "The name of the project that will be created in harbor.\n",
          "willReplaceOnChanges": true
        },
        "permissions": {
          "type": "array",
          "items": {
            "$ref": "#/types/harbor:index%2FRobotAccountPermission:RobotAccountPermission"
          }
        },
        "secret": {
          "type": "string",
          "description": "The secret of the robot account used for authentication. Defaults to random generated string from Harbor.\n",
          "secret": true
        }
      },
      "requiredInputs": [
        "level",
        "permissions"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering RobotAccount resources.\n",
        "properties": {
          "description": {
            "type": "string",
            "description": "The description of the robot account will be displayed in harbor.\n"
          },
          "disable": {
            "type": "boolean",
            "description": "Disables the robot account when set to `true`.\n"
          },
          "duration": {
            "type": "integer",
            "description": "By default, the robot account will not expire. Set it to the amount of days until the account should expire.\n"
          },
          "fullName": {
            "type": "string"
          },
          "level": {
            "type": "string",
            "description": "Level of the robot account, currently either `system` or `project`.\n",
            "willReplaceOnChanges": true
          },
          "name": {
            "type": "string",
            "description": "The name of the project that will be created in harbor.\n",
            "willReplaceOnChanges": true
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/types/harbor:index%2FRobotAccountPermission:RobotAccountPermission"
            }
          },
          "robotId": {
            "type": "string"
          },
          "secret": {
            "type": "string",
            "description": "The secret of the robot account used for authentication. Defaults to random generated string from Harbor.\n",
            "secret": true
          }
        },
        "type": "object"
      }
    },
    "harbor:index/tasks:Tasks": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_tasks\" \"main\" {\n  vulnerability_scan_policy = \"daily\"\n}\n```\n",
      "properties": {
        "vulnerabilityScanPolicy": {
          "type": "string",
          "description": "The frequency of the vulnerability scanning is done. Can be to **\"hourly\"**, **\"daily\"** or **\"weekly\"**\n"
        }
      },
      "type": "object",
      "required": [
        "vulnerabilityScanPolicy"
      ],
      "inputProperties": {
        "vulnerabilityScanPolicy": {
          "type": "string",
          "description": "The frequency of the vulnerability scanning is done. Can be to **\"hourly\"**, **\"daily\"** or **\"weekly\"**\n"
        }
      },
      "requiredInputs": [
        "vulnerabilityScanPolicy"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Tasks resources.\n",
        "properties": {
          "vulnerabilityScanPolicy": {
            "type": "string",
            "description": "The frequency of the vulnerability scanning is done. Can be to **\"hourly\"**, **\"daily\"** or **\"weekly\"**\n"
          }
        },
        "type": "object"
      }
    },
    "harbor:index/user:User": {
      "description": "## Example Usage\n\n```terraform\nresource \"harbor_user\" \"main\" {\n  username = \"john\"\n  password = \"Password12345!\"\n  full_name = \"John Smith\"\n  email = \"john@smith.com\"\n}\n```\n\n## Import\n\n```sh\n$ pulumi import harbor:index/user:User main /users/19\n```\n\n",
      "properties": {
        "admin": {
          "type": "boolean",
          "description": "If the user will have admin rights within Harbor (Default: `false`)\n"
        },
        "comment": {
          "type": "string",
          "description": "Any comments for that are need for the internal user.\n"
        },
        "email": {
          "type": "string",
          "description": "The email address of the internal user.\n"
        },
        "fullName": {
          "type": "string",
          "description": "The Full Name of the internal user.\n"
        },
        "password": {
          "type": "string",
          "description": "The password for the internal user.\n",
          "secret": true
        },
        "username": {
          "type": "string",
          "description": "The username of the internal user.\n"
        }
      },
      "type": "object",
      "required": [
        "email",
        "fullName",
        "password",
        "username"
      ],
      "inputProperties": {
        "admin": {
          "type": "boolean",
          "description": "If the user will have admin rights within Harbor (Default: `false`)\n"
        },
        "comment": {
          "type": "string",
          "description": "Any comments for that are need for the internal user.\n"
        },
        "email": {
          "type": "string",
          "description": "The email address of the internal user.\n"
        },
        "fullName": {
          "type": "string",
          "description": "The Full Name of the internal user.\n"
        },
        "password": {
          "type": "string",
          "description": "The password for the internal user.\n",
          "secret": true
        },
        "username": {
          "type": "string",
          "description": "The username of the internal user.\n",
          "willReplaceOnChanges": true
        }
      },
      "requiredInputs": [
        "email",
        "fullName",
        "password",
        "username"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering User resources.\n",
        "properties": {
          "admin": {
            "type": "boolean",
            "description": "If the user will have admin rights within Harbor (Default: `false`)\n"
          },
          "comment": {
            "type": "string",
            "description": "Any comments for that are need for the internal user.\n"
          },
          "email": {
            "type": "string",
            "description": "The email address of the internal user.\n"
          },
          "fullName": {
            "type": "string",
            "description": "The Full Name of the internal user.\n"
          },
          "password": {
            "type": "string",
            "description": "The password for the internal user.\n",
            "secret": true
          },
          "username": {
            "type": "string",
            "description": "The username of the internal user.\n",
            "willReplaceOnChanges": true
          }
        },
        "type": "object"
      }
    }
  },
  "functions": {
    "harbor:index/getGroups:getGroups": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_groups\" \"example\" {\n  group_name = \"example-group\"\n}\n\noutput \"group_ids\" {\n  value = [data.harbor_groups.example.*.id]\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getGroups.\n",
        "properties": {
          "groupName": {
            "type": "string",
            "description": "The name of the group to filter by.\n"
          },
          "ldapGroupDn": {
            "type": "string",
            "description": "The LDAP group DN to filter by.\n"
          }
        },
        "type": "object"
      },
      "outputs": {
        "description": "A collection of values returned by getGroups.\n",
        "properties": {
          "groupName": {
            "description": "The name of the group to filter by.\n",
            "type": "string"
          },
          "groups": {
            "items": {
              "$ref": "#/types/harbor:index%2FgetGroupsGroup:getGroupsGroup"
            },
            "type": "array"
          },
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "ldapGroupDn": {
            "description": "The LDAP group DN to filter by.\n",
            "type": "string"
          }
        },
        "required": [
          "groups",
          "id"
        ],
        "type": "object"
      }
    },
    "harbor:index/getProject:getProject": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_project\" \"main\" {\n    name    = \"library\" \n}\n\noutput \"project_id\" {\n    value = data.harbor_project.main.id\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getProject.\n",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the project.\n"
          }
        },
        "type": "object",
        "required": [
          "name"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getProject.\n",
        "properties": {
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "name": {
            "description": "The name of the project.\n",
            "type": "string"
          },
          "projectId": {
            "description": "The id of the project within harbor.\n",
            "type": "integer"
          },
          "public": {
            "description": "If the project has public accessibility.\n",
            "type": "boolean"
          },
          "type": {
            "description": "The type of the project : Project or ProxyCache.\n",
            "type": "string"
          },
          "vulnerabilityScanning": {
            "description": "If the images is scanned for vulnerabilities when push to harbor.\n",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "projectId",
          "public",
          "type",
          "vulnerabilityScanning"
        ],
        "type": "object"
      }
    },
    "harbor:index/getProjectMemberGroups:getProjectMemberGroups": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_project_member_groups\" \"example\" {\n  project_id = \"1\"\n}\n\noutput \"project_member_group_ids\" {\n  value = [data.harbor_project_member_groups.example.project_member_groups.*.id]\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getProjectMemberGroups.\n",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "The id of the project within harbor.\n"
          }
        },
        "type": "object",
        "required": [
          "projectId"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getProjectMemberGroups.\n",
        "properties": {
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "projectId": {
            "description": "The id of the project within harbor.\n",
            "type": "string"
          },
          "projectMemberGroups": {
            "items": {
              "$ref": "#/types/harbor:index%2FgetProjectMemberGroupsProjectMemberGroup:getProjectMemberGroupsProjectMemberGroup"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "projectId",
          "projectMemberGroups"
        ],
        "type": "object"
      }
    },
    "harbor:index/getProjectMemberUsers:getProjectMemberUsers": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_project_member_users\" \"example\" {\n  project_id = \"1\"\n}\n\noutput \"project_member_user_ids\" {\n  value = [data.harbor_project_member_users.example.project_member_users.*.id]\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getProjectMemberUsers.\n",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "The id of the project within harbor.\n"
          }
        },
        "type": "object",
        "required": [
          "projectId"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getProjectMemberUsers.\n",
        "properties": {
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "projectId": {
            "description": "The id of the project within harbor.\n",
            "type": "string"
          },
          "projectMemberUsers": {
            "items": {
              "$ref": "#/types/harbor:index%2FgetProjectMemberUsersProjectMemberUser:getProjectMemberUsersProjectMemberUser"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "projectId",
          "projectMemberUsers"
        ],
        "type": "object"
      }
    },
    "harbor:index/getProjects:getProjects": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_projects\" \"proxycache\" {\n    type = \"ProxyCache\"\n}\n\noutput \"proxy_cache_projects\" {\n    value = data.harbor_projects.proxycache\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getProjects.\n",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the project.\n"
          },
          "public": {
            "type": "boolean",
            "description": "If the project has public accessibility.\n"
          },
          "type": {
            "type": "string",
            "description": "The type of the project : Project or ProxyCache.\n"
          },
          "vulnerabilityScanning": {
            "type": "boolean",
            "description": "If the images will be scanned for vulnerabilities when push to harbor.\n"
          }
        },
        "type": "object"
      },
      "outputs": {
        "description": "A collection of values returned by getProjects.\n",
        "properties": {
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "name": {
            "description": "The name of the project.\n",
            "type": "string"
          },
          "projects": {
            "items": {
              "$ref": "#/types/harbor:index%2FgetProjectsProject:getProjectsProject"
            },
            "type": "array"
          },
          "public": {
            "description": "If the project has public accessibility.\n",
            "type": "boolean"
          },
          "type": {
            "description": "The type of the project : Project or ProxyCache.\n",
            "type": "string"
          },
          "vulnerabilityScanning": {
            "description": "If the images will be scanned for vulnerabilities when push to harbor.\n",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "projects"
        ],
        "type": "object"
      }
    },
    "harbor:index/getRegistry:getRegistry": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_registry\" \"main\" {\n  name          = \"test_docker_harbor\"\n}\n\noutput \"harbor_registry_id\" {\n  value   = data.harbor_registry.main.id\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getRegistry.\n",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the register.\n"
          }
        },
        "type": "object",
        "required": [
          "name"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getRegistry.\n",
        "properties": {
          "description": {
            "description": "The description of the external container register.\n",
            "type": "string"
          },
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "insecure": {
            "description": "If the certificate of the external container register can be verified.\n",
            "type": "boolean"
          },
          "name": {
            "description": "The name of the register.\n",
            "type": "string"
          },
          "registryId": {
            "description": "The id of the register within harbor.\n",
            "type": "integer"
          },
          "status": {
            "description": "The health status of the external container register\n",
            "type": "string"
          },
          "type": {
            "description": "The type of the provider type.\n",
            "type": "string"
          },
          "url": {
            "description": "The url endpoint for the external container register\n",
            "type": "string"
          }
        },
        "required": [
          "description",
          "id",
          "insecure",
          "name",
          "registryId",
          "status",
          "type",
          "url"
        ],
        "type": "object"
      }
    },
    "harbor:index/getRobotAccounts:getRobotAccounts": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_robot_accounts\" \"example\" {\n  name = \"example-robot\"\n}\n\noutput \"robot_account_ids\" {\n  value = [data.harbor_robot_accounts.example.robot_accounts.*.id]\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getRobotAccounts.\n",
        "properties": {
          "level": {
            "type": "string",
            "description": "Level of the robot account, currently either `system` or `project`. Default is `system`.\n"
          },
          "name": {
            "type": "string",
            "description": "The name of the robot account to filter by.\n"
          },
          "projectId": {
            "type": "integer",
            "description": "The id of the project within harbor.\n"
          }
        },
        "type": "object"
      },
      "outputs": {
        "description": "A collection of values returned by getRobotAccounts.\n",
        "properties": {
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "level": {
            "description": "Level of the robot account, currently either `system` or `project`. Default is `system`.\n",
            "type": "string"
          },
          "name": {
            "description": "The name of the robot account to filter by.\n",
            "type": "string"
          },
          "projectId": {
            "description": "The id of the project within harbor.\n",
            "type": "integer"
          },
          "robotAccounts": {
            "items": {
              "$ref": "#/types/harbor:index%2FgetRobotAccountsRobotAccount:getRobotAccountsRobotAccount"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "robotAccounts"
        ],
        "type": "object"
      }
    },
    "harbor:index/getUsers:getUsers": {
      "description": "## Example Usage\n\n```terraform\ndata \"harbor_users\" \"example\" {\n  username = \"example-user\"\n}\n\noutput \"users_ids\" {\n  value = [data.harbor_users.example.users.*.id]\n}\n```\n",
      "inputs": {
        "description": "A collection of arguments for invoking getUsers.\n",
        "properties": {
          "email": {
            "type": "string",
            "description": "The email of the user to filter by.\n"
          },
          "username": {
            "type": "string",
            "description": "The name of the user to filter by.\n"
          }
        },
        "type": "object"
      },
      "outputs": {
        "description": "A collection of values returned by getUsers.\n",
        "properties": {
          "email": {
            "description": "The email of the user to filter by.\n",
            "type": "string"
          },
          "id": {
            "description": "The provider-assigned unique ID for this managed resource.\n",
            "type": "string"
          },
          "username": {
            "description": "The name of the user to filter by.\n",
            "type": "string"
          },
          "users": {
            "items": {
              "$ref": "#/types/harbor:index%2FgetUsersUser:getUsersUser"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "users"
        ],
        "type": "object"
      }
    },
    "pulumi:providers:harbor/terraformConfig": {
      "description": "This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.",
      "inputs": {
        "properties": {
          "__self__": {
            "$ref": "#/resources/pulumi:providers:harbor"
          }
        },
        "type": "object",
        "required": [
          "__self__"
        ]
      },
      "outputs": {
        "properties": {
          "result": {
            "additionalProperties": {
              "$ref": "pulumi.json#/Any"
            },
            "type": "object"
          }
        },
        "required": [
          "result"
        ],
        "type": "object"
      }
    }
  }
}
