├── examples ├── providerconfig │ ├── .gitignore │ ├── secret.yaml.tmpl │ └── providerconfig.yaml ├── install.yaml ├── account │ ├── account.yaml │ ├── member.yaml │ └── apitoken.yaml ├── warp │ ├── devicepolicycertificates.yaml │ ├── splittunnel.yaml │ ├── fallbackdomain.yaml │ ├── devicepostureintegration.yaml │ ├── deviceposturerule.yaml │ └── devicesettingspolicy.yaml ├── emailrouting │ ├── address.yaml │ ├── settings.yaml │ ├── catchall.yaml │ └── rule.yaml ├── access │ ├── servicetoken.yaml │ ├── keysconfiguration.yaml │ ├── rule.yaml │ ├── mutualtlscertificate.yaml │ ├── cacertificate.yaml │ ├── policy.yaml │ ├── identityprovider.yaml │ ├── group.yaml │ ├── bookmark.yaml │ ├── organization.yaml │ └── application.yaml ├── web3 │ └── hostname.yaml ├── pages │ ├── project.yaml │ └── domain.yaml ├── teams │ ├── proxyendpoint.yaml │ ├── location.yaml │ ├── list.yaml │ ├── rule.yaml │ └── account.yaml ├── zone │ ├── logpullretention.yaml │ ├── tieredcache.yaml │ ├── dnssec.yaml │ ├── totaltls.yaml │ ├── urlnormalizationsettings.yaml │ ├── zone.yaml │ ├── settingsoverride.yaml │ ├── zone-enterprise.yaml │ ├── managedheaders.yaml │ ├── useragentblockingrule.yaml │ ├── ratelimit.yaml │ └── healthcheck.yaml ├── originca │ └── certificate.yaml ├── argo │ ├── tunnelroute.yaml │ ├── argo.yaml │ ├── tunnelvirtualnetwork.yaml │ ├── tunnel.yaml │ └── tunnelconfig.yaml ├── worker │ ├── kvnamespace.yaml │ ├── kv.yaml │ ├── crontrigger.yaml │ ├── route.yaml │ └── script.yaml ├── byoip │ └── ipprefix.yaml ├── waf │ ├── rule.yaml │ ├── group.yaml │ ├── override.yaml │ └── wafpackage.yaml ├── notification │ ├── policywebhooks.yaml │ └── policy.yaml ├── custom │ └── pages.yaml ├── logpush │ ├── ownershipchallenge.yaml │ └── job.yaml ├── authenticatedoriginpulls │ └── authenticatedoriginspulls.yaml ├── apishield │ └── apishield.yaml ├── customhostname │ ├── hostname.yaml │ └── fallbackorigin.yaml ├── lists │ ├── iplist.yaml │ └── list.yaml ├── magic │ ├── staticroute.yaml │ ├── gretunnel.yaml │ ├── ipsectunnel.yaml │ └── firewallruleset.yaml ├── filters │ └── filter.yaml ├── storeconfig │ └── vault.yaml ├── page │ └── rule.yaml ├── dlp │ └── profile.yaml ├── spectrum │ └── application.yaml ├── waitingroom │ ├── event.yaml │ ├── room.yaml │ └── rules.yaml ├── certificate │ └── pack.yaml ├── ruleset │ └── ruleset.yaml ├── loadbalancer │ ├── pool.yaml │ ├── monitor.yaml │ └── loadbalancer.yaml ├── dns │ └── route.yaml └── firewall │ └── rule.yaml ├── hack ├── boilerplate.go.txt └── prepare.sh ├── config ├── provider-metadata.yaml ├── originca │ └── config.go ├── page │ └── config.go ├── dlp │ └── config.go ├── web3 │ └── config.go ├── spectrum │ └── config.go ├── filters │ └── config.go ├── byoip │ └── config.go ├── apishield │ └── config.go ├── certificate │ └── config.go ├── dns │ └── config.go ├── firewall │ └── config.go ├── account │ └── config.go ├── pages │ └── config.go ├── lists │ └── config.go ├── custom │ └── config.go ├── notification │ └── config.go ├── customhostname │ └── config.go ├── logpush │ └── config.go ├── authenticatedoriginpulls │ └── config.go ├── waf │ └── config.go ├── waitingroom │ └── config.go ├── teams │ └── config.go ├── emailrouting │ └── config.go ├── magic │ └── config.go ├── ruleset │ └── config.go ├── argo │ └── config.go ├── worker │ └── config.go ├── loadbalancer │ └── config.go └── warp │ └── config.go ├── .gitmodules ├── internal ├── controller │ ├── doc.go │ ├── providerconfig │ │ └── config.go │ ├── worker │ │ └── kv │ │ │ └── zz_controller.go │ ├── argo │ │ └── argo │ │ │ └── zz_controller.go │ ├── lists │ │ └── list │ │ │ └── zz_controller.go │ ├── waf │ │ └── rule │ │ │ └── zz_controller.go │ ├── zone │ │ └── zone │ │ │ └── zz_controller.go │ ├── custom │ │ └── ssl │ │ │ └── zz_controller.go │ ├── logpush │ │ └── job │ │ │ └── zz_controller.go │ └── page │ │ └── rule │ │ └── zz_controller.go └── features │ └── features.go ├── CODE_OF_CONDUCT.md ├── cluster ├── test │ ├── install-zone.sh │ ├── cleanup-children.sh │ └── setup.sh └── images │ └── provider-cloudflare │ ├── terraformrc.hcl │ ├── Makefile │ └── Dockerfile ├── package └── crossplane.yaml ├── .gitignore ├── apis ├── v1alpha1 │ ├── doc.go │ ├── register.go │ └── types.go ├── v1beta1 │ ├── doc.go │ ├── zz_generated.pculist.go │ ├── zz_generated.pc.go │ ├── zz_generated.pcu.go │ └── register.go ├── page │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── dlp │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── dns │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── firewall │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── byoip │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── certificate │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── filters │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── ruleset │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── web3 │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── apishield │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── originca │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── spectrum │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── custom │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── lists │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── pages │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── logpush │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── notification │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── customhostname │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── authenticatedoriginpulls │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── waitingroom │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── account │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.resolvers.go ├── argo │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go ├── waf │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go ├── warp │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go ├── zone │ └── v1alpha1 │ │ └── zz_groupversion_info.go ├── magic │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go ├── teams │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go ├── access │ └── v1alpha1 │ │ └── zz_groupversion_info.go ├── loadbalancer │ └── v1alpha1 │ │ ├── zz_generated.managedlist.go │ │ └── zz_groupversion_info.go ├── worker │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go ├── emailrouting │ └── v1alpha1 │ │ ├── zz_groupversion_info.go │ │ └── zz_generated.managedlist.go └── generate.go ├── .github ├── workflows │ ├── e2e.yaml │ ├── tag.yaml │ ├── commands.yml │ └── backport.yml └── PULL_REQUEST_TEMPLATE.md ├── cmd └── generator │ └── main.go └── OWNERS.md /examples/providerconfig/.gitignore: -------------------------------------------------------------------------------- 1 | secret.yaml 2 | -------------------------------------------------------------------------------- /hack/boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ -------------------------------------------------------------------------------- /config/provider-metadata.yaml: -------------------------------------------------------------------------------- 1 | name: cloudflare/cloudflare 2 | resources: {} 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "build"] 2 | path = build 3 | url = https://github.com/upbound/build 4 | -------------------------------------------------------------------------------- /internal/controller/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 Upbound Inc. 3 | */ 4 | 5 | package controller 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | 3 | Upjet is under [the Apache 2.0 license](LICENSE) with [notice](NOTICE). -------------------------------------------------------------------------------- /cluster/test/install-zone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo "Installing zone" 3 | kubectl apply -f ./examples/zone/zone.yaml 4 | -------------------------------------------------------------------------------- /package/crossplane.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: meta.pkg.crossplane.io/v1alpha1 2 | kind: Provider 3 | metadata: 4 | name: provider-cloudflare 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.cache 2 | /.work 3 | /_output 4 | cover.out 5 | /vendor 6 | /.vendor-new 7 | .DS_Store 8 | 9 | # ignore IDE folders 10 | .vscode/ 11 | .idea/ 12 | -------------------------------------------------------------------------------- /examples/install.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pkg.crossplane.io/v1 2 | kind: Provider 3 | metadata: 4 | name: provider-cloudflare 5 | spec: 6 | package: ghcr.io/cdloh/provider-cloudflare:v0.1.0 7 | -------------------------------------------------------------------------------- /cluster/images/provider-cloudflare/terraformrc.hcl: -------------------------------------------------------------------------------- 1 | provider_installation { 2 | filesystem_mirror { 3 | path = "/terraform/provider-mirror" 4 | include = ["*/*"] 5 | } 6 | direct { 7 | exclude = ["*/*"] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/account/account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: account.cloudflare.upbound.io/v1alpha1 2 | kind: Account 3 | metadata: 4 | name: example-account 5 | spec: 6 | forProvider: 7 | name: Test Account 8 | type: enterprise 9 | enforceTwofactor: true 10 | -------------------------------------------------------------------------------- /examples/warp/devicepolicycertificates.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: warp.cloudflare.upbound.io/v1alpha1 2 | kind: DevicePolicyCertificates 3 | metadata: 4 | name: example 5 | spec: 6 | forProvider: 7 | zoneIdRef: 8 | name: example 9 | enabled: true 10 | -------------------------------------------------------------------------------- /examples/emailrouting/address.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: emailrouting.cloudflare.upbound.io/v1alpha1 3 | kind: Address 4 | metadata: 5 | name: example 6 | spec: 7 | forProvider: 8 | accountId: f037e56e89293a057740de681ac9abbe 9 | email: "user@example.com" 10 | -------------------------------------------------------------------------------- /examples/access/servicetoken.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: ServiceToken 3 | metadata: 4 | name: example-access-service-token 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example 9 | name: CI/CD App 10 | 11 | -------------------------------------------------------------------------------- /examples/account/member.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: account.cloudflare.upbound.io/v1alpha1 2 | kind: Member 3 | metadata: 4 | name: example-member 5 | spec: 6 | forProvider: 7 | emailAddress: test@example.com 8 | roleIds: 9 | - "6ddc5f80969d01105b5a0931e0079365" 10 | -------------------------------------------------------------------------------- /examples/web3/hostname.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: web3.cloudflare.upbound.io/v1alpha1 2 | kind: Hostname 3 | metadata: 4 | name: example 5 | spec: 6 | forProvider: 7 | zoneIdRef: 8 | name: example 9 | name: web3.cloudflare-test.crossplane.io 10 | target: ipfs 11 | -------------------------------------------------------------------------------- /apis/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 Upbound Inc. 3 | */ 4 | 5 | // Package v1alpha1 contains the core resources of the cloudflare jet provider. 6 | // +kubebuilder:object:generate=true 7 | // +groupName=cloudflare.upbound.io 8 | // +versionName=v1alpha1 9 | package v1alpha1 10 | -------------------------------------------------------------------------------- /apis/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Package v1beta1 contains the core resources of the cloudflare upjet provider. 6 | // +kubebuilder:object:generate=true 7 | // +groupName=cloudflare.upbound.io 8 | // +versionName=v1beta1 9 | package v1beta1 10 | -------------------------------------------------------------------------------- /examples/pages/project.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pages.cloudflare.upbound.io/v1alpha1 2 | kind: Project 3 | metadata: 4 | name: example-pages-project 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: this-is-my-project-01 10 | productionBranch: main 11 | -------------------------------------------------------------------------------- /examples/access/keysconfiguration.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: KeysConfiguration 3 | metadata: 4 | name: example-access-keys-configuration 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | keysRotationIntervalDays: 5 10 | -------------------------------------------------------------------------------- /examples/providerconfig/secret.yaml.tmpl: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: example-creds 5 | namespace: crossplane-system 6 | type: Opaque 7 | stringData: 8 | credentials: | 9 | { 10 | "email": "example@email.com", 11 | "api_key": "t0ps3cr3t11" 12 | } 13 | -------------------------------------------------------------------------------- /examples/teams/proxyendpoint.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: teams.cloudflare.upbound.io/v1alpha1 2 | kind: ProxyEndpoint 3 | metadata: 4 | name: example-teams-proxy-endpoint 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: office 10 | ips: 11 | - 192.0.2.0/24 12 | -------------------------------------------------------------------------------- /cluster/test/cleanup-children.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo "Cleanup resources that need a $1 priror to deleting the $1" 3 | 4 | # Cleanup the resources that require a Cloudflare parent resource priror to deleting the parent 5 | ${KUBECTL} delete managed --selector="testing.cloudflare.upbound.io/require-$1=true" --wait 6 | -------------------------------------------------------------------------------- /examples/providerconfig/providerconfig.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cloudflare.upbound.io/v1beta1 2 | kind: ProviderConfig 3 | metadata: 4 | name: default 5 | spec: 6 | credentials: 7 | source: Secret 8 | secretRef: 9 | name: example-creds 10 | namespace: crossplane-system 11 | key: credentials 12 | -------------------------------------------------------------------------------- /examples/zone/logpullretention.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: LogpullRetention 3 | metadata: 4 | name: example 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | enabled: true 12 | -------------------------------------------------------------------------------- /examples/emailrouting/settings.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: emailrouting.cloudflare.upbound.io/v1alpha1 3 | kind: Settings 4 | metadata: 5 | name: example 6 | labels: 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | enabled: true 13 | -------------------------------------------------------------------------------- /examples/originca/certificate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: originca.cloudflare.upbound.io/v1alpha1 2 | kind: Certificate 3 | metadata: 4 | name: example-originca-certificate 5 | spec: 6 | forProvider: 7 | hostnames: 8 | - cloudflare-test.crossplane.io 9 | requestType: origin-rsa 10 | requestedValidity: 7 11 | -------------------------------------------------------------------------------- /examples/zone/tieredcache.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: TieredCache 3 | metadata: 4 | name: example-tired-cache 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | cacheType: smart 12 | -------------------------------------------------------------------------------- /examples/argo/tunnelroute.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argo.cloudflare.upbound.io/v1alpha1 2 | kind: TunnelRoute 3 | metadata: 4 | name: example-argo-tunnel-route 5 | spec: 6 | forProvider: 7 | accountId: d41d8cd98f00b204e9800998ecf8427e 8 | tunnelIdRef: 9 | name: example-argo-tunnel 10 | network: "192.0.2.24/32" 11 | -------------------------------------------------------------------------------- /examples/pages/domain.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pages.cloudflare.upbound.io/v1alpha1 2 | kind: Domain 3 | metadata: 4 | name: example-pages-domain 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | projectNameRef: 10 | name: example-pages-project 11 | domain: pages.crossplane.io 12 | -------------------------------------------------------------------------------- /examples/warp/splittunnel.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: warp.cloudflare.upbound.io/v1alpha1 2 | kind: SplitTunnel 3 | metadata: 4 | name: example 5 | spec: 6 | forProvider: 7 | accountId: 123213213213213gdsafdsa 8 | mode: exclude 9 | tunnels: 10 | - host: "*.example.com" 11 | description: example domain 12 | -------------------------------------------------------------------------------- /examples/zone/dnssec.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: DNSSEC 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | -------------------------------------------------------------------------------- /examples/argo/argo.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argo.cloudflare.upbound.io/v1alpha1 2 | kind: Argo 3 | metadata: 4 | name: example-argo 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | tieredCaching: "on" 12 | smartRouting: "on" 13 | -------------------------------------------------------------------------------- /examples/worker/kvnamespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: worker.cloudflare.upbound.io/v1alpha1 2 | kind: KVNamespace 3 | metadata: 4 | name: example-worker-kv-namespace 5 | annotations: 6 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh kvnamespace 7 | spec: 8 | forProvider: 9 | title: crossplane-kv-namespace 10 | -------------------------------------------------------------------------------- /examples/byoip/ipprefix.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: byoip.cloudflare.upbound.io/v1alpha1 2 | kind: IPPrefix 3 | metadata: 4 | name: example-byo-ip-prefix 5 | spec: 6 | forProvider: 7 | accountId: f037e56e89293a057740de681ac9abbe 8 | prefixId: d41d8cd98f00b204e9800998ecf8427e 9 | description: Example IP Prefix 10 | advertisement: "on" 11 | -------------------------------------------------------------------------------- /examples/argo/tunnelvirtualnetwork.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argo.cloudflare.upbound.io/v1alpha1 2 | kind: TunnelVirtualNetwork 3 | metadata: 4 | name: example-argo-tunnel-route 5 | spec: 6 | forProvider: 7 | accountId: d41d8cd98f00b204e9800998ecf8427e 8 | name: vnet-for-documentation 9 | comment: New tunnel virtual network for documentation 10 | -------------------------------------------------------------------------------- /examples/zone/totaltls.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: TotalTLS 3 | metadata: 4 | name: example-tired-cache 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | enabled: true 12 | certificateAuthority: lets_encrypt 13 | -------------------------------------------------------------------------------- /examples/worker/kv.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: worker.cloudflare.upbound.io/v1alpha1 2 | kind: KV 3 | metadata: 4 | name: example-worker-kv 5 | labels: 6 | testing.cloudflare.upbound.io/require-kvnamespace: "true" 7 | spec: 8 | forProvider: 9 | namespaceIdRef: 10 | name: example-worker-kv-namespace 11 | key: test-key 12 | value: test-value 13 | -------------------------------------------------------------------------------- /examples/waf/rule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waf.cloudflare.upbound.io/v1alpha1 2 | kind: Rule 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | ruleId: "100000" 13 | mode: simulate 14 | -------------------------------------------------------------------------------- /examples/worker/crontrigger.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: worker.cloudflare.upbound.io/v1alpha1 2 | kind: CronTrigger 3 | metadata: 4 | name: example-worker-cron-trigger 5 | spec: 6 | forProvider: 7 | accountId: 00000000dfdafd 8 | schedules: 9 | - "*/5 * * * *" 10 | - "10 7 * * mon-fri" 11 | scriptNameRef: 12 | name: example-worker-script 13 | -------------------------------------------------------------------------------- /.github/workflows/e2e.yaml: -------------------------------------------------------------------------------- 1 | name: End to End Testing 2 | 3 | on: 4 | issue_comment: 5 | types: [created] 6 | 7 | jobs: 8 | e2e: 9 | uses: upbound/uptest/.github/workflows/pr-comment-trigger.yml@main 10 | secrets: 11 | UPTEST_CLOUD_CREDENTIALS: ${{ secrets.UPTEST_CLOUD_CREDENTIALS }} 12 | UPTEST_DATASOURCE: ${{ secrets.UPTEST_DATASOURCE }} 13 | -------------------------------------------------------------------------------- /examples/notification/policywebhooks.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: notification.cloudflare.upbound.io/v1alpha1 2 | kind: PolicyWebhooks 3 | metadata: 4 | name: example-notification-policy-webhooks 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: Webhooks destination 10 | url: "https://example.com" 11 | secret: "my-secret" 12 | -------------------------------------------------------------------------------- /config/originca/config.go: -------------------------------------------------------------------------------- 1 | package originca 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for originca group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_origin_ca_certificate", func(r *config.Resource) { 8 | r.ShortGroup = "OriginCA" 9 | r.Kind = "Certificate" 10 | }) 11 | } 12 | -------------------------------------------------------------------------------- /examples/teams/location.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: teams.cloudflare.upbound.io/v1alpha1 2 | kind: Location 3 | metadata: 4 | name: example-teams-location 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: office 10 | clientDefault: true 11 | networks: 12 | - network: 203.0.113.1/32 13 | - network: 203.0.113.2/32 14 | -------------------------------------------------------------------------------- /examples/access/rule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: Rule 3 | metadata: 4 | name: example-access-rule 5 | spec: 6 | forProvider: 7 | zomeIdRef: 8 | name: example-account 9 | notes: "Requests coming from known Tor exit nodes" 10 | mode: challenge 11 | configuration: 12 | - target: country 13 | value: T1 14 | -------------------------------------------------------------------------------- /examples/custom/pages.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: custom.cloudflare.upbound.io/v1alpha1 2 | kind: Pages 3 | metadata: 4 | name: example 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | type: basic_challenge 12 | url: "https://example.com/index.html" 13 | state: customized 14 | -------------------------------------------------------------------------------- /examples/logpush/ownershipchallenge.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: logpush.cloudflare.upbound.io/v1alpha1 2 | kind: OwnershipChallenge 3 | metadata: 4 | name: example-logpush-job 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | destinationConf: s3://logs-test-bucket?region=us-east-1 12 | -------------------------------------------------------------------------------- /examples/authenticatedoriginpulls/authenticatedoriginspulls.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: authenticatedoriginpulls.cloudflare.upbound.io/v1alpha1 2 | kind: AuthenticatedOriginsPulls 3 | metadata: 4 | name: example-origin-pulls 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | enabled: true 12 | -------------------------------------------------------------------------------- /examples/zone/urlnormalizationsettings.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: URLNormalizationSettings 3 | metadata: 4 | name: example-url-normalization-settings 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | type: cloudflare 12 | scope: incoming 13 | -------------------------------------------------------------------------------- /examples/waf/group.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waf.cloudflare.upbound.io/v1alpha1 2 | kind: Group 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | groupId: 18ae91632f12c93ed523786a605936be 13 | mode: "on" 14 | -------------------------------------------------------------------------------- /examples/apishield/apishield.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apishield.cloudflare.upbound.io/v1alpha1 2 | kind: APIShield 3 | metadata: 4 | name: example-api-shield 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | authIdCharacteristics: 12 | - name: my-example-header 13 | type: header 14 | -------------------------------------------------------------------------------- /examples/zone/zone.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: Zone 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | cloudflare-zone: zone 8 | annotations: 9 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh zone 10 | spec: 11 | forProvider: 12 | zone: cloudflare-test.crossplane.io 13 | -------------------------------------------------------------------------------- /examples/customhostname/hostname.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | apiVersion: customhostname.cloudflare.upbound.io/v1alpha1 4 | kind: Hostname 5 | metadata: 6 | name: example-hostname 7 | labels: 8 | testing.cloudflare.upbound.io/require-zone: "true" 9 | spec: 10 | forProvider: 11 | zoneIdRef: 12 | name: example 13 | hostname: custom-hostname.upbound.io 14 | ssl: 15 | - method: txt 16 | -------------------------------------------------------------------------------- /examples/warp/fallbackdomain.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: warp.cloudflare.upbound.io/v1alpha1 2 | kind: FallbackDomain 3 | metadata: 4 | name: example-fallback-domain 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example 9 | domains: 10 | - suffix: example.com 11 | description: Example domain 12 | dnsServer: 13 | - "192.0.2.0" 14 | - "192.0.2.1" 15 | -------------------------------------------------------------------------------- /examples/access/mutualtlscertificate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: MutualTLSCertificate 3 | metadata: 4 | name: example-access-mutual-tls-certificate 5 | spec: 6 | forProvider: 7 | zomeIdRef: 8 | name: example-account 9 | name: accessCertificate 10 | certificate: LONG_CERTIFICATE_STRING_HERE 11 | associatedHostnames: 12 | - staging.example.com 13 | -------------------------------------------------------------------------------- /config/page/config.go: -------------------------------------------------------------------------------- 1 | package page 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for page group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_page_rule", func(r *config.Resource) { 8 | r.References["zone_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 10 | } 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /examples/teams/list.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: teams.cloudflare.upbound.io/v1alpha1 2 | kind: List 3 | metadata: 4 | name: example-teams-list 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: Corporate devices 10 | type: SERIAL 11 | description: Serial numbers for all corporate devices. 12 | items: 13 | - 8GE8721REF 14 | - 5RE8543EGG 15 | - 1YE2880LNP 16 | -------------------------------------------------------------------------------- /config/dlp/config.go: -------------------------------------------------------------------------------- 1 | package dlp 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for dlp group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_dlp_profile", func(r *config.Resource) { 8 | r.References["account_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 10 | } 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /config/web3/config.go: -------------------------------------------------------------------------------- 1 | package web3 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for web3 group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_web3_hostname", func(r *config.Resource) { 8 | r.References["zone_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 10 | } 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /examples/waf/override.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waf.cloudflare.upbound.io/v1alpha1 2 | kind: Override 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | urls: 13 | - "*.crossplane.io/no-waf-here" 14 | rules: 15 | "100015": disable 16 | -------------------------------------------------------------------------------- /examples/zone/settingsoverride.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: SettingsOverride 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | settings: 13 | - alwaysOnline: "off" 14 | emailObfuscation: "on" 15 | -------------------------------------------------------------------------------- /examples/waf/wafpackage.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waf.cloudflare.upbound.io/v1alpha1 2 | kind: WAFPackage 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | packageId: c504870194831cd12c3fc0284f294abb 13 | sensitivity: medium 14 | actionMode: simulate 15 | -------------------------------------------------------------------------------- /examples/worker/route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: worker.cloudflare.upbound.io/v1alpha1 2 | kind: Route 3 | metadata: 4 | name: example-worker-route 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | testing.cloudflare.upbound.io/require-script: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | pattern: "*/*" 13 | scriptNameRefs: 14 | name: example-worker-script 15 | -------------------------------------------------------------------------------- /config/spectrum/config.go: -------------------------------------------------------------------------------- 1 | package spectrum 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for spectrum group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_spectrum_application", func(r *config.Resource) { 8 | r.References["zone_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 10 | } 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /examples/zone/zone-enterprise.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: Zone 3 | metadata: 4 | name: example 5 | labels: 6 | testing.upbound.io/example-name: example 7 | cloudflare-zone: zone 8 | annotations: 9 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh zone 10 | spec: 11 | forProvider: 12 | zone: cloudflare-test-enterprise.crossplane.io 13 | plan: enterprise 14 | -------------------------------------------------------------------------------- /examples/lists/iplist.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: lists.cloudflare.upbound.io/v1alpha1 2 | kind: IPList 3 | metadata: 4 | name: example-ip-list 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: example_iplist_list 10 | description: example IPs for a IP list 11 | kind: ip 12 | item: 13 | - value: "192.0.2.1" 14 | comment: one 15 | - value: "203.0.113.0/24" 16 | comment: two 17 | -------------------------------------------------------------------------------- /examples/access/cacertificate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: CACertificate 3 | metadata: 4 | name: example-access-ca-certificate 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | testing.cloudflare.upbound.io/require-access-application: "true" 8 | spec: 9 | forProvider: 10 | zoneIdReffdsfdsa: 11 | name: example 12 | applicationIdReffdasfdsa: 13 | name: example-application 14 | -------------------------------------------------------------------------------- /examples/account/apitoken.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: account.cloudflare.upbound.io/v1alpha1 2 | kind: APIToken 3 | metadata: 4 | name: example-api-token 5 | spec: 6 | forProvider: 7 | name: example-api-token 8 | policy: 9 | - permissionGroups: 10 | - 1a71c399035b4950a1bd1466bbe4f420 11 | resources: 12 | "com.cloudflare.api.account.*": "*" 13 | writeConnectionSecretToRef: 14 | name: example-api-token 15 | namespace: default 16 | -------------------------------------------------------------------------------- /examples/magic/staticroute.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: magic.cloudflare.upbound.io/v1alpha1 2 | kind: StaticRoute 3 | metadata: 4 | name: example-static-route 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | description: New route for new prefix 192.0.2.0/24 10 | prefix: "192.0.2.0/24" 11 | nexthop: "10.0.0.0" 12 | priority: 100 13 | weight: 10 14 | coloNames: 15 | - deno01 16 | coloRegions: 17 | - APAC 18 | -------------------------------------------------------------------------------- /config/filters/config.go: -------------------------------------------------------------------------------- 1 | package filters 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for filters group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_filter", func(r *config.Resource) { 8 | r.ShortGroup = "Filters" 9 | r.Kind = "Filter" 10 | r.References["zone_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 12 | } 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /apis/page/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this RuleList. 11 | func (l *RuleList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/dlp/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this ProfileList. 11 | func (l *ProfileList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/dns/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this RecordList. 11 | func (l *RecordList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/firewall/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this RuleList. 11 | func (l *RuleList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /config/byoip/config.go: -------------------------------------------------------------------------------- 1 | package byoip 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for byoip group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_byo_ip_prefix", func(r *config.Resource) { 8 | r.ShortGroup = "BYOIP" 9 | r.Kind = "IPPrefix" 10 | r.References["account_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 12 | } 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /examples/zone/managedheaders.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: ManagedHeaders 3 | metadata: 4 | name: example 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | managedRequestHeaders: 12 | - id: add_true_client_ip_headers 13 | enabled: true 14 | managedResponseHeaders: 15 | - id: remove_x-powered-by_header 16 | enabled: true 17 | -------------------------------------------------------------------------------- /apis/byoip/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this IPPrefixList. 11 | func (l *IPPrefixList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/certificate/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this PackList. 11 | func (l *PackList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/filters/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this FilterList. 11 | func (l *FilterList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/ruleset/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this RulesetList. 11 | func (l *RulesetList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/web3/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this HostnameList. 11 | func (l *HostnameList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /config/apishield/config.go: -------------------------------------------------------------------------------- 1 | package apishield 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for apishield group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_api_shield", func(r *config.Resource) { 8 | r.ShortGroup = "APIShield" 9 | r.Kind = "APIShield" 10 | r.References["zone_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 12 | } 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /examples/access/policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: Policy 3 | metadata: 4 | name: example-access-policy 5 | spec: 6 | forProvider: 7 | zomeIdRef: 8 | name: example-account 9 | applicationIdRef: 10 | name: example-application 11 | name: staging policy 12 | precedence: 1 13 | decision: allow 14 | include: 15 | - email: 16 | - test@example.com 17 | require: 18 | - ip: 19 | - "192.168.0.1" 20 | -------------------------------------------------------------------------------- /examples/zone/useragentblockingrule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: UserAgentBlockingRule 3 | metadata: 4 | name: example-user-agent-blocking-rule 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | mode: js_challenge 12 | paused: false 13 | description: Example description 1 14 | configuration: 15 | - target: ua 16 | value: Chrome 17 | -------------------------------------------------------------------------------- /apis/apishield/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this APIShieldList. 11 | func (l *APIShieldList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /examples/filters/filter.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: filters.cloudflare.upbound.io/v1alpha1 2 | kind: Filter 3 | metadata: 4 | name: example-filter 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | description: Wordpress break-in attempts that are outside of the office 12 | expression: "(http.request.uri.path ~ \".*wp-login.php\" or http.request.uri.path ~ \".*xmlrpc.php\") and ip.src ne 192.0.2.1" 13 | -------------------------------------------------------------------------------- /apis/originca/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this CertificateList. 11 | func (l *CertificateList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /apis/spectrum/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this ApplicationList. 11 | func (l *ApplicationList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /config/certificate/config.go: -------------------------------------------------------------------------------- 1 | package certificate 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for certificate group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_certificate_pack", func(r *config.Resource) { 8 | r.ShortGroup = "Certificate" 9 | r.Kind = "Pack" 10 | r.References["zone_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 12 | } 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /examples/emailrouting/catchall.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: emailrouting.cloudflare.upbound.io/v1alpha1 3 | kind: CatchAll 4 | metadata: 5 | name: example 6 | labels: 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | name: example catch all 13 | enabled: true 14 | matcher: 15 | - type: all 16 | action: 17 | - type: forward 18 | value: 19 | - destinationaddress@example.net 20 | -------------------------------------------------------------------------------- /examples/storeconfig/vault.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cloudflare.upbound.io/v1alpha1 2 | kind: StoreConfig 3 | metadata: 4 | name: vault 5 | spec: 6 | type: Vault 7 | defaultScope: crossplane-system 8 | vault: 9 | server: http://vault.vault-system:8200 10 | mountPath: kv2/ 11 | version: v2 12 | auth: 13 | method: Token 14 | token: 15 | source: Secret 16 | secretRef: 17 | namespace: crossplane-system 18 | name: vault-token 19 | key: token -------------------------------------------------------------------------------- /examples/page/rule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: page.cloudflare.upbound.io/v1alpha1 2 | kind: Rule 3 | metadata: 4 | name: example-page-rule 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | target: "*/page-rule" 12 | priority: 1 13 | actions: 14 | - ssl: flexible 15 | emailObfuscation: "on" 16 | minify: 17 | - html: "off" 18 | css: "on" 19 | js: "on" 20 | -------------------------------------------------------------------------------- /examples/dlp/profile.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: dlp.cloudflare.upbound.io/v1alpha1 2 | kind: Profile 3 | metadata: 4 | name: example-dlp-profile-custom 5 | spec: 6 | forProvider: 7 | accountId: jE2de7nfY5c6WkvqHCXgmybV4xTPhsBz 8 | name: "Example Custom Profile" 9 | type: "custom" 10 | entry: 11 | - name: "Matches visa credit cards" 12 | enabled: false 13 | pattern: 14 | - regex: "4\\d{3}([-\\. ])?\\d{4}([-\\. ])?\\d{4}([-\\. ])?\\d{4}" 15 | validation: luhn 16 | -------------------------------------------------------------------------------- /examples/spectrum/application.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: spectrum.cloudflare.upbound.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: example-spectrum-application 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | protocol: tcp/22 12 | trafficType: direct 13 | dns: 14 | - type: CNAME 15 | name: ssh.cloudflare-test.crossplane.io 16 | originDirect: 17 | - tcp://109.151.40.129:22 18 | -------------------------------------------------------------------------------- /examples/warp/devicepostureintegration.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: warp.cloudflare.upbound.io/v1alpha1 2 | kind: DevicePostureIntegration 3 | metadata: 4 | name: example 5 | spec: 6 | forProvider: 7 | accountId: 12321321321fdafdsa 8 | name: Device posture integration 9 | type: workspace_one 10 | interval: 24h 11 | config: 12 | - apiUrl: "https://example.com/api" 13 | authUrl: "https://example.com/connect/token" 14 | clientId: client-id 15 | clientSecret: client-secret 16 | -------------------------------------------------------------------------------- /examples/access/identityprovider.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: IdentityProvider 3 | metadata: 4 | name: example-access-identity-provider 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | name: Okta 12 | type: okta 13 | config: 14 | - clientId: example 15 | clientSecret: secret! 16 | apiToken: API_TOKEN_HERE 17 | oktaAccount: https://example.com 18 | -------------------------------------------------------------------------------- /apis/v1beta1/zz_generated.pculist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1beta1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this ProviderConfigUsageList. 11 | func (p *ProviderConfigUsageList) GetItems() []resource.ProviderConfigUsage { 12 | items := make([]resource.ProviderConfigUsage, len(p.Items)) 13 | for i := range p.Items { 14 | items[i] = &p.Items[i] 15 | } 16 | return items 17 | } 18 | -------------------------------------------------------------------------------- /examples/access/group.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: Group 3 | metadata: 4 | name: example-access-ca-certificate 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | testing.cloudflare.upbound.io/require-access-application: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | name: staging group 13 | include: 14 | - email: 15 | - test@example.com 16 | require: 17 | - ip: 18 | - "192.168.0.1" 19 | -------------------------------------------------------------------------------- /examples/teams/rule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: teams.cloudflare.upbound.io/v1alpha1 2 | kind: Rule 3 | metadata: 4 | name: example-teams-rule 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: office 10 | description: Example Description 11 | precedence: 1 12 | action: block 13 | filters: 14 | - http 15 | traffic: "http.request.uri == \"https://www.example.com/malicious\"" 16 | ruleSettings: 17 | - blockPageEnabled: true 18 | blockPageReason: access not permitted 19 | -------------------------------------------------------------------------------- /examples/waitingroom/event.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waitingroom.cloudflare.upbound.io/v1alpha1 2 | kind: Event 3 | metadata: 4 | name: example-waiting-room-event 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | testing.cloudflare.upbound.io/require-waiting-room: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | waitingRoomIdRef: 13 | name: example-waiting-room 14 | name: foo 15 | eventStartTime: "2006-01-02T15:04:05Z" 16 | eventEndTime: "2006-01-02T20:04:05Z" 17 | -------------------------------------------------------------------------------- /internal/features/features.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc 3 | */ 4 | 5 | package features 6 | 7 | import "github.com/crossplane/crossplane-runtime/pkg/feature" 8 | 9 | // Feature flags. 10 | const ( 11 | // EnableAlphaExternalSecretStores enables alpha support for 12 | // External Secret Stores. See the below design for more details. 13 | // https://github.com/crossplane/crossplane/blob/390ddd/design/design-doc-external-secret-stores.md 14 | EnableAlphaExternalSecretStores feature.Flag = "EnableAlphaExternalSecretStores" 15 | ) 16 | -------------------------------------------------------------------------------- /examples/emailrouting/rule.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: emailrouting.cloudflare.upbound.io/v1alpha1 3 | kind: Rule 4 | metadata: 5 | name: example 6 | labels: 7 | testing.cloudflare.upbound.io/require-zone: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | name: crossplane rule 13 | enabled: true 14 | matcher: 15 | - type: literal 16 | field: to 17 | value: test@example.com 18 | action: 19 | - type: forward 20 | value: 21 | - destinationaddress@example.net 22 | -------------------------------------------------------------------------------- /examples/logpush/job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: logpush.cloudflare.upbound.io/v1alpha1 2 | kind: Job 3 | metadata: 4 | name: example-logpush-job 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | enabled: true 12 | name: "My-logpush-job" 13 | logpullOptions: fields=RayID,ClientIP,EdgeStartTimestamp×tamps=rfc3339 14 | destinationConf: s3://logs-test-bucket?region=us-east-1 15 | ownershipChallenge: LONGSTRINGHERE 16 | dataset: http_requests 17 | -------------------------------------------------------------------------------- /examples/magic/gretunnel.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: magic.cloudflare.upbound.io/v1alpha1 2 | kind: GRETunnel 3 | metadata: 4 | name: example-gre-tunnel 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: GRE_1 10 | customerGreEndpoint: "203.0.113.1" 11 | cloudflareGreEndpoint: "203.0.113.1" 12 | interfaceAddress: "192.0.2.0/31" 13 | description: "Tunnel for ISP X" 14 | ttl: 64 15 | mtu: 1476 16 | healthCheckEnabled: true 17 | healthCheckTarget: "203.0.113.1" 18 | healthCheckType: reply 19 | -------------------------------------------------------------------------------- /examples/access/bookmark.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: example-access-application 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | annotations: 8 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh access-application 9 | spec: 10 | forProvider: 11 | zoneIdRef: 12 | name: example 13 | name: My Bookmark App 14 | doain: example.com 15 | logoUrl: https://example.com/example.png 16 | appLauncherVisible: true 17 | -------------------------------------------------------------------------------- /examples/waitingroom/room.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waitingroom.cloudflare.upbound.io/v1alpha1 2 | kind: Room 3 | metadata: 4 | name: example-waiting-room 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | annotations: 8 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh waiting-room 9 | spec: 10 | forProvider: 11 | zoneIdRef: 12 | name: example 13 | name: "foo" 14 | host: room.cloudflare-test-enterprise.crossplane.io 15 | path: / 16 | newUsersPerMinute: 200 17 | totalActiveUsers: 200 18 | -------------------------------------------------------------------------------- /config/dns/config.go: -------------------------------------------------------------------------------- 1 | package dns 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for dns group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_record", func(r *config.Resource) { 8 | r.ShortGroup = "dns" 9 | r.References["zone_id"] = config.Reference{ 10 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 11 | } 12 | r.LateInitializer = config.LateInitializer{ 13 | IgnoredFields: []string{ 14 | "data", 15 | "value", 16 | }, 17 | } 18 | }) 19 | } 20 | -------------------------------------------------------------------------------- /examples/magic/ipsectunnel.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: magic.cloudflare.upbound.io/v1alpha1 2 | kind: IPsecTunnel 3 | metadata: 4 | name: example-ipsec-tunnel 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: IPsec_1 10 | customerEndpoint: "203.0.113.1" 11 | cloudflareEndpoint: "203.0.113.1" 12 | interfaceAddress: "192.0.2.0/31" 13 | description: "Tunnel for ISP X" 14 | healthCheckEnabled: true 15 | healthCheckTarget: "203.0.113.1" 16 | healthCheckType: reply 17 | psk: asdf12341234 18 | allowNullCipher: false 19 | -------------------------------------------------------------------------------- /examples/access/organization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: Organization 3 | metadata: 4 | name: example-access-organization 5 | spec: 6 | forProvider: 7 | zomeIdRef: 8 | name: example-account 9 | name: example.cloudflareaccess.com 10 | authDomain: example.cloudflareaccess.com 11 | isUiReadOnly: false 12 | loginDesign: 13 | - backgroundColor: "#ffffff" 14 | textColor: "#000000" 15 | logoPath: "https://example.com/logo.png" 16 | headerText: "My header text" 17 | footerText: "My footer text" 18 | -------------------------------------------------------------------------------- /examples/certificate/pack.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: certificate.cloudflare.upbound.io/v1alpha1 2 | kind: Pack 3 | metadata: 4 | name: example-certificate-pack 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | type: advanced 12 | hosts: 13 | - cloudflare-test.crossplane.io 14 | - sub.cloudflare-test.crossplane.io 15 | validationMethod: http 16 | validityDays: 90 17 | certificateAuthority: lets_encrypt 18 | cloudflareBranding: false 19 | waitForActiveStatus: false 20 | -------------------------------------------------------------------------------- /examples/worker/script.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: worker.cloudflare.upbound.io/v1alpha1 2 | kind: Script 3 | metadata: 4 | name: example-worker-script 5 | annotations: 6 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh script 7 | spec: 8 | forProvider: 9 | name: crossplane-test-script 10 | module: true 11 | content: | 12 | export default { 13 | async fetch(request, env) { 14 | return await handleRequest(request) 15 | } 16 | } 17 | 18 | async function handleRequest(request) { 19 | return new Response("Hello world") 20 | } 21 | -------------------------------------------------------------------------------- /examples/warp/deviceposturerule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: warp.cloudflare.upbound.io/v1alpha1 2 | kind: DevicePostureRule 3 | metadata: 4 | name: example 5 | spec: 6 | forProvider: 7 | accountId: 12321321321fdafdsa 8 | name: Corporate devices posture rule 9 | type: os_version 10 | description: Device posture rule for corporate devices. 11 | schedule: 24h 12 | expiration: 24h 13 | match: 14 | - platform: linux 15 | input: 16 | - id: 213213213rfdsafdsafdsa 17 | version: "1.0.0" 18 | operator: "<" 19 | osDistroName: ubuntu 20 | osDistroRevision: "1.0.0" 21 | -------------------------------------------------------------------------------- /config/firewall/config.go: -------------------------------------------------------------------------------- 1 | package firewall 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for firewall group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_firewall_rule", func(r *config.Resource) { 8 | r.ShortGroup = "Firewall" 9 | r.Kind = "Rule" 10 | r.References["zone_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 12 | } 13 | r.References["filter_id"] = config.Reference{ 14 | Type: "github.com/cdloh/provider-cloudflare/apis/filters/v1alpha1.Filter", 15 | } 16 | }) 17 | } 18 | -------------------------------------------------------------------------------- /examples/magic/firewallruleset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: magic.cloudflare.upbound.io/v1alpha1 2 | kind: FirewallRuleset 3 | metadata: 4 | name: example-magic-firewall-ruleset 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: Magic Transit Ruleset 10 | description: Global mitigations 11 | rules: 12 | - action: allow 13 | expression: "tcp.dstport in { 32768..65535 }" 14 | description: "Allow TCP Ephemeral Ports" 15 | enabled: "true" 16 | - action: block 17 | expression: "ip.len >= 0" 18 | description: "Block all" 19 | enabled: "true" 20 | -------------------------------------------------------------------------------- /cmd/generator/main.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 Upbound Inc. 3 | */ 4 | 5 | package main 6 | 7 | import ( 8 | "fmt" 9 | "os" 10 | "path/filepath" 11 | 12 | "github.com/upbound/upjet/pkg/pipeline" 13 | 14 | "github.com/cdloh/provider-cloudflare/config" 15 | ) 16 | 17 | func main() { 18 | if len(os.Args) < 2 || os.Args[1] == "" { 19 | panic("root directory is required to be given as argument") 20 | } 21 | rootDir := os.Args[1] 22 | absRootDir, err := filepath.Abs(rootDir) 23 | if err != nil { 24 | panic(fmt.Sprintf("cannot calculate the absolute path with %s", rootDir)) 25 | } 26 | pipeline.Run(config.GetProvider(), absRootDir) 27 | } 28 | -------------------------------------------------------------------------------- /examples/argo/tunnel.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argo.cloudflare.upbound.io/v1alpha1 2 | kind: Tunnel 3 | metadata: 4 | name: example-argo-tunnel 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | accountId: d41d8cd98f00b204e9800998ecf8427e 10 | name: example-tunnel 11 | secretSecretRef: 12 | namespace: default 13 | key: secret 14 | name: argo-tunnel-secret 15 | 16 | 17 | --- 18 | 19 | apiVersion: v1 20 | kind: Secret 21 | metadata: 22 | name: argo-tunnel-secret 23 | namespace: default 24 | type: Opaque 25 | stringData: 26 | secret: AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg= 27 | -------------------------------------------------------------------------------- /examples/notification/policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: notification.cloudflare.upbound.io/v1alpha1 2 | kind: Policy 3 | metadata: 4 | name: example-notification-policy 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: Policy for Healthcheck notification 10 | description: "Notification policy to alert on unhealthy Healthcheck status" 11 | enabled: false 12 | alertType: health_check_status_notification 13 | emailIntegration: 14 | - id: devnull@crossplane.io 15 | filters: 16 | - healthCheckId: 17 | - 699d98642c564d2e855e9661899b7252 18 | status: 19 | - Unhealthy 20 | -------------------------------------------------------------------------------- /OWNERS.md: -------------------------------------------------------------------------------- 1 | # OWNERS 2 | 3 | This page lists all maintainers for **this** repository. Each repository in the [Crossplane 4 | organization](https://github.com/crossplane/) will list their repository maintainers in their own 5 | `OWNERS.md` file. 6 | 7 | Please see the Crossplane 8 | [GOVERNANCE.md](https://github.com/crossplane/crossplane/blob/master/GOVERNANCE.md) for governance 9 | guidelines and responsibilities for the steering committee and maintainers. 10 | 11 | ## Maintainers 12 | 13 | * Maintainer 1 ([maintainer1](https://github.com/maintainer1)) 14 | * Maintainer 2 ([maintainer1](https://github.com/maintainer2)) 15 | -------------------------------------------------------------------------------- /.github/workflows/tag.yaml: -------------------------------------------------------------------------------- 1 | name: Tag 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | description: 'Release version (e.g. v0.1.0)' 8 | required: true 9 | message: 10 | description: 'Tag message' 11 | required: true 12 | 13 | jobs: 14 | create-tag: 15 | runs-on: ubuntu-22.04 16 | 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@v2 20 | 21 | - name: Create Tag 22 | uses: negz/create-tag@v1 23 | with: 24 | version: ${{ github.event.inputs.version }} 25 | message: ${{ github.event.inputs.message }} 26 | token: ${{ secrets.GITHUB_TOKEN }} 27 | -------------------------------------------------------------------------------- /config/account/config.go: -------------------------------------------------------------------------------- 1 | package account 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for account group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_account", func(r *config.Resource) { 8 | r.ShortGroup = "account" 9 | 10 | }) 11 | p.AddResourceConfigurator("cloudflare_account_member", func(r *config.Resource) { 12 | r.ShortGroup = "account" 13 | r.References["account_id"] = config.Reference{ 14 | Type: "Account", 15 | } 16 | }) 17 | p.AddResourceConfigurator("cloudflare_api_token", func(r *config.Resource) { 18 | r.ShortGroup = "account" 19 | r.Kind = "APIToken" 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /examples/ruleset/ruleset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: ruleset.cloudflare.upbound.io/v1alpha1 2 | kind: Ruleset 3 | metadata: 4 | name: example-ruleset 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | name: set config rules 12 | description: set config rules for request 13 | kind: zone 14 | phase: http_config_settings 15 | rules: 16 | - action: set_config 17 | actionParameters: 18 | - emailObfuscation: true 19 | bic: true 20 | expression: "(http.request.uri.path matches \"^/api/\")" 21 | description: set config rules for matching request 22 | enabled: true 23 | -------------------------------------------------------------------------------- /examples/warp/devicesettingspolicy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: warp.cloudflare.upbound.io/v1alpha1 2 | kind: DeviceSettingsPolicy 3 | metadata: 4 | name: example 5 | spec: 6 | forProvider: 7 | accountId: f037e56e89293a057740de681ac9abbe 8 | name: Developers WARP Settings Policy 9 | precedence: 10 10 | match: "any(identity.groups.name[*] in {\"Developers\"})" 11 | default: false 12 | enabled: true 13 | allowModeSwitch: true 14 | allowUpdates: true 15 | allowedToLeave: true 16 | autoConnect: 0 17 | captivePortal: 5 18 | disableAutoFallback: true 19 | supportUrl: "https://cloudflare.com" 20 | switchLocked: true 21 | serviceModeV2Mode: warp 22 | serviceModeV2Port: 3000 23 | -------------------------------------------------------------------------------- /apis/custom/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this PagesList. 11 | func (l *PagesList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this SSLList. 20 | func (l *SSLList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /apis/lists/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this IPListList. 11 | func (l *IPListList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this ListList. 20 | func (l *ListList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /apis/pages/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this DomainList. 11 | func (l *DomainList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this ProjectList. 20 | func (l *ProjectList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /apis/logpush/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this JobList. 11 | func (l *JobList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this OwnershipChallengeList. 20 | func (l *OwnershipChallengeList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /apis/notification/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this PolicyList. 11 | func (l *PolicyList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this PolicyWebhooksList. 20 | func (l *PolicyWebhooksList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /config/pages/config.go: -------------------------------------------------------------------------------- 1 | package pages 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for pages group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_pages_domain", func(r *config.Resource) { 8 | r.References["account_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 10 | } 11 | r.References["project_name"] = config.Reference{ 12 | Type: "Project", 13 | } 14 | }) 15 | p.AddResourceConfigurator("cloudflare_pages_project", func(r *config.Resource) { 16 | r.References["account_id"] = config.Reference{ 17 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 18 | } 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /apis/customhostname/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this FallbackOriginList. 11 | func (l *FallbackOriginList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this HostnameList. 20 | func (l *HostnameList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /config/lists/config.go: -------------------------------------------------------------------------------- 1 | package lists 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for lists group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_ip_list", func(r *config.Resource) { 8 | r.ShortGroup = "lists" 9 | r.Kind = "IPList" 10 | r.References["account_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 12 | } 13 | }) 14 | p.AddResourceConfigurator("cloudflare_list", func(r *config.Resource) { 15 | r.ShortGroup = "lists" 16 | r.Kind = "List" 17 | r.References["account_id"] = config.Reference{ 18 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 19 | } 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /examples/loadbalancer/pool.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: loadbalancer.cloudflare.upbound.io/v1alpha1 2 | kind: Pool 3 | metadata: 4 | name: example-pool 5 | spec: 6 | forProvider: 7 | name: "example-pool" 8 | origins: 9 | - name: "example-1" 10 | address: "8.8.8.8" 11 | enabled: false 12 | - name: "example-2" 13 | address: "8.8.4.4" 14 | latitude: 55 15 | longitude: -12 16 | description: "example load balancer pool" 17 | enabled: false 18 | minimumOrigins: 1 19 | notificationEmail: "someone@example.com" 20 | loadShedding: 21 | - defaultPercent: 55 22 | defaultPolicy: "random" 23 | sessionPercent: 12 24 | sessionPolicy: "hash" 25 | originSteering: 26 | - policy: "random" 27 | -------------------------------------------------------------------------------- /examples/customhostname/fallbackorigin.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | apiVersion: dns.cloudflare.upbound.io/v1alpha1 4 | kind: Record 5 | metadata: 6 | name: example-fallback 7 | labels: 8 | testing.cloudflare.upbound.io/require-zone: "true" 9 | spec: 10 | forProvider: 11 | zoneIdRef: 12 | name: example 13 | name: cloudflare-test 14 | value: upbound.io 15 | type: CNAME 16 | proxied: true 17 | 18 | --- 19 | apiVersion: customhostname.cloudflare.upbound.io/v1alpha1 20 | kind: FallbackOrigin 21 | metadata: 22 | name: example-fallback-origin 23 | labels: 24 | testing.cloudflare.upbound.io/require-zone: "true" 25 | spec: 26 | forProvider: 27 | zoneIdRef: 28 | name: example 29 | origin: cloudflare-test.cloudflare-test-enterprise.crossplane.io 30 | -------------------------------------------------------------------------------- /apis/authenticatedoriginpulls/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this AuthenticatedOriginsPullsList. 11 | func (l *AuthenticatedOriginsPullsList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this CertificateList. 20 | func (l *CertificateList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | -------------------------------------------------------------------------------- /examples/waitingroom/rules.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: waitingroom.cloudflare.upbound.io/v1alpha1 2 | kind: Rules 3 | metadata: 4 | name: example-waiting-room-rules 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | testing.cloudflare.upbound.io/require-waiting-room: "true" 8 | spec: 9 | forProvider: 10 | zoneIdRef: 11 | name: example 12 | waitingRoomIdRef: 13 | name: example-waiting-room 14 | rules: 15 | - description: "bypass ip list" 16 | expression: "ip.src in {192.0.2.0 192.0.2.1}" 17 | action: bypass_waiting_room 18 | status: enabled 19 | - description: "bypass query string" 20 | expression: "http.request.uri.query contains \"bypass=true\"" 21 | action: bypass_waiting_room 22 | status: enabled 23 | -------------------------------------------------------------------------------- /apis/v1beta1/zz_generated.pc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1beta1 7 | 8 | import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" 9 | 10 | // GetCondition of this ProviderConfig. 11 | func (p *ProviderConfig) GetCondition(ct xpv1.ConditionType) xpv1.Condition { 12 | return p.Status.GetCondition(ct) 13 | } 14 | 15 | // GetUsers of this ProviderConfig. 16 | func (p *ProviderConfig) GetUsers() int64 { 17 | return p.Status.Users 18 | } 19 | 20 | // SetConditions of this ProviderConfig. 21 | func (p *ProviderConfig) SetConditions(c ...xpv1.Condition) { 22 | p.Status.SetConditions(c...) 23 | } 24 | 25 | // SetUsers of this ProviderConfig. 26 | func (p *ProviderConfig) SetUsers(i int64) { 27 | p.Status.Users = i 28 | } 29 | -------------------------------------------------------------------------------- /examples/access/application.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: access.cloudflare.upbound.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: example-access-application 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | annotations: 8 | uptest.upbound.io/pre-delete-hook: ../../cluster/test/cleanup-children.sh access-application 9 | spec: 10 | forProvider: 11 | zoneIdRef: 12 | name: example 13 | name: staging application 14 | domain: staging.cloudflare-test-enterprise.crossplane.io 15 | type: self_hosted 16 | sessionDuration: 24h 17 | corsHeaders: 18 | - allowedMethods: 19 | - GET 20 | - POST 21 | - OPTIONS 22 | allowedOrigins: 23 | - https://example.com 24 | allowCredentials: true 25 | maxAge: 10 26 | -------------------------------------------------------------------------------- /config/custom/config.go: -------------------------------------------------------------------------------- 1 | package custom 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for custom group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_custom_pages", func(r *config.Resource) { 8 | r.References["account_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 10 | } 11 | r.References["zone_id"] = config.Reference{ 12 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 13 | } 14 | }) 15 | p.AddResourceConfigurator("cloudflare_custom_ssl", func(r *config.Resource) { 16 | r.Kind = "SSL" 17 | r.References["zone_id"] = config.Reference{ 18 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 19 | } 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /config/notification/config.go: -------------------------------------------------------------------------------- 1 | package notification 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for notification group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_notification_policy", func(r *config.Resource) { 8 | r.References["account_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 10 | } 11 | r.References["webhooks_integration.id"] = config.Reference{ 12 | Type: "PolicyWebhooks", 13 | } 14 | }) 15 | p.AddResourceConfigurator("cloudflare_notification_policy_webhooks", func(r *config.Resource) { 16 | r.References["account_id"] = config.Reference{ 17 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 18 | } 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /config/customhostname/config.go: -------------------------------------------------------------------------------- 1 | package customhostname 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for customhostname group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_custom_hostname", func(r *config.Resource) { 8 | r.ShortGroup = "customhostname" 9 | r.Kind = "Hostname" 10 | r.References["zone_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 12 | } 13 | }) 14 | p.AddResourceConfigurator("cloudflare_custom_hostname_fallback_origin", func(r *config.Resource) { 15 | r.ShortGroup = "customhostname" 16 | r.Kind = "FallbackOrigin" 17 | r.References["zone_id"] = config.Reference{ 18 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 19 | } 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /examples/dns/route.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | apiVersion: dns.cloudflare.upbound.io/v1alpha1 4 | kind: Record 5 | metadata: 6 | name: example-foobar 7 | labels: 8 | testing.cloudflare.upbound.io/require-zone: "true" 9 | spec: 10 | forProvider: 11 | zoneIdRef: 12 | name: example 13 | name: crossplane-example 14 | value: 192.168.0.11 15 | type: A 16 | ttl: 3600 17 | 18 | --- 19 | 20 | apiVersion: dns.cloudflare.upbound.io/v1alpha1 21 | kind: Record 22 | metadata: 23 | name: example-sip-tls 24 | labels: 25 | testing.cloudflare.upbound.io/require-zone: "true" 26 | spec: 27 | forProvider: 28 | zoneIdRef: 29 | name: example 30 | name: _sip._tls 31 | type: SRV 32 | data: 33 | - service: _sip 34 | proto: _tls 35 | name: crossplane-srv 36 | priority: 0 37 | weight: 0 38 | port: 443 39 | target: "example.com" 40 | -------------------------------------------------------------------------------- /examples/firewall/rule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: filters.cloudflare.upbound.io/v1alpha1 2 | kind: Filter 3 | metadata: 4 | name: example-firewall-rule-filter 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | description: Wordpress break-in attempts that are outside of the office 12 | expression: "(http.request.uri.path ~ \".*wp-login.php\" or http.request.uri.path ~ \".*xmlrpc.php\") and ip.src ne 192.0.2.1" 13 | 14 | --- 15 | apiVersion: firewall.cloudflare.upbound.io/v1alpha1 16 | kind: Rule 17 | metadata: 18 | name: example-firewall-rule 19 | labels: 20 | testing.cloudflare.upbound.io/require-zone: "true" 21 | spec: 22 | forProvider: 23 | zoneIdRef: 24 | name: example 25 | description: Block wordpress break-in attempts 26 | filterIdRef: 27 | name: example-firewall-rule-filter 28 | action: block 29 | -------------------------------------------------------------------------------- /.github/workflows/commands.yml: -------------------------------------------------------------------------------- 1 | name: Comment Commands 2 | 3 | on: issue_comment 4 | 5 | jobs: 6 | backport: 7 | runs-on: ubuntu-22.04 8 | if: github.event.issue.pull_request && startsWith(github.event.comment.body, '/backport') 9 | steps: 10 | - name: Extract Command 11 | id: command 12 | uses: xt0rted/slash-command-action@v1 13 | with: 14 | repo-token: ${{ secrets.GITHUB_TOKEN }} 15 | command: backport 16 | reaction: "true" 17 | reaction-type: "eyes" 18 | allow-edits: "false" 19 | permission-level: write 20 | 21 | - name: Checkout 22 | uses: actions/checkout@v2 23 | with: 24 | fetch-depth: 0 25 | 26 | - name: Open Backport PR 27 | uses: zeebe-io/backport-action@v0.0.4 28 | with: 29 | github_token: ${{ secrets.GITHUB_TOKEN }} 30 | github_workspace: ${{ github.workspace }} 31 | version: v0.0.4 32 | -------------------------------------------------------------------------------- /examples/loadbalancer/monitor.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | apiVersion: loadbalancer.cloudflare.upbound.io/v1alpha1 4 | kind: Monitor 5 | metadata: 6 | name: example-monitor-http 7 | spec: 8 | forProvider: 9 | type: http 10 | expectedBody: alive 11 | expectedCodes: 2xx 12 | method: GET 13 | timeout: 7 14 | path: /health 15 | interval: 60 16 | retries: 5 17 | description: example http load balancer 18 | header: 19 | - header: Host 20 | values: 21 | - cloudflare-test.crossplane.io 22 | allowInsecure: false 23 | followRedirects: true 24 | 25 | --- 26 | 27 | apiVersion: loadbalancer.cloudflare.upbound.io/v1alpha1 28 | kind: Monitor 29 | metadata: 30 | name: example-monitor-tcp 31 | spec: 32 | forProvider: 33 | type: tcp 34 | method: connection_established 35 | timeout: 7 36 | port: 8080 37 | interval: 60 38 | retries: 5 39 | description: example tcp load balancer 40 | -------------------------------------------------------------------------------- /config/logpush/config.go: -------------------------------------------------------------------------------- 1 | package logpush 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for logpush group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_logpush_job", func(r *config.Resource) { 8 | r.References["account_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 10 | } 11 | r.References["zone_id"] = config.Reference{ 12 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 13 | } 14 | }) 15 | p.AddResourceConfigurator("cloudflare_logpush_ownership_challenge", func(r *config.Resource) { 16 | r.References["account_id"] = config.Reference{ 17 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 18 | } 19 | r.References["zone_id"] = config.Reference{ 20 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 21 | } 22 | }) 23 | } 24 | -------------------------------------------------------------------------------- /cluster/test/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -aeuo pipefail 3 | 4 | echo "Running setup.sh" 5 | echo "Creating cloud credential secret..." 6 | ${KUBECTL} -n upbound-system create secret generic provider-secret --from-literal=credentials="${UPTEST_CLOUD_CREDENTIALS}" --dry-run=client -o yaml | ${KUBECTL} apply -f - 7 | 8 | echo "Waiting until provider is healthy..." 9 | ${KUBECTL} wait provider.pkg --all --for condition=Healthy --timeout 5m 10 | 11 | echo "Waiting for all pods to come online..." 12 | ${KUBECTL} -n upbound-system wait --for=condition=Available deployment --all --timeout=5m 13 | 14 | echo "Creating a default provider config..." 15 | cat < 8 | 9 | ### Description of your changes 10 | 11 | 20 | Fixes # 21 | 22 | I have: 23 | 24 | - [ ] Read and followed Crossplane's [contribution process]. 25 | - [ ] Run `make reviewable test` to ensure this PR is ready for review. 26 | 27 | ### How has this code been tested 28 | 29 | 34 | 35 | [contribution process]: https://git.io/fj2m9 36 | -------------------------------------------------------------------------------- /apis/waf/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this GroupList. 11 | func (l *GroupList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this OverrideList. 20 | func (l *OverrideList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this RuleList. 29 | func (l *RuleList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this WAFPackageList. 38 | func (l *WAFPackageList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | -------------------------------------------------------------------------------- /config/waf/config.go: -------------------------------------------------------------------------------- 1 | package waf 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for waf group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_waf_group", func(r *config.Resource) { 8 | r.ShortGroup = "waf" 9 | r.References["zone_id"] = config.Reference{ 10 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 11 | } 12 | }) 13 | p.AddResourceConfigurator("cloudflare_waf_override", func(r *config.Resource) { 14 | r.ShortGroup = "waf" 15 | r.References["zone_id"] = config.Reference{ 16 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 17 | } 18 | }) 19 | p.AddResourceConfigurator("cloudflare_waf_package", func(r *config.Resource) { 20 | r.ShortGroup = "waf" 21 | r.Kind = "WAFPackage" 22 | r.References["zone_id"] = config.Reference{ 23 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 24 | } 25 | }) 26 | p.AddResourceConfigurator("cloudflare_waf_rule", func(r *config.Resource) { 27 | r.ShortGroup = "waf" 28 | r.References["zone_id"] = config.Reference{ 29 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 30 | } 31 | }) 32 | } 33 | -------------------------------------------------------------------------------- /apis/emailrouting/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this AddressList. 11 | func (l *AddressList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this CatchAllList. 20 | func (l *CatchAllList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this RuleList. 29 | func (l *RuleList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this SettingsList. 38 | func (l *SettingsList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | -------------------------------------------------------------------------------- /apis/magic/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this FirewallRulesetList. 11 | func (l *FirewallRulesetList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this GRETunnelList. 20 | func (l *GRETunnelList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this IPsecTunnelList. 29 | func (l *IPsecTunnelList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this StaticRouteList. 38 | func (l *StaticRouteList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | -------------------------------------------------------------------------------- /apis/account/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 11 | errors "github.com/pkg/errors" 12 | client "sigs.k8s.io/controller-runtime/pkg/client" 13 | ) 14 | 15 | // ResolveReferences of this Member. 16 | func (mg *Member) ResolveReferences(ctx context.Context, c client.Reader) error { 17 | r := reference.NewAPIResolver(c, mg) 18 | 19 | var rsp reference.ResolutionResponse 20 | var err error 21 | 22 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 23 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.AccountID), 24 | Extract: reference.ExternalName(), 25 | Reference: mg.Spec.ForProvider.AccountIDRef, 26 | Selector: mg.Spec.ForProvider.AccountIDSelector, 27 | To: reference.To{ 28 | List: &AccountList{}, 29 | Managed: &Account{}, 30 | }, 31 | }) 32 | if err != nil { 33 | return errors.Wrap(err, "mg.Spec.ForProvider.AccountID") 34 | } 35 | mg.Spec.ForProvider.AccountID = reference.ToPtrValue(rsp.ResolvedValue) 36 | mg.Spec.ForProvider.AccountIDRef = rsp.ResolvedReference 37 | 38 | return nil 39 | } 40 | -------------------------------------------------------------------------------- /config/waitingroom/config.go: -------------------------------------------------------------------------------- 1 | package waitingroom 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | const ( 6 | shortGroupName = "waitingroom" 7 | ) 8 | 9 | // Configure adds configurations for waitingroom group. 10 | func Configure(p *config.Provider) { 11 | p.AddResourceConfigurator("cloudflare_waiting_room", func(r *config.Resource) { 12 | r.ShortGroup = shortGroupName 13 | r.Kind = "Room" 14 | r.References["zone_id"] = config.Reference{ 15 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 16 | } 17 | }) 18 | p.AddResourceConfigurator("cloudflare_waiting_room_event", func(r *config.Resource) { 19 | r.ShortGroup = shortGroupName 20 | r.Kind = "Event" 21 | r.References["zone_id"] = config.Reference{ 22 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 23 | } 24 | r.References["waiting_room_id"] = config.Reference{ 25 | Type: "Room", 26 | } 27 | }) 28 | p.AddResourceConfigurator("cloudflare_waiting_room_rules", func(r *config.Resource) { 29 | r.ShortGroup = shortGroupName 30 | r.Kind = "Rules" 31 | r.References["zone_id"] = config.Reference{ 32 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 33 | } 34 | r.References["waiting_room_id"] = config.Reference{ 35 | Type: "Room", 36 | } 37 | }) 38 | } 39 | -------------------------------------------------------------------------------- /apis/page/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Rule. 17 | func (mg *Rule) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/dns/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Record. 17 | func (mg *Record) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/certificate/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Pack. 17 | func (mg *Pack) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/filters/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Filter. 17 | func (mg *Filter) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/web3/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Hostname. 17 | func (mg *Hostname) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /examples/zone/ratelimit.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: RateLimit 3 | metadata: 4 | name: example 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | threshold: 2000 12 | period: 2 13 | match: 14 | - request: 15 | - urlPattern: "cloudflare-test.crossplane.io/*" 16 | schemes: 17 | - HTTP 18 | - HTTPS 19 | response: 20 | - statuses: 21 | - 200 22 | - 201 23 | - 202 24 | - 301 25 | - 429 26 | originTraffic: false 27 | headers: 28 | - name: Host 29 | op: eq 30 | value: localhost 31 | - name: X-Example 32 | op: ne 33 | value: my-example 34 | action: 35 | - mode: simulate 36 | timeout: 43200 37 | response: 38 | - contentType: text/plain 39 | body: custom response body 40 | correlate: 41 | - by: nat 42 | disabled: false 43 | description: example rate limit for a zone 44 | bypassUrlPatterns: 45 | - cloudflare-test.crossplane.io/bypass1 46 | - cloudflare-test.crossplane.io/bypass2 47 | -------------------------------------------------------------------------------- /apis/apishield/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this APIShield. 17 | func (mg *APIShield) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/spectrum/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Application. 17 | func (mg *Application) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/byoip/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this IPPrefix. 17 | func (mg *IPPrefix) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.AccountID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.AccountIDRef, 27 | Selector: mg.Spec.ForProvider.AccountIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.AccountList{}, 30 | Managed: &v1alpha1.Account{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.AccountID") 35 | } 36 | mg.Spec.ForProvider.AccountID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.AccountIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /apis/dlp/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this Profile. 17 | func (mg *Profile) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.AccountID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.AccountIDRef, 27 | Selector: mg.Spec.ForProvider.AccountIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.AccountList{}, 30 | Managed: &v1alpha1.Account{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.AccountID") 35 | } 36 | mg.Spec.ForProvider.AccountID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.AccountIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /config/teams/config.go: -------------------------------------------------------------------------------- 1 | package teams 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for teams group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_teams_account", func(r *config.Resource) { 8 | r.References["account_id"] = config.Reference{ 9 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 10 | } 11 | }) 12 | p.AddResourceConfigurator("cloudflare_teams_list", func(r *config.Resource) { 13 | r.References["account_id"] = config.Reference{ 14 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 15 | } 16 | }) 17 | p.AddResourceConfigurator("cloudflare_teams_location", func(r *config.Resource) { 18 | r.References["account_id"] = config.Reference{ 19 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 20 | } 21 | }) 22 | p.AddResourceConfigurator("cloudflare_teams_proxy_endpoint", func(r *config.Resource) { 23 | r.References["account_id"] = config.Reference{ 24 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 25 | } 26 | }) 27 | p.AddResourceConfigurator("cloudflare_teams_rule", func(r *config.Resource) { 28 | r.References["account_id"] = config.Reference{ 29 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 30 | } 31 | }) 32 | } 33 | -------------------------------------------------------------------------------- /config/emailrouting/config.go: -------------------------------------------------------------------------------- 1 | package emailrouting 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for emailrouting group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_email_routing_address", func(r *config.Resource) { 8 | r.ShortGroup = "emailrouting" 9 | r.Kind = "Address" 10 | r.References["account_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 12 | } 13 | }) 14 | p.AddResourceConfigurator("cloudflare_email_routing_catch_all", func(r *config.Resource) { 15 | r.ShortGroup = "emailrouting" 16 | r.Kind = "CatchAll" 17 | r.References["zone_id"] = config.Reference{ 18 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 19 | } 20 | }) 21 | p.AddResourceConfigurator("cloudflare_email_routing_rule", func(r *config.Resource) { 22 | r.ShortGroup = "emailrouting" 23 | r.Kind = "Rule" 24 | r.References["zone_id"] = config.Reference{ 25 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 26 | } 27 | }) 28 | p.AddResourceConfigurator("cloudflare_email_routing_settings", func(r *config.Resource) { 29 | r.ShortGroup = "emailrouting" 30 | r.Kind = "Settings" 31 | r.References["zone_id"] = config.Reference{ 32 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 33 | } 34 | }) 35 | } 36 | -------------------------------------------------------------------------------- /examples/lists/list.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: lists.cloudflare.upbound.io/v1alpha1 2 | kind: List 3 | metadata: 4 | name: example-list-ip 5 | spec: 6 | forProvider: 7 | accountIdRef: 8 | name: example-account 9 | name: example_list_ips 10 | description: example IPs for a list 11 | kind: ip 12 | item: 13 | - value: 14 | - ip: "192.0.2.0" 15 | comment: one 16 | - value: 17 | - ip: 192.0.2.1 18 | comment: two 19 | 20 | --- 21 | 22 | apiVersion: lists.cloudflare.upbound.io/v1alpha1 23 | kind: List 24 | metadata: 25 | name: example-list-redirect 26 | spec: 27 | forProvider: 28 | accountIdRef: 29 | name: example-account 30 | name: example_redirect_list 31 | description: example redirects for a list 32 | kind: redirect 33 | item: 34 | - value: 35 | - redirect: 36 | - targetUrl: "https://blog.cloudflare-test.crossplane.io" 37 | sourceUrl: "cloudflare-test.crossplane.io/blog" 38 | comment: one 39 | - value: 40 | - redirect: 41 | - targetUrl: "https://foo.cloudflare-test.crossplane.io" 42 | sourceUrl: "cloudflare-test.crossplane.io/foo" 43 | includeSubdomains: "enabled" 44 | subpathMatching: "enabled" 45 | statusCode: 301 46 | preserveQueryString: enabled 47 | preservePathSuffix: disabled 48 | comment: two 49 | -------------------------------------------------------------------------------- /internal/controller/providerconfig/config.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 Upbound Inc. 3 | */ 4 | 5 | package providerconfig 6 | 7 | import ( 8 | ctrl "sigs.k8s.io/controller-runtime" 9 | "sigs.k8s.io/controller-runtime/pkg/source" 10 | 11 | "github.com/crossplane/crossplane-runtime/pkg/event" 12 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/providerconfig" 13 | "github.com/crossplane/crossplane-runtime/pkg/resource" 14 | "github.com/upbound/upjet/pkg/controller" 15 | 16 | "github.com/cdloh/provider-cloudflare/apis/v1beta1" 17 | ) 18 | 19 | // Setup adds a controller that reconciles ProviderConfigs by accounting for 20 | // their current usage. 21 | func Setup(mgr ctrl.Manager, o controller.Options) error { 22 | name := providerconfig.ControllerName(v1beta1.ProviderConfigGroupKind) 23 | 24 | of := resource.ProviderConfigKinds{ 25 | Config: v1beta1.ProviderConfigGroupVersionKind, 26 | UsageList: v1beta1.ProviderConfigUsageListGroupVersionKind, 27 | } 28 | 29 | return ctrl.NewControllerManagedBy(mgr). 30 | Named(name). 31 | WithOptions(o.ForControllerRuntime()). 32 | For(&v1beta1.ProviderConfig{}). 33 | Watches(&source.Kind{Type: &v1beta1.ProviderConfigUsage{}}, &resource.EnqueueRequestForProviderConfig{}). 34 | Complete(providerconfig.NewReconciler(mgr, of, 35 | providerconfig.WithLogger(o.Logger.WithValues("controller", name)), 36 | providerconfig.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))))) 37 | } 38 | -------------------------------------------------------------------------------- /config/magic/config.go: -------------------------------------------------------------------------------- 1 | package magic 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | const ( 6 | shortGroupName = "Magic" 7 | ) 8 | 9 | // Configure adds configurations for magic group. 10 | func Configure(p *config.Provider) { 11 | p.AddResourceConfigurator("cloudflare_gre_tunnel", func(r *config.Resource) { 12 | r.ShortGroup = shortGroupName 13 | r.Kind = "GRETunnel" 14 | r.References["account_id"] = config.Reference{ 15 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 16 | } 17 | }) 18 | p.AddResourceConfigurator("cloudflare_ipsec_tunnel", func(r *config.Resource) { 19 | r.ShortGroup = shortGroupName 20 | r.Kind = "IPsecTunnel" 21 | r.References["account_id"] = config.Reference{ 22 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 23 | } 24 | }) 25 | p.AddResourceConfigurator("cloudflare_magic_firewall_ruleset", func(r *config.Resource) { 26 | r.ShortGroup = shortGroupName 27 | r.Kind = "FirewallRuleset" 28 | r.References["account_id"] = config.Reference{ 29 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 30 | } 31 | }) 32 | p.AddResourceConfigurator("cloudflare_static_route", func(r *config.Resource) { 33 | r.ShortGroup = shortGroupName 34 | r.Kind = "StaticRoute" 35 | r.References["account_id"] = config.Reference{ 36 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 37 | } 38 | }) 39 | } 40 | -------------------------------------------------------------------------------- /apis/worker/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this CronTriggerList. 11 | func (l *CronTriggerList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this KVList. 20 | func (l *KVList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this KVNamespaceList. 29 | func (l *KVNamespaceList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this RouteList. 38 | func (l *RouteList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | 46 | // GetItems of this ScriptList. 47 | func (l *ScriptList) GetItems() []resource.Managed { 48 | items := make([]resource.Managed, len(l.Items)) 49 | for i := range l.Items { 50 | items[i] = &l.Items[i] 51 | } 52 | return items 53 | } 54 | -------------------------------------------------------------------------------- /apis/teams/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this AccountList. 11 | func (l *AccountList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this ListList. 20 | func (l *ListList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this LocationList. 29 | func (l *LocationList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this ProxyEndpointList. 38 | func (l *ProxyEndpointList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | 46 | // GetItems of this RuleList. 47 | func (l *RuleList) GetItems() []resource.Managed { 48 | items := make([]resource.Managed, len(l.Items)) 49 | for i := range l.Items { 50 | items[i] = &l.Items[i] 51 | } 52 | return items 53 | } 54 | -------------------------------------------------------------------------------- /apis/argo/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this ArgoList. 11 | func (l *ArgoList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this TunnelConfigList. 20 | func (l *TunnelConfigList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this TunnelList. 29 | func (l *TunnelList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this TunnelRouteList. 38 | func (l *TunnelRouteList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | 46 | // GetItems of this TunnelVirtualNetworkList. 47 | func (l *TunnelVirtualNetworkList) GetItems() []resource.Managed { 48 | items := make([]resource.Managed, len(l.Items)) 49 | for i := range l.Items { 50 | items[i] = &l.Items[i] 51 | } 52 | return items 53 | } 54 | -------------------------------------------------------------------------------- /.github/workflows/backport.yml: -------------------------------------------------------------------------------- 1 | name: Backport 2 | 3 | on: 4 | # NOTE(negz): This is a risky target, but we run this action only when and if 5 | # a PR is closed, then filter down to specifically merged PRs. We also don't 6 | # invoke any scripts, etc from within the repo. I believe the fact that we'll 7 | # be able to review PRs before this runs makes this fairly safe. 8 | # https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ 9 | pull_request_target: 10 | types: [closed] 11 | # See also commands.yml for the /backport triggered variant of this workflow. 12 | 13 | jobs: 14 | # NOTE(negz): I tested many backport GitHub actions before landing on this 15 | # one. Many do not support merge commits, or do not support pull requests with 16 | # more than one commit. This one does. It also handily links backport PRs with 17 | # new PRs, and provides commentary and instructions when it can't backport. 18 | # The main gotchas with this action are that it _only_ supports merge commits, 19 | # and that PRs _must_ be labelled before they're merged to trigger a backport. 20 | open-pr: 21 | runs-on: ubuntu-22.04 22 | if: github.event.pull_request.merged 23 | steps: 24 | - name: Checkout 25 | uses: actions/checkout@v3 26 | with: 27 | fetch-depth: 0 28 | 29 | - name: Open Backport PR 30 | uses: zeebe-io/backport-action@v0.0.8 31 | with: 32 | github_token: ${{ secrets.GITHUB_TOKEN }} 33 | github_workspace: ${{ github.workspace }} 34 | version: v0.0.8 35 | -------------------------------------------------------------------------------- /examples/zone/healthcheck.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 2 | kind: Healthcheck 3 | metadata: 4 | name: example-healthcheck-https 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | zoneIdRef: 10 | name: example 11 | name: "http-health-check" 12 | description: "example http health check" 13 | address: "cloudflare-test.crossplane.io" 14 | suspended: false 15 | checkRegions: 16 | - WEU 17 | - EEU 18 | type: "HTTPS" 19 | port: 443 20 | method: "GET" 21 | path: "/health" 22 | expectedBody: "alive" 23 | expectedCodes: 24 | - "2xx" 25 | - "301" 26 | followRedirects: true 27 | allowInsecure: false 28 | header: 29 | - header: "Host" 30 | values: 31 | - "cloudflare-test.crossplane.io" 32 | timeout: 10 33 | retries: 2 34 | interval: 60 35 | consecutiveFails: 3 36 | consecutiveSuccesses: 2 37 | 38 | --- 39 | apiVersion: zone.cloudflare.upbound.io/v1alpha1 40 | kind: Healthcheck 41 | metadata: 42 | name: example-healthcheck-tcp 43 | labels: 44 | testing.cloudflare.upbound.io/require-zone: "true" 45 | spec: 46 | forProvider: 47 | zoneIdRef: 48 | name: example 49 | name: "tcp-health-check" 50 | description: "example tcp health check" 51 | address: "cloudflare-test.crossplane.io" 52 | suspended: false 53 | checkRegions: 54 | - "WEU" 55 | - "EEU" 56 | type: "TCP" 57 | port: 22 58 | method: "connection_established" 59 | timeout: 10 60 | retries: 2 61 | interval: 60 62 | consecutiveFails: 3 63 | consecutiveSuccesses: 2 64 | -------------------------------------------------------------------------------- /config/ruleset/config.go: -------------------------------------------------------------------------------- 1 | package ruleset 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | // Configure adds configurations for ruleset group. 6 | func Configure(p *config.Provider) { 7 | p.AddResourceConfigurator("cloudflare_ruleset", func(r *config.Resource) { 8 | r.ShortGroup = "Ruleset" 9 | r.Kind = "Ruleset" 10 | r.References["account_id"] = config.Reference{ 11 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 12 | } 13 | r.References["zone_id"] = config.Reference{ 14 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 15 | } 16 | config.MoveToStatus(r.TerraformResource, 17 | "rules.action_parameters.overrides.enabled", 18 | "rules.action_parameters.overrides.categories.enabled", 19 | "rules.action_parameters.overrides.rules.enabled", 20 | "rules.logging.enabled", 21 | ) 22 | r.LateInitializer = config.LateInitializer{ 23 | IgnoredFields: []string{ 24 | "account_id", 25 | "zone_id", 26 | "rules.action_parameters.cache_key.cache_by_device_type", 27 | "rules.action_parameters.cache_key.custom_key.user.device_type", 28 | "rules.action_parameters.cache_key.custom_key.query_string.exclude", 29 | "rules.action_parameters.cache_key.custom_key.query_string.include", 30 | "rules.action_parameters.edge_ttl.status_code_ttl.status_code", 31 | "rules.action_parameters.edge_ttl.status_code_ttl.status_code_range", 32 | "rules.action_parameters.from_value.target_url.expression", 33 | "rules.action_parameters.from_value.target_url.value", 34 | "rules.action_parameters.headers.expression", 35 | "rules.action_parameters.headers.value", 36 | }, 37 | } 38 | }) 39 | } 40 | -------------------------------------------------------------------------------- /cluster/images/provider-cloudflare/Makefile: -------------------------------------------------------------------------------- 1 | # ==================================================================================== 2 | # Setup Project 3 | 4 | include ../../../build/makelib/common.mk 5 | 6 | # ==================================================================================== 7 | # Options 8 | 9 | include ../../../build/makelib/imagelight.mk 10 | 11 | # ==================================================================================== 12 | # Targets 13 | 14 | img.build: 15 | @$(INFO) docker build $(IMAGE) 16 | @$(MAKE) BUILD_ARGS="--load" img.build.shared 17 | @$(OK) docker build $(IMAGE) 18 | 19 | img.publish: 20 | @$(INFO) Skipping image publish for $(IMAGE) 21 | @echo Publish is deferred to xpkg machinery 22 | @$(OK) Image publish skipped for $(IMAGE) 23 | 24 | img.build.shared: 25 | @cp Dockerfile $(IMAGE_TEMP_DIR) || $(FAIL) 26 | @cp terraformrc.hcl $(IMAGE_TEMP_DIR) || $(FAIL) 27 | @cp -r $(OUTPUT_DIR)/bin/ $(IMAGE_TEMP_DIR)/bin || $(FAIL) 28 | @docker buildx build $(BUILD_ARGS) \ 29 | --platform $(IMAGE_PLATFORMS) \ 30 | --build-arg TERRAFORM_VERSION=$(TERRAFORM_VERSION) \ 31 | --build-arg TERRAFORM_PROVIDER_SOURCE=$(TERRAFORM_PROVIDER_SOURCE) \ 32 | --build-arg TERRAFORM_PROVIDER_VERSION=$(TERRAFORM_PROVIDER_VERSION) \ 33 | --build-arg TERRAFORM_PROVIDER_DOWNLOAD_NAME=$(TERRAFORM_PROVIDER_DOWNLOAD_NAME) \ 34 | --build-arg TERRAFORM_NATIVE_PROVIDER_BINARY=$(TERRAFORM_NATIVE_PROVIDER_BINARY) \ 35 | -t $(IMAGE) \ 36 | $(IMAGE_TEMP_DIR) || $(FAIL) 37 | 38 | img.promote: 39 | @$(INFO) Skipping image promotion from $(FROM_IMAGE) to $(TO_IMAGE) 40 | @echo Promote is deferred to xpkg machinery 41 | @$(OK) Image promotion skipped for $(FROM_IMAGE) to $(TO_IMAGE) 42 | -------------------------------------------------------------------------------- /apis/generate.go: -------------------------------------------------------------------------------- 1 | //go:build generate 2 | // +build generate 3 | 4 | /* 5 | Copyright 2021 Upbound Inc. 6 | */ 7 | 8 | // NOTE: See the below link for details on what is happening here. 9 | // https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module 10 | 11 | // Remove existing CRDs 12 | //go:generate rm -rf ../package/crds 13 | 14 | // Remove generated files 15 | //go:generate bash -c "find . -iname 'zz_*' ! -iname 'zz_generated.managed*.go' -delete" 16 | //go:generate bash -c "find . -type d -empty -delete" 17 | //go:generate bash -c "find ../internal/controller -iname 'zz_*' -delete" 18 | //go:generate bash -c "find ../internal/controller -type d -empty -delete" 19 | //go:generate rm -rf ../examples-generated 20 | 21 | // Generate documentation from Terraform docs. 22 | //go:generate go run github.com/upbound/upjet/cmd/scraper -n ${TERRAFORM_PROVIDER_SOURCE} -r ../.work/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_DOCS_PATH} -o ../config/provider-metadata.yaml 23 | 24 | // Run Upjet generator 25 | //go:generate go run ../cmd/generator/main.go .. 26 | 27 | // Generate deepcopy methodsets and CRD manifests 28 | //go:generate go run -tags generate sigs.k8s.io/controller-tools/cmd/controller-gen object:headerFile=../hack/boilerplate.go.txt paths=./... crd:allowDangerousTypes=true,crdVersions=v1 output:artifacts:config=../package/crds 29 | 30 | // Generate crossplane-runtime methodsets (resource.Claim, etc) 31 | //go:generate go run -tags generate github.com/crossplane/crossplane-tools/cmd/angryjet generate-methodsets --header-file=../hack/boilerplate.go.txt ./... 32 | 33 | package apis 34 | 35 | import ( 36 | _ "sigs.k8s.io/controller-tools/cmd/controller-gen" //nolint:typecheck 37 | 38 | _ "github.com/crossplane/crossplane-tools/cmd/angryjet" //nolint:typecheck 39 | ) 40 | -------------------------------------------------------------------------------- /apis/warp/v1alpha1/zz_generated.managedlist.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import resource "github.com/crossplane/crossplane-runtime/pkg/resource" 9 | 10 | // GetItems of this DevicePolicyCertificatesList. 11 | func (l *DevicePolicyCertificatesList) GetItems() []resource.Managed { 12 | items := make([]resource.Managed, len(l.Items)) 13 | for i := range l.Items { 14 | items[i] = &l.Items[i] 15 | } 16 | return items 17 | } 18 | 19 | // GetItems of this DevicePostureIntegrationList. 20 | func (l *DevicePostureIntegrationList) GetItems() []resource.Managed { 21 | items := make([]resource.Managed, len(l.Items)) 22 | for i := range l.Items { 23 | items[i] = &l.Items[i] 24 | } 25 | return items 26 | } 27 | 28 | // GetItems of this DevicePostureRuleList. 29 | func (l *DevicePostureRuleList) GetItems() []resource.Managed { 30 | items := make([]resource.Managed, len(l.Items)) 31 | for i := range l.Items { 32 | items[i] = &l.Items[i] 33 | } 34 | return items 35 | } 36 | 37 | // GetItems of this DeviceSettingsPolicyList. 38 | func (l *DeviceSettingsPolicyList) GetItems() []resource.Managed { 39 | items := make([]resource.Managed, len(l.Items)) 40 | for i := range l.Items { 41 | items[i] = &l.Items[i] 42 | } 43 | return items 44 | } 45 | 46 | // GetItems of this FallbackDomainList. 47 | func (l *FallbackDomainList) GetItems() []resource.Managed { 48 | items := make([]resource.Managed, len(l.Items)) 49 | for i := range l.Items { 50 | items[i] = &l.Items[i] 51 | } 52 | return items 53 | } 54 | 55 | // GetItems of this SplitTunnelList. 56 | func (l *SplitTunnelList) GetItems() []resource.Managed { 57 | items := make([]resource.Managed, len(l.Items)) 58 | for i := range l.Items { 59 | items[i] = &l.Items[i] 60 | } 61 | return items 62 | } 63 | -------------------------------------------------------------------------------- /hack/prepare.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euox pipefail 3 | 4 | read -r -p "Lower case provider name (ex. github): " PROVIDER_NAME_LOWER 5 | read -r -p "Normal case provider name (ex. GitHub): " PROVIDER_NAME_NORMAL 6 | read -r -p "Organization (ex. upbound, my-org-name): " ORGANIZATION_NAME 7 | 8 | REPLACE_FILES='./* ./.github :!build/** :!go.* :!hack/prepare.sh' 9 | # shellcheck disable=SC2086 10 | git grep -l 'template' -- ${REPLACE_FILES} | xargs sed -i.bak "s/upjet-provider-template/provider-${PROVIDER_NAME_LOWER}/g" 11 | # shellcheck disable=SC2086 12 | git grep -l 'template' -- ${REPLACE_FILES} | xargs sed -i.bak "s/template/${PROVIDER_NAME_LOWER}/g" 13 | # shellcheck disable=SC2086 14 | git grep -l "upbound/provider-${PROVIDER_NAME_LOWER}" -- ${REPLACE_FILES} | xargs sed -i.bak "s|upbound/provider-${PROVIDER_NAME_LOWER}|${ORGANIZATION_NAME}/provider-${PROVIDER_NAME_LOWER}|g" 15 | # shellcheck disable=SC2086 16 | git grep -l 'Template' -- ${REPLACE_FILES} | xargs sed -i.bak "s/Template/${PROVIDER_NAME_NORMAL}/g" 17 | # We need to be careful while replacing "template" keyword in go.mod as it could tamper 18 | # some imported packages under require section. 19 | sed -i.bak "s|upbound/upjet-provider-template|${ORGANIZATION_NAME}/provider-${PROVIDER_NAME_LOWER}|g" go.mod 20 | sed -i.bak "s|PROJECT_REPO := github.com/upbound/|PROJECT_REPO := github.com/${ORGANIZATION_NAME}/|g" Makefile 21 | 22 | # Clean up the .bak files created by sed 23 | git clean -fd 24 | 25 | git mv "internal/clients/template.go" "internal/clients/${PROVIDER_NAME_LOWER}.go" 26 | git mv "cluster/images/upjet-provider-template" "cluster/images/provider-${PROVIDER_NAME_LOWER}" 27 | 28 | # We need to remove this api folder otherwise first `make generate` fails with 29 | # the following error probably due to some optimizations in go generate with v1.17: 30 | # generate: open /Users/hasanturken/Workspace/crossplane-contrib/upjet-provider-template/apis/null/v1alpha1/zz_generated.deepcopy.go: no such file or directory 31 | rm -rf apis/null -------------------------------------------------------------------------------- /config/argo/config.go: -------------------------------------------------------------------------------- 1 | package argo 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | const ( 6 | shortGroupName = "Argo" 7 | ) 8 | 9 | // Configure adds configurations for argo group. 10 | func Configure(p *config.Provider) { 11 | p.AddResourceConfigurator("cloudflare_argo", func(r *config.Resource) { 12 | r.ShortGroup = shortGroupName 13 | r.Kind = "Argo" 14 | r.References["zone_id"] = config.Reference{ 15 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 16 | } 17 | }) 18 | p.AddResourceConfigurator("cloudflare_argo_tunnel", func(r *config.Resource) { 19 | r.ShortGroup = shortGroupName 20 | r.Kind = "Tunnel" 21 | r.References["account_id"] = config.Reference{ 22 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 23 | } 24 | }) 25 | p.AddResourceConfigurator("cloudflare_tunnel_config", func(r *config.Resource) { 26 | r.ShortGroup = shortGroupName 27 | r.Kind = "TunnelConfig" 28 | r.References["account_id"] = config.Reference{ 29 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 30 | } 31 | r.References["tunnel_id"] = config.Reference{ 32 | Type: "Tunnel", 33 | } 34 | }) 35 | p.AddResourceConfigurator("cloudflare_tunnel_route", func(r *config.Resource) { 36 | r.ShortGroup = shortGroupName 37 | r.Kind = "TunnelRoute" 38 | r.References["account_id"] = config.Reference{ 39 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 40 | } 41 | r.References["tunnel_id"] = config.Reference{ 42 | Type: "Tunnel", 43 | } 44 | r.References["virtual_network_id"] = config.Reference{ 45 | Type: "TunnelVirtualNetwork", 46 | } 47 | }) 48 | p.AddResourceConfigurator("cloudflare_tunnel_virtual_network", func(r *config.Resource) { 49 | r.ShortGroup = shortGroupName 50 | r.Kind = "TunnelVirtualNetwork" 51 | r.References["account_id"] = config.Reference{ 52 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 53 | } 54 | }) 55 | } 56 | -------------------------------------------------------------------------------- /examples/argo/tunnelconfig.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argo.cloudflare.upbound.io/v1alpha1 2 | kind: Tunnel 3 | metadata: 4 | name: example-argo-tunnel-for-config 5 | labels: 6 | testing.cloudflare.upbound.io/require-zone: "true" 7 | spec: 8 | forProvider: 9 | accountId: d41d8cd98f00b204e9800998ecf8427e 10 | name: example-tunnel-for-config 11 | secretSecretRef: 12 | namespace: default 13 | key: secret 14 | name: argo-tunnel-secret-for-config 15 | 16 | 17 | --- 18 | 19 | apiVersion: v1 20 | kind: Secret 21 | metadata: 22 | name: argo-tunnel-secret-for-config 23 | namespace: default 24 | type: Opaque 25 | stringData: 26 | secret: AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg= 27 | 28 | 29 | --- 30 | 31 | apiVersion: argo.cloudflare.upbound.io/v1alpha1 32 | kind: TunnelConfig 33 | metadata: 34 | name: example-argo-tunnel-config 35 | spec: 36 | forProvider: 37 | accountId: d41d8cd98f00b204e9800998ecf8427e 38 | tunnelIdRef: 39 | name: example-argo-tunnel-for-config 40 | config: 41 | - warpRouting: 42 | - enabled: true 43 | originRequest: 44 | - connectTimeout: "1m0s" 45 | tlsTimeout: "1m0s" 46 | tcpKeepAlive: "1m0s" 47 | noHappyEyeballs: false 48 | keepAliveConnections: 1024 49 | keepAliveTimeout: "1m0s" 50 | httpHostHeader: "baz" 51 | originServerName: "foobar" 52 | noTlsVerify: false 53 | disableChunkedEncoding: false 54 | bastionMode: false 55 | proxyAddress: "10.0.0.1" 56 | proxyPort: 8123 57 | proxyType: "socks" 58 | ipRules: 59 | - prefix: "/web" 60 | ports: 61 | - 80 62 | - 443 63 | allow: false 64 | ingressRule: 65 | - hostname: "foo" 66 | path: "/bar" 67 | service: "http://10.0.0.2:8080" 68 | ingressRule: 69 | - service: "https://10.0.0.3:8085" 70 | -------------------------------------------------------------------------------- /apis/firewall/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/filters/v1alpha1" 11 | v1alpha11 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 12 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 13 | errors "github.com/pkg/errors" 14 | client "sigs.k8s.io/controller-runtime/pkg/client" 15 | ) 16 | 17 | // ResolveReferences of this Rule. 18 | func (mg *Rule) ResolveReferences(ctx context.Context, c client.Reader) error { 19 | r := reference.NewAPIResolver(c, mg) 20 | 21 | var rsp reference.ResolutionResponse 22 | var err error 23 | 24 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 25 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.FilterID), 26 | Extract: reference.ExternalName(), 27 | Reference: mg.Spec.ForProvider.FilterIDRef, 28 | Selector: mg.Spec.ForProvider.FilterIDSelector, 29 | To: reference.To{ 30 | List: &v1alpha1.FilterList{}, 31 | Managed: &v1alpha1.Filter{}, 32 | }, 33 | }) 34 | if err != nil { 35 | return errors.Wrap(err, "mg.Spec.ForProvider.FilterID") 36 | } 37 | mg.Spec.ForProvider.FilterID = reference.ToPtrValue(rsp.ResolvedValue) 38 | mg.Spec.ForProvider.FilterIDRef = rsp.ResolvedReference 39 | 40 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 41 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 42 | Extract: reference.ExternalName(), 43 | Reference: mg.Spec.ForProvider.ZoneIDRef, 44 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 45 | To: reference.To{ 46 | List: &v1alpha11.ZoneList{}, 47 | Managed: &v1alpha11.Zone{}, 48 | }, 49 | }) 50 | if err != nil { 51 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 52 | } 53 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 54 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 55 | 56 | return nil 57 | } 58 | -------------------------------------------------------------------------------- /config/worker/config.go: -------------------------------------------------------------------------------- 1 | package worker 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | const ( 6 | shortGroupName = "worker" 7 | ) 8 | 9 | // Configure adds configurations for worker group. 10 | func Configure(p *config.Provider) { 11 | p.AddResourceConfigurator("cloudflare_worker_cron_trigger", func(r *config.Resource) { 12 | r.ShortGroup = shortGroupName 13 | r.References["account_id"] = config.Reference{ 14 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 15 | } 16 | r.References["script_name"] = config.Reference{ 17 | Type: "Script", 18 | } 19 | }) 20 | p.AddResourceConfigurator("cloudflare_worker_route", func(r *config.Resource) { 21 | r.ShortGroup = shortGroupName 22 | r.References["script_name"] = config.Reference{ 23 | Type: "Script", 24 | } 25 | r.References["account_id"] = config.Reference{ 26 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 27 | } 28 | r.References["zone_id"] = config.Reference{ 29 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 30 | } 31 | }) 32 | p.AddResourceConfigurator("cloudflare_worker_script", func(r *config.Resource) { 33 | r.ShortGroup = shortGroupName 34 | r.References["kv_namespace_binding.namespace_id"] = config.Reference{ 35 | Type: "KVNamespace", 36 | } 37 | }) 38 | p.AddResourceConfigurator("cloudflare_workers_kv_namespace", func(r *config.Resource) { 39 | r.ShortGroup = shortGroupName 40 | r.Kind = "KVNamespace" 41 | r.References["account_id"] = config.Reference{ 42 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 43 | } 44 | }) 45 | p.AddResourceConfigurator("cloudflare_workers_kv", func(r *config.Resource) { 46 | r.ShortGroup = shortGroupName 47 | r.Kind = "KV" 48 | r.References["account_id"] = config.Reference{ 49 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 50 | } 51 | r.References["namespace_id"] = config.Reference{ 52 | Type: "KVNamespace", 53 | } 54 | }) 55 | } 56 | -------------------------------------------------------------------------------- /apis/ruleset/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1" 11 | v1alpha11 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 12 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 13 | errors "github.com/pkg/errors" 14 | client "sigs.k8s.io/controller-runtime/pkg/client" 15 | ) 16 | 17 | // ResolveReferences of this Ruleset. 18 | func (mg *Ruleset) ResolveReferences(ctx context.Context, c client.Reader) error { 19 | r := reference.NewAPIResolver(c, mg) 20 | 21 | var rsp reference.ResolutionResponse 22 | var err error 23 | 24 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 25 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.AccountID), 26 | Extract: reference.ExternalName(), 27 | Reference: mg.Spec.ForProvider.AccountIDRef, 28 | Selector: mg.Spec.ForProvider.AccountIDSelector, 29 | To: reference.To{ 30 | List: &v1alpha1.AccountList{}, 31 | Managed: &v1alpha1.Account{}, 32 | }, 33 | }) 34 | if err != nil { 35 | return errors.Wrap(err, "mg.Spec.ForProvider.AccountID") 36 | } 37 | mg.Spec.ForProvider.AccountID = reference.ToPtrValue(rsp.ResolvedValue) 38 | mg.Spec.ForProvider.AccountIDRef = rsp.ResolvedReference 39 | 40 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 41 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 42 | Extract: reference.ExternalName(), 43 | Reference: mg.Spec.ForProvider.ZoneIDRef, 44 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 45 | To: reference.To{ 46 | List: &v1alpha11.ZoneList{}, 47 | Managed: &v1alpha11.Zone{}, 48 | }, 49 | }) 50 | if err != nil { 51 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 52 | } 53 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 54 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 55 | 56 | return nil 57 | } 58 | -------------------------------------------------------------------------------- /config/loadbalancer/config.go: -------------------------------------------------------------------------------- 1 | package loadbalancer 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | const ( 6 | shortGroupName = "loadbalancer" 7 | ) 8 | 9 | // Configure adds configurations for loadbalancer group. 10 | func Configure(p *config.Provider) { 11 | p.AddResourceConfigurator("cloudflare_load_balancer", func(r *config.Resource) { 12 | r.ShortGroup = shortGroupName 13 | r.Kind = "LoadBalancer" 14 | r.References["zone_id"] = config.Reference{ 15 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 16 | } 17 | r.References["default_pool_ids"] = config.Reference{ 18 | Type: "Pool", 19 | } 20 | r.References["fallback_pool_id"] = config.Reference{ 21 | Type: "Pool", 22 | } 23 | r.References["fallback_pool_id"] = config.Reference{ 24 | Type: "Pool", 25 | } 26 | r.References["pop_pools.pool_ids"] = config.Reference{ 27 | Type: "Pool", 28 | } 29 | r.References["country_pools.pool_ids"] = config.Reference{ 30 | Type: "Pool", 31 | } 32 | r.References["region_pools.pool_ids"] = config.Reference{ 33 | Type: "Pool", 34 | } 35 | }) 36 | p.AddResourceConfigurator("cloudflare_load_balancer_monitor", func(r *config.Resource) { 37 | r.ShortGroup = shortGroupName 38 | r.Kind = "Monitor" 39 | r.References["account_id"] = config.Reference{ 40 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 41 | } 42 | r.References["zone_id"] = config.Reference{ 43 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 44 | } 45 | }) 46 | p.AddResourceConfigurator("cloudflare_load_balancer_pool", func(r *config.Resource) { 47 | r.ShortGroup = shortGroupName 48 | r.Kind = "Pool" 49 | r.References["account_id"] = config.Reference{ 50 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 51 | } 52 | r.References["zone_id"] = config.Reference{ 53 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 54 | } 55 | r.References["monitor"] = config.Reference{ 56 | Type: "Monitor", 57 | } 58 | }) 59 | 60 | } 61 | -------------------------------------------------------------------------------- /apis/v1alpha1/types.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 Upbound Inc. 3 | */ 4 | 5 | package v1alpha1 6 | 7 | import ( 8 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 | 10 | xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" 11 | ) 12 | 13 | // A StoreConfigSpec defines the desired state of a ProviderConfig. 14 | type StoreConfigSpec struct { 15 | xpv1.SecretStoreConfig `json:",inline"` 16 | } 17 | 18 | // A StoreConfigStatus represents the status of a StoreConfig. 19 | type StoreConfigStatus struct { 20 | xpv1.ConditionedStatus `json:",inline"` 21 | } 22 | 23 | // +kubebuilder:object:root=true 24 | 25 | // A StoreConfig configures how GCP controller should store connection details. 26 | // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" 27 | // +kubebuilder:printcolumn:name="TYPE",type="string",JSONPath=".spec.type" 28 | // +kubebuilder:printcolumn:name="DEFAULT-SCOPE",type="string",JSONPath=".spec.defaultScope" 29 | // +kubebuilder:resource:scope=Cluster,categories={crossplane,store,gcp} 30 | // +kubebuilder:subresource:status 31 | type StoreConfig struct { 32 | metav1.TypeMeta `json:",inline"` 33 | metav1.ObjectMeta `json:"metadata,omitempty"` 34 | 35 | Spec StoreConfigSpec `json:"spec"` 36 | Status StoreConfigStatus `json:"status,omitempty"` 37 | } 38 | 39 | // +kubebuilder:object:root=true 40 | 41 | // StoreConfigList contains a list of StoreConfig 42 | type StoreConfigList struct { 43 | metav1.TypeMeta `json:",inline"` 44 | metav1.ListMeta `json:"metadata,omitempty"` 45 | Items []StoreConfig `json:"items"` 46 | } 47 | 48 | // Note(turkenh): To be generated with AngryJet 49 | 50 | // GetStoreConfig returns SecretStoreConfig 51 | func (in *StoreConfig) GetStoreConfig() xpv1.SecretStoreConfig { 52 | return in.Spec.SecretStoreConfig 53 | } 54 | 55 | // GetCondition of this StoreConfig. 56 | func (in *StoreConfig) GetCondition(ct xpv1.ConditionType) xpv1.Condition { 57 | return in.Status.GetCondition(ct) 58 | } 59 | 60 | // SetConditions of this StoreConfig. 61 | func (in *StoreConfig) SetConditions(c ...xpv1.Condition) { 62 | in.Status.SetConditions(c...) 63 | } 64 | -------------------------------------------------------------------------------- /apis/v1beta1/register.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | package v1beta1 6 | 7 | import ( 8 | "reflect" 9 | 10 | "k8s.io/apimachinery/pkg/runtime/schema" 11 | "sigs.k8s.io/controller-runtime/pkg/scheme" 12 | ) 13 | 14 | // Package type metadata. 15 | const ( 16 | Group = "cloudflare.upbound.io" 17 | Version = "v1beta1" 18 | ) 19 | 20 | var ( 21 | // SchemeGroupVersion is group version used to register these objects 22 | SchemeGroupVersion = schema.GroupVersion{Group: Group, Version: Version} 23 | 24 | // SchemeBuilder is used to add go types to the GroupVersionKind scheme 25 | SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} 26 | ) 27 | 28 | // ProviderConfig type metadata. 29 | var ( 30 | ProviderConfigKind = reflect.TypeOf(ProviderConfig{}).Name() 31 | ProviderConfigGroupKind = schema.GroupKind{Group: Group, Kind: ProviderConfigKind}.String() 32 | ProviderConfigKindAPIVersion = ProviderConfigKind + "." + SchemeGroupVersion.String() 33 | ProviderConfigGroupVersionKind = SchemeGroupVersion.WithKind(ProviderConfigKind) 34 | ) 35 | 36 | // ProviderConfigUsage type metadata. 37 | var ( 38 | ProviderConfigUsageKind = reflect.TypeOf(ProviderConfigUsage{}).Name() 39 | ProviderConfigUsageGroupKind = schema.GroupKind{Group: Group, Kind: ProviderConfigUsageKind}.String() 40 | ProviderConfigUsageKindAPIVersion = ProviderConfigUsageKind + "." + SchemeGroupVersion.String() 41 | ProviderConfigUsageGroupVersionKind = SchemeGroupVersion.WithKind(ProviderConfigUsageKind) 42 | 43 | ProviderConfigUsageListKind = reflect.TypeOf(ProviderConfigUsageList{}).Name() 44 | ProviderConfigUsageListGroupKind = schema.GroupKind{Group: Group, Kind: ProviderConfigUsageListKind}.String() 45 | ProviderConfigUsageListKindAPIVersion = ProviderConfigUsageListKind + "." + SchemeGroupVersion.String() 46 | ProviderConfigUsageListGroupVersionKind = SchemeGroupVersion.WithKind(ProviderConfigUsageListKind) 47 | ) 48 | 49 | func init() { 50 | SchemeBuilder.Register(&ProviderConfig{}, &ProviderConfigList{}) 51 | SchemeBuilder.Register(&ProviderConfigUsage{}, &ProviderConfigUsageList{}) 52 | } 53 | -------------------------------------------------------------------------------- /cluster/images/provider-cloudflare/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.16.2 2 | RUN apk --no-cache add ca-certificates bash 3 | 4 | ARG TARGETOS 5 | ARG TARGETARCH 6 | 7 | ADD "bin/${TARGETOS}_${TARGETARCH}/provider" /usr/local/bin/provider 8 | 9 | ENV USER_ID=65532 10 | 11 | # Setup Terraform environment 12 | 13 | ## Provider-dependent configuration 14 | ARG TERRAFORM_VERSION 15 | ARG TERRAFORM_PROVIDER_SOURCE 16 | ARG TERRAFORM_PROVIDER_VERSION 17 | ARG TERRAFORM_PROVIDER_DOWNLOAD_NAME 18 | ARG TERRAFORM_NATIVE_PROVIDER_BINARY 19 | ## End of - Provider-dependent configuration 20 | 21 | ENV PLUGIN_DIR /terraform/provider-mirror/registry.terraform.io/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_PROVIDER_VERSION}/${TARGETOS}_${TARGETARCH} 22 | ENV TF_CLI_CONFIG_FILE /terraform/.terraformrc 23 | ENV TF_FORK 0 24 | 25 | RUN mkdir -p ${PLUGIN_DIR} 26 | 27 | ADD https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip /tmp 28 | ADD https://releases.hashicorp.com/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}/${TERRAFORM_PROVIDER_VERSION}/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${TARGETOS}_${TARGETARCH}.zip /tmp 29 | ADD terraformrc.hcl ${TF_CLI_CONFIG_FILE} 30 | 31 | RUN unzip /tmp/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip -d /usr/local/bin \ 32 | && chmod +x /usr/local/bin/terraform \ 33 | && rm /tmp/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip \ 34 | && unzip /tmp/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${TARGETOS}_${TARGETARCH}.zip -d ${PLUGIN_DIR} \ 35 | && chmod +x ${PLUGIN_DIR}/* \ 36 | && rm /tmp/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${TARGETOS}_${TARGETARCH}.zip \ 37 | && chown -R ${USER_ID}:${USER_ID} /terraform 38 | # End of - Setup Terraform environment 39 | 40 | # Provider controller needs these environment variable at runtime 41 | ENV TERRAFORM_VERSION ${TERRAFORM_VERSION} 42 | ENV TERRAFORM_PROVIDER_SOURCE ${TERRAFORM_PROVIDER_SOURCE} 43 | ENV TERRAFORM_PROVIDER_VERSION ${TERRAFORM_PROVIDER_VERSION} 44 | ENV TERRAFORM_NATIVE_PROVIDER_PATH ${PLUGIN_DIR}/${TERRAFORM_NATIVE_PROVIDER_BINARY} 45 | 46 | USER ${USER_ID} 47 | EXPOSE 8080 48 | 49 | ENTRYPOINT ["provider"] 50 | -------------------------------------------------------------------------------- /apis/customhostname/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this FallbackOrigin. 17 | func (mg *FallbackOrigin) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.ZoneIDRef, 27 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.ZoneList{}, 30 | Managed: &v1alpha1.Zone{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 35 | } 36 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | 42 | // ResolveReferences of this Hostname. 43 | func (mg *Hostname) ResolveReferences(ctx context.Context, c client.Reader) error { 44 | r := reference.NewAPIResolver(c, mg) 45 | 46 | var rsp reference.ResolutionResponse 47 | var err error 48 | 49 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 50 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ZoneID), 51 | Extract: reference.ExternalName(), 52 | Reference: mg.Spec.ForProvider.ZoneIDRef, 53 | Selector: mg.Spec.ForProvider.ZoneIDSelector, 54 | To: reference.To{ 55 | List: &v1alpha1.ZoneList{}, 56 | Managed: &v1alpha1.Zone{}, 57 | }, 58 | }) 59 | if err != nil { 60 | return errors.Wrap(err, "mg.Spec.ForProvider.ZoneID") 61 | } 62 | mg.Spec.ForProvider.ZoneID = reference.ToPtrValue(rsp.ResolvedValue) 63 | mg.Spec.ForProvider.ZoneIDRef = rsp.ResolvedReference 64 | 65 | return nil 66 | } 67 | -------------------------------------------------------------------------------- /apis/lists/v1alpha1/zz_generated.resolvers.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | // Code generated by angryjet. DO NOT EDIT. 5 | 6 | package v1alpha1 7 | 8 | import ( 9 | "context" 10 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1" 11 | reference "github.com/crossplane/crossplane-runtime/pkg/reference" 12 | errors "github.com/pkg/errors" 13 | client "sigs.k8s.io/controller-runtime/pkg/client" 14 | ) 15 | 16 | // ResolveReferences of this IPList. 17 | func (mg *IPList) ResolveReferences(ctx context.Context, c client.Reader) error { 18 | r := reference.NewAPIResolver(c, mg) 19 | 20 | var rsp reference.ResolutionResponse 21 | var err error 22 | 23 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 24 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.AccountID), 25 | Extract: reference.ExternalName(), 26 | Reference: mg.Spec.ForProvider.AccountIDRef, 27 | Selector: mg.Spec.ForProvider.AccountIDSelector, 28 | To: reference.To{ 29 | List: &v1alpha1.AccountList{}, 30 | Managed: &v1alpha1.Account{}, 31 | }, 32 | }) 33 | if err != nil { 34 | return errors.Wrap(err, "mg.Spec.ForProvider.AccountID") 35 | } 36 | mg.Spec.ForProvider.AccountID = reference.ToPtrValue(rsp.ResolvedValue) 37 | mg.Spec.ForProvider.AccountIDRef = rsp.ResolvedReference 38 | 39 | return nil 40 | } 41 | 42 | // ResolveReferences of this List. 43 | func (mg *List) ResolveReferences(ctx context.Context, c client.Reader) error { 44 | r := reference.NewAPIResolver(c, mg) 45 | 46 | var rsp reference.ResolutionResponse 47 | var err error 48 | 49 | rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ 50 | CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.AccountID), 51 | Extract: reference.ExternalName(), 52 | Reference: mg.Spec.ForProvider.AccountIDRef, 53 | Selector: mg.Spec.ForProvider.AccountIDSelector, 54 | To: reference.To{ 55 | List: &v1alpha1.AccountList{}, 56 | Managed: &v1alpha1.Account{}, 57 | }, 58 | }) 59 | if err != nil { 60 | return errors.Wrap(err, "mg.Spec.ForProvider.AccountID") 61 | } 62 | mg.Spec.ForProvider.AccountID = reference.ToPtrValue(rsp.ResolvedValue) 63 | mg.Spec.ForProvider.AccountIDRef = rsp.ResolvedReference 64 | 65 | return nil 66 | } 67 | -------------------------------------------------------------------------------- /config/warp/config.go: -------------------------------------------------------------------------------- 1 | package warp 2 | 3 | import "github.com/upbound/upjet/pkg/config" 4 | 5 | const ( 6 | shortGroupName = "WARP" 7 | ) 8 | 9 | // Configure adds configurations for warp group. 10 | func Configure(p *config.Provider) { 11 | p.AddResourceConfigurator("cloudflare_device_policy_certificates", func(r *config.Resource) { 12 | r.ShortGroup = shortGroupName 13 | r.Kind = "DevicePolicyCertificates" 14 | r.References["zone_id"] = config.Reference{ 15 | Type: "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1.Zone", 16 | } 17 | }) 18 | p.AddResourceConfigurator("cloudflare_device_posture_integration", func(r *config.Resource) { 19 | r.ShortGroup = shortGroupName 20 | r.Kind = "DevicePostureIntegration" 21 | r.References["account_id"] = config.Reference{ 22 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 23 | } 24 | }) 25 | p.AddResourceConfigurator("cloudflare_device_posture_rule", func(r *config.Resource) { 26 | r.ShortGroup = shortGroupName 27 | r.Kind = "DevicePostureRule" 28 | r.References["account_id"] = config.Reference{ 29 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 30 | } 31 | }) 32 | p.AddResourceConfigurator("cloudflare_device_settings_policy", func(r *config.Resource) { 33 | r.ShortGroup = shortGroupName 34 | r.Kind = "DeviceSettingsPolicy" 35 | r.References["account_id"] = config.Reference{ 36 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 37 | } 38 | }) 39 | p.AddResourceConfigurator("cloudflare_fallback_domain", func(r *config.Resource) { 40 | r.ShortGroup = shortGroupName 41 | r.Kind = "FallbackDomain" 42 | r.References["policy_id"] = config.Reference{ 43 | Type: "DeviceSettingsPolicy", 44 | } 45 | r.References["account_id"] = config.Reference{ 46 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 47 | } 48 | }) 49 | p.AddResourceConfigurator("cloudflare_split_tunnel", func(r *config.Resource) { 50 | r.ShortGroup = shortGroupName 51 | r.Kind = "SplitTunnel" 52 | r.References["account_id"] = config.Reference{ 53 | Type: "github.com/cdloh/provider-cloudflare/apis/account/v1alpha1.Account", 54 | } 55 | r.References["policy_id"] = config.Reference{ 56 | Type: "DeviceSettingsPolicy", 57 | } 58 | }) 59 | } 60 | -------------------------------------------------------------------------------- /internal/controller/worker/kv/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package kv 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/worker/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles KV managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.KV_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.KV_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_workers_kv"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.KV_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.KV{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/argo/argo/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package argo 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/argo/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles Argo managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.Argo_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.Argo_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_argo"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Argo_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.Argo{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/lists/list/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package list 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/lists/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles List managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.List_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.List_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_list"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.List_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.List{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/waf/rule/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package rule 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/waf/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles Rule managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.Rule_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.Rule_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_waf_rule"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Rule_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.Rule{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/zone/zone/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package zone 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/zone/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles Zone managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.Zone_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.Zone_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_zone"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Zone_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.Zone{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/custom/ssl/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package ssl 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/custom/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles SSL managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.SSL_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.SSL_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_custom_ssl"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSL_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.SSL{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/logpush/job/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package job 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/logpush/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles Job managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.Job_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.Job_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_logpush_job"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Job_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.Job{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | -------------------------------------------------------------------------------- /internal/controller/page/rule/zz_controller.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 Upbound Inc. 3 | */ 4 | 5 | // Code generated by upjet. DO NOT EDIT. 6 | 7 | package rule 8 | 9 | import ( 10 | "time" 11 | 12 | "github.com/crossplane/crossplane-runtime/pkg/connection" 13 | "github.com/crossplane/crossplane-runtime/pkg/event" 14 | "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" 15 | "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" 16 | xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 17 | tjcontroller "github.com/upbound/upjet/pkg/controller" 18 | "github.com/upbound/upjet/pkg/terraform" 19 | ctrl "sigs.k8s.io/controller-runtime" 20 | 21 | v1alpha1 "github.com/cdloh/provider-cloudflare/apis/page/v1alpha1" 22 | ) 23 | 24 | // Setup adds a controller that reconciles Rule managed resources. 25 | func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 26 | name := managed.ControllerName(v1alpha1.Rule_GroupVersionKind.String()) 27 | var initializers managed.InitializerChain 28 | cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} 29 | if o.SecretStoreConfigGVK != nil { 30 | cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) 31 | } 32 | r := managed.NewReconciler(mgr, 33 | xpresource.ManagedKind(v1alpha1.Rule_GroupVersionKind), 34 | managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["cloudflare_page_rule"], 35 | tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Rule_GroupVersionKind))), 36 | )), 37 | managed.WithLogger(o.Logger.WithValues("controller", name)), 38 | managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), 39 | managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), 40 | managed.WithTimeout(3*time.Minute), 41 | managed.WithInitializers(initializers), 42 | managed.WithConnectionPublishers(cps...), 43 | managed.WithPollInterval(o.PollInterval), 44 | ) 45 | 46 | return ctrl.NewControllerManagedBy(mgr). 47 | Named(name). 48 | WithOptions(o.ForControllerRuntime()). 49 | For(&v1alpha1.Rule{}). 50 | Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) 51 | } 52 | --------------------------------------------------------------------------------