pangea-cloudflare 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/.rspec_status +504 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +88 -0
- data/LICENSE +201 -0
- data/Rakefile +8 -0
- data/flake.lock +835 -0
- data/flake.nix +60 -0
- data/gemset.nix +272 -0
- data/lib/pangea/resources/cloudflare.rb +213 -0
- data/lib/pangea/resources/cloudflare_access_rule/resource.rb +71 -0
- data/lib/pangea/resources/cloudflare_access_rule/types.rb +93 -0
- data/lib/pangea/resources/cloudflare_account/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_account/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings_internal_view/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings_internal_view/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_account_member/resource.rb +29 -0
- data/lib/pangea/resources/cloudflare_account_member/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_account_subscription/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_subscription/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_account_token/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_token/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_address_map/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_address_map/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_api_shield/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_shield_discovery_operation/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield_discovery_operation/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation/resource.rb +30 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation_schema_validation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation_schema_validation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema/resource.rb +30 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema_validation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema_validation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_token/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_api_token/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_argo/resource.rb +91 -0
- data/lib/pangea/resources/cloudflare_argo/types.rb +92 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls/resource.rb +29 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_certificate/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_certificate/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_bot_management/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_bot_management/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_byo_ip_prefix/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_byo_ip_prefix/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_calls_sfu_app/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_calls_sfu_app/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_calls_turn_app/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_calls_turn_app/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_certificate_pack/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_certificate_pack/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_cloud_connector_rules/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloud_connector_rules/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_asset/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_asset/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_message/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_message/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_priority/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_priority/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_content_scanning/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_content_scanning/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_content_scanning_expression/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_content_scanning_expression/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_custom_hostname/resource.rb +158 -0
- data/lib/pangea/resources/cloudflare_custom_hostname/types/ssl_types.rb +145 -0
- data/lib/pangea/resources/cloudflare_custom_hostname/types.rb +107 -0
- data/lib/pangea/resources/cloudflare_custom_hostname_fallback_origin/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_custom_hostname_fallback_origin/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_custom_pages/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_custom_pages/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_custom_ssl/resource.rb +36 -0
- data/lib/pangea/resources/cloudflare_custom_ssl/types.rb +16 -0
- data/lib/pangea/resources/cloudflare_d1_database/resource.rb +92 -0
- data/lib/pangea/resources/cloudflare_d1_database/types.rb +110 -0
- data/lib/pangea/resources/cloudflare_dns_firewall/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_dns_firewall/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_acl/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_acl/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_incoming/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_incoming/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_outgoing/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_outgoing/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_peer/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_peer/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_tsig/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_tsig/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_address/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_address/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_catch_all/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_catch_all/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_dns/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_routing_dns/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_email_routing_rule/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_rule/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_security_block_sender/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_security_block_sender/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_email_security_impersonation_registry/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_security_impersonation_registry/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_email_security_trusted_domains/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_security_trusted_domains/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_filter/resource.rb +64 -0
- data/lib/pangea/resources/cloudflare_filter/types.rb +54 -0
- data/lib/pangea/resources/cloudflare_firewall_rule/resource.rb +70 -0
- data/lib/pangea/resources/cloudflare_firewall_rule/types.rb +64 -0
- data/lib/pangea/resources/cloudflare_healthcheck/resource.rb +139 -0
- data/lib/pangea/resources/cloudflare_healthcheck/types.rb +192 -0
- data/lib/pangea/resources/cloudflare_hostname_tls_setting/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_hostname_tls_setting/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/resource.rb +176 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/attributes.rb +125 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/caching.rb +52 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/enums.rb +37 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/mtls.rb +52 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/origin.rb +89 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types.rb +23 -0
- data/lib/pangea/resources/cloudflare_image/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_image/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_image_variant/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_image_variant/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_keyless_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_keyless_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_list/resource.rb +57 -0
- data/lib/pangea/resources/cloudflare_list/types.rb +49 -0
- data/lib/pangea/resources/cloudflare_list_item/resource.rb +130 -0
- data/lib/pangea/resources/cloudflare_list_item/types.rb +183 -0
- data/lib/pangea/resources/cloudflare_load_balancer/resource.rb +97 -0
- data/lib/pangea/resources/cloudflare_load_balancer/types.rb +75 -0
- data/lib/pangea/resources/cloudflare_load_balancer_monitor/resource.rb +78 -0
- data/lib/pangea/resources/cloudflare_load_balancer_monitor/types.rb +62 -0
- data/lib/pangea/resources/cloudflare_load_balancer_pool/resource.rb +78 -0
- data/lib/pangea/resources/cloudflare_load_balancer_pool/types.rb +81 -0
- data/lib/pangea/resources/cloudflare_logpull_retention/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_logpull_retention/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_logpush_job/resource.rb +40 -0
- data/lib/pangea/resources/cloudflare_logpush_job/types.rb +24 -0
- data/lib/pangea/resources/cloudflare_logpush_ownership_challenge/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_logpush_ownership_challenge/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_configuration/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_configuration/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_connector/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_connector/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_acl/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_acl/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_lan/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_lan/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_wan/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_wan/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_wan_gre_tunnel/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_wan_gre_tunnel/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_wan_ipsec_tunnel/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_wan_ipsec_tunnel/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_wan_static_route/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_wan_static_route/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_managed_transforms/resource.rb +36 -0
- data/lib/pangea/resources/cloudflare_managed_transforms/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_mtls_certificate/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_mtls_certificate/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_notification_policy/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_notification_policy/types.rb +18 -0
- data/lib/pangea/resources/cloudflare_notification_policy_webhooks/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_notification_policy_webhooks/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_observatory_scheduled_test/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_observatory_scheduled_test/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_organization/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_organization/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_organization_profile/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_organization_profile/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_origin_ca_certificate/resource.rb +97 -0
- data/lib/pangea/resources/cloudflare_origin_ca_certificate/types.rb +125 -0
- data/lib/pangea/resources/cloudflare_page_rule/resource.rb +78 -0
- data/lib/pangea/resources/cloudflare_page_rule/types.rb +71 -0
- data/lib/pangea/resources/cloudflare_page_shield_policy/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_page_shield_policy/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_pages_domain/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_pages_domain/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_pages_project/resource/deployment_config.rb +80 -0
- data/lib/pangea/resources/cloudflare_pages_project/resource/main.rb +75 -0
- data/lib/pangea/resources/cloudflare_pages_project/resource.rb +19 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/attributes.rb +51 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/bindings.rb +38 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/build_config.rb +55 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/deployment_config.rb +83 -0
- data/lib/pangea/resources/cloudflare_pages_project/types.rb +27 -0
- data/lib/pangea/resources/cloudflare_queue/resource.rb +108 -0
- data/lib/pangea/resources/cloudflare_queue/types.rb +132 -0
- data/lib/pangea/resources/cloudflare_queue_consumer/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_queue_consumer/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_r2_bucket/resource.rb +91 -0
- data/lib/pangea/resources/cloudflare_r2_bucket/types.rb +101 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/resource.rb +130 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/attributes.rb +105 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_allowed.rb +59 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_method.rb +34 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_rule.rb +74 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types.rb +22 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_event_notification/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_event_notification/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lifecycle/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lifecycle/types.rb +26 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lock/resource.rb +29 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lock/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_sippy/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_sippy/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_r2_custom_domain/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_r2_custom_domain/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_r2_managed_domain/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_r2_managed_domain/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_rate_limit/resource.rb +129 -0
- data/lib/pangea/resources/cloudflare_rate_limit/types.rb +143 -0
- data/lib/pangea/resources/cloudflare_record/resource.rb +91 -0
- data/lib/pangea/resources/cloudflare_record/types.rb +114 -0
- data/lib/pangea/resources/cloudflare_regional_hostname/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_regional_hostname/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_regional_tiered_cache/resource.rb +82 -0
- data/lib/pangea/resources/cloudflare_regional_tiered_cache/types.rb +73 -0
- data/lib/pangea/resources/cloudflare_registrar_domain/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_registrar_domain/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_ruleset/resource.rb +113 -0
- data/lib/pangea/resources/cloudflare_ruleset/types/ruleset_rule.rb +84 -0
- data/lib/pangea/resources/cloudflare_ruleset/types.rb +155 -0
- data/lib/pangea/resources/cloudflare_schema_validation_operation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_schema_validation_operation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_schema_validation_schemas/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_schema_validation_schemas/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_schema_validation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_schema_validation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_snippet/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_snippet/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_snippet_rules/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_snippet_rules/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_spectrum_application/resource.rb +122 -0
- data/lib/pangea/resources/cloudflare_spectrum_application/types.rb +147 -0
- data/lib/pangea/resources/cloudflare_static_route/resource.rb +119 -0
- data/lib/pangea/resources/cloudflare_static_route/types.rb +131 -0
- data/lib/pangea/resources/cloudflare_stream/resource.rb +35 -0
- data/lib/pangea/resources/cloudflare_stream/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_stream_audio_track/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_audio_track/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_caption_language/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_caption_language/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_download/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_download/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_key/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_key/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_live_input/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_live_input/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_watermark/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_watermark/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_webhook/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_webhook/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_tiered_cache/resource.rb +83 -0
- data/lib/pangea/resources/cloudflare_tiered_cache/types.rb +74 -0
- data/lib/pangea/resources/cloudflare_total_tls/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_total_tls/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_turnstile_widget/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_turnstile_widget/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_url_normalization_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_url_normalization_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_user/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_user/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_user_agent_blocking_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_user_agent_blocking_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_waiting_room/resource.rb +122 -0
- data/lib/pangea/resources/cloudflare_waiting_room/types.rb +171 -0
- data/lib/pangea/resources/cloudflare_waiting_room_event/resource.rb +118 -0
- data/lib/pangea/resources/cloudflare_waiting_room_event/types.rb +153 -0
- data/lib/pangea/resources/cloudflare_waiting_room_rules/resource.rb +40 -0
- data/lib/pangea/resources/cloudflare_waiting_room_rules/types.rb +32 -0
- data/lib/pangea/resources/cloudflare_waiting_room_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_waiting_room_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_web3_hostname/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_web3_hostname/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_web_analytics_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_web_analytics_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_web_analytics_site/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_web_analytics_site/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_worker/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_worker/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_worker_route/resource.rb +62 -0
- data/lib/pangea/resources/cloudflare_worker_route/types.rb +50 -0
- data/lib/pangea/resources/cloudflare_worker_script/resource.rb +90 -0
- data/lib/pangea/resources/cloudflare_worker_script/types.rb +109 -0
- data/lib/pangea/resources/cloudflare_worker_version/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_worker_version/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_workers_cron_trigger/resource.rb +94 -0
- data/lib/pangea/resources/cloudflare_workers_cron_trigger/types.rb +102 -0
- data/lib/pangea/resources/cloudflare_workers_custom_domain/resource.rb +93 -0
- data/lib/pangea/resources/cloudflare_workers_custom_domain/types.rb +93 -0
- data/lib/pangea/resources/cloudflare_workers_deployment/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_workers_deployment/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_workers_for_platforms_dispatch_namespace/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_workers_for_platforms_dispatch_namespace/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_workers_kv/resource.rb +98 -0
- data/lib/pangea/resources/cloudflare_workers_kv/types.rb +103 -0
- data/lib/pangea/resources/cloudflare_workers_kv_namespace/resource.rb +84 -0
- data/lib/pangea/resources/cloudflare_workers_kv_namespace/types.rb +74 -0
- data/lib/pangea/resources/cloudflare_workers_script_subdomain/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_workers_script_subdomain/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_workflow/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_workflow/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/block_builders.rb +116 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/resource.rb +161 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/attributes.rb +102 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/cors_headers.rb +37 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/destination.rb +37 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/enums.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/footer_link.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/landing_page_design.rb +34 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/saas_app.rb +44 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/scim_config.rb +35 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_custom_page/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_custom_page/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_group/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_group/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_identity_provider/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_identity_provider/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_infrastructure_target/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_infrastructure_target/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_key_configuration/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_key_configuration/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_hostname_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_hostname_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_policy/resource.rb +39 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_policy/types.rb +23 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_service_token/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_service_token/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_short_lived_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_short_lived_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_tag/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_tag/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile_local_domain_fallback/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile_local_domain_fallback/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_certificates/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_certificates/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_local_domain_fallback/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_local_domain_fallback/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_managed_networks/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_managed_networks/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_integration/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_integration/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_rule/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_rule/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dex_test/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dex_test/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_dataset/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_dataset/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_integration_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_integration_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dns_location/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dns_location/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_logging/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_logging/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_policy/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_policy/types.rb +18 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_proxy_endpoint/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_proxy_endpoint/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_list/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_list/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_network_hostname_route/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_network_hostname_route/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_organization/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_organization/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_behavior/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_behavior/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_scoring_integration/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_scoring_integration/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_config/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_config/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_route/resource.rb +30 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_route/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_virtual_network/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_virtual_network/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_warp_connector/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_warp_connector/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zone/resource.rb +71 -0
- data/lib/pangea/resources/cloudflare_zone/types.rb +62 -0
- data/lib/pangea/resources/cloudflare_zone_cache_reserve/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_cache_reserve/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_cache_variants/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_cache_variants/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_dns_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_dns_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_dnssec/resource.rb +96 -0
- data/lib/pangea/resources/cloudflare_zone_dnssec/types.rb +81 -0
- data/lib/pangea/resources/cloudflare_zone_hold/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zone_hold/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zone_lockdown/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_lockdown/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_settings_override/resource.rb +80 -0
- data/lib/pangea/resources/cloudflare_zone_settings_override/types.rb +64 -0
- data/lib/pangea/resources/cloudflare_zone_subscription/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zone_subscription/types.rb +10 -0
- data/lib/pangea/resources/types/cloudflare/core.rb +130 -0
- data/lib/pangea/resources/types/cloudflare/load_balancing.rb +104 -0
- data/lib/pangea/resources/types/cloudflare/security.rb +107 -0
- data/lib/pangea/resources/types/cloudflare/workers.rb +60 -0
- data/lib/pangea-cloudflare/version.rb +5 -0
- data/lib/pangea-cloudflare.rb +215 -0
- data/pangea-cloudflare.gemspec +33 -0
- metadata +586 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
module Pangea
|
|
6
|
+
module Resources
|
|
7
|
+
module CloudflarePagesProject
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
def synthesize_deployment_config(context, config)
|
|
11
|
+
context.instance_eval do
|
|
12
|
+
compatibility_date config.compatibility_date if config.compatibility_date
|
|
13
|
+
compatibility_flags config.compatibility_flags if config.compatibility_flags
|
|
14
|
+
build_image_major_version config.build_image_major_version if config.build_image_major_version
|
|
15
|
+
always_use_latest_compatibility_date config.always_use_latest_compatibility_date if config.always_use_latest_compatibility_date
|
|
16
|
+
fail_open config.fail_open if config.fail_open
|
|
17
|
+
usage_model config.usage_model if config.usage_model
|
|
18
|
+
|
|
19
|
+
config.env_vars&.each do |var_name, var_config|
|
|
20
|
+
env_vars { name var_name; value var_config.value; type var_config.type }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
config.kv_namespaces&.each do |binding_name, binding_config|
|
|
24
|
+
kv_namespaces { name binding_name; namespace_id binding_config[:namespace_id] || binding_config['namespace_id'] }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
config.d1_databases&.each do |binding_name, binding_config|
|
|
28
|
+
d1_databases { name binding_name; id binding_config[:id] || binding_config['id'] }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
config.durable_object_namespaces&.each do |binding_name, binding_config|
|
|
32
|
+
durable_object_namespaces { name binding_name; namespace_id binding_config[:namespace_id] || binding_config['namespace_id'] }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
config.r2_buckets&.each do |binding_name, binding_config|
|
|
36
|
+
r2_buckets { name binding_name; bucket_name binding_config.bucket_name; jurisdiction binding_config.jurisdiction if binding_config.jurisdiction }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
config.services&.each do |binding_name, binding_config|
|
|
40
|
+
services { name binding_name; service binding_config.service; environment binding_config.environment if binding_config.environment; entrypoint binding_config.entrypoint if binding_config.entrypoint }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
config.analytics_engine_datasets&.each do |binding_name, binding_config|
|
|
44
|
+
analytics_engine_datasets { name binding_name; dataset binding_config[:dataset] || binding_config['dataset'] }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
config.queue_producers&.each do |binding_name, binding_config|
|
|
48
|
+
queue_producers { name binding_name; binding_name binding_config[:name] || binding_config['name'] || binding_name }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
config.hyperdrive_bindings&.each do |binding_name, binding_config|
|
|
52
|
+
hyperdrive_bindings { name binding_name; id binding_config[:id] || binding_config['id'] }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
config.vectorize_bindings&.each do |binding_name, binding_config|
|
|
56
|
+
vectorize_bindings { name binding_name; index_name binding_config[:index_name] || binding_config['index_name'] }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
config.ai_bindings&.each do |binding_name, binding_config|
|
|
60
|
+
ai_bindings { name binding_name; project_id binding_config[:project_id] || binding_config['project_id'] if binding_config[:project_id] || binding_config['project_id'] }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
config.browsers&.each { |binding_name, _| browsers { name binding_name } }
|
|
64
|
+
|
|
65
|
+
config.mtls_certificates&.each do |binding_name, binding_config|
|
|
66
|
+
mtls_certificates { name binding_name; certificate_id binding_config[:certificate_id] || binding_config['certificate_id'] }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if config.limits
|
|
70
|
+
limits { cpu_ms config.limits.cpu_ms if config.limits.cpu_ms }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if config.placement
|
|
74
|
+
placement { mode config.placement.mode }
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
require 'pangea/resources/base'
|
|
6
|
+
require 'pangea/resources/reference'
|
|
7
|
+
require 'pangea/resources/cloudflare_pages_project/types'
|
|
8
|
+
|
|
9
|
+
module Pangea
|
|
10
|
+
module Resources
|
|
11
|
+
module CloudflarePagesProject
|
|
12
|
+
# Create a Cloudflare Pages Project
|
|
13
|
+
def cloudflare_pages_project(name, attributes = {})
|
|
14
|
+
project_attrs = Cloudflare::Types::PagesProjectAttributes.new(attributes)
|
|
15
|
+
|
|
16
|
+
resource(:cloudflare_pages_project, name) do
|
|
17
|
+
account_id project_attrs.account_id
|
|
18
|
+
name project_attrs.name
|
|
19
|
+
production_branch project_attrs.production_branch if project_attrs.production_branch
|
|
20
|
+
|
|
21
|
+
if project_attrs.build_config
|
|
22
|
+
build_config do
|
|
23
|
+
build_command project_attrs.build_config.build_command if project_attrs.build_config.build_command
|
|
24
|
+
destination_dir project_attrs.build_config.destination_dir if project_attrs.build_config.destination_dir
|
|
25
|
+
root_dir project_attrs.build_config.root_dir if project_attrs.build_config.root_dir
|
|
26
|
+
build_caching project_attrs.build_config.build_caching if project_attrs.build_config.build_caching
|
|
27
|
+
web_analytics_tag project_attrs.build_config.web_analytics_tag if project_attrs.build_config.web_analytics_tag
|
|
28
|
+
web_analytics_token project_attrs.build_config.web_analytics_token if project_attrs.build_config.web_analytics_token
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
if project_attrs.source
|
|
33
|
+
source do
|
|
34
|
+
type project_attrs.source.type
|
|
35
|
+
config do
|
|
36
|
+
owner project_attrs.source.config.owner
|
|
37
|
+
repo_name project_attrs.source.config.repo_name
|
|
38
|
+
production_branch project_attrs.source.config.production_branch if project_attrs.source.config.production_branch
|
|
39
|
+
production_deployments_enabled project_attrs.source.config.production_deployments_enabled if project_attrs.source.config.production_deployments_enabled
|
|
40
|
+
deployments_enabled project_attrs.source.config.deployments_enabled if project_attrs.source.config.deployments_enabled
|
|
41
|
+
pr_comments_enabled project_attrs.source.config.pr_comments_enabled if project_attrs.source.config.pr_comments_enabled
|
|
42
|
+
preview_deployment_setting project_attrs.source.config.preview_deployment_setting if project_attrs.source.config.preview_deployment_setting
|
|
43
|
+
preview_branch_includes project_attrs.source.config.preview_branch_includes if project_attrs.source.config.preview_branch_includes
|
|
44
|
+
preview_branch_excludes project_attrs.source.config.preview_branch_excludes if project_attrs.source.config.preview_branch_excludes
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
if project_attrs.deployment_configs
|
|
50
|
+
deployment_configs do
|
|
51
|
+
if project_attrs.deployment_configs.production
|
|
52
|
+
production { synthesize_deployment_config(self, project_attrs.deployment_configs.production) }
|
|
53
|
+
end
|
|
54
|
+
if project_attrs.deployment_configs.preview
|
|
55
|
+
preview { synthesize_deployment_config(self, project_attrs.deployment_configs.preview) }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
ResourceReference.new(
|
|
62
|
+
type: 'cloudflare_pages_project',
|
|
63
|
+
name: name,
|
|
64
|
+
resource_attributes: project_attrs.to_h,
|
|
65
|
+
outputs: {
|
|
66
|
+
id: "${cloudflare_pages_project.#{name}.id}",
|
|
67
|
+
subdomain: "${cloudflare_pages_project.#{name}.subdomain}",
|
|
68
|
+
domains: "${cloudflare_pages_project.#{name}.domains}",
|
|
69
|
+
created_on: "${cloudflare_pages_project.#{name}.created_on}"
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
require 'pangea/resource_registry'
|
|
6
|
+
require_relative 'resource/main'
|
|
7
|
+
require_relative 'resource/deployment_config'
|
|
8
|
+
|
|
9
|
+
module Pangea
|
|
10
|
+
module Resources
|
|
11
|
+
# Maintain backward compatibility by extending Cloudflare module
|
|
12
|
+
module Cloudflare
|
|
13
|
+
include CloudflarePagesProject
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Auto-register this module when it's loaded
|
|
19
|
+
Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
require_relative 'build_config'
|
|
6
|
+
require_relative 'deployment_config'
|
|
7
|
+
|
|
8
|
+
module Pangea
|
|
9
|
+
module Resources
|
|
10
|
+
module Cloudflare
|
|
11
|
+
module Types
|
|
12
|
+
# Type-safe attributes for Cloudflare Pages Project
|
|
13
|
+
class PagesProjectAttributes < Dry::Struct
|
|
14
|
+
transform_keys(&:to_sym)
|
|
15
|
+
|
|
16
|
+
attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
|
|
17
|
+
attribute :name, Dry::Types['strict.string'].constrained(min_size: 1)
|
|
18
|
+
attribute :production_branch, Dry::Types['strict.string'].optional.default(nil)
|
|
19
|
+
attribute :build_config, PagesBuildConfig.optional.default(nil)
|
|
20
|
+
attribute :source, PagesSource.optional.default(nil)
|
|
21
|
+
attribute :deployment_configs, PagesDeploymentConfigs.optional.default(nil)
|
|
22
|
+
|
|
23
|
+
# Check if project has source configured
|
|
24
|
+
def has_source?
|
|
25
|
+
!source.nil?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Check if project has build configuration
|
|
29
|
+
def has_build_config?
|
|
30
|
+
!build_config.nil?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Check if project has deployment configs
|
|
34
|
+
def has_deployment_configs?
|
|
35
|
+
!deployment_configs.nil?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Check if GitHub source
|
|
39
|
+
def github_source?
|
|
40
|
+
source&.type == 'github'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Check if GitLab source
|
|
44
|
+
def gitlab_source?
|
|
45
|
+
source&.type == 'gitlab'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
module Pangea
|
|
6
|
+
module Resources
|
|
7
|
+
module Cloudflare
|
|
8
|
+
module Types
|
|
9
|
+
# Service binding for Pages deployment
|
|
10
|
+
class PagesServiceBinding < Dry::Struct
|
|
11
|
+
transform_keys(&:to_sym)
|
|
12
|
+
|
|
13
|
+
attribute :name, Dry::Types['strict.string']
|
|
14
|
+
attribute :service, Dry::Types['strict.string']
|
|
15
|
+
attribute :environment, Dry::Types['strict.string'].optional.default(nil)
|
|
16
|
+
attribute :entrypoint, Dry::Types['strict.string'].optional.default(nil)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# R2 bucket binding
|
|
20
|
+
class PagesR2Binding < Dry::Struct
|
|
21
|
+
transform_keys(&:to_sym)
|
|
22
|
+
|
|
23
|
+
attribute :name, Dry::Types['strict.string']
|
|
24
|
+
attribute :bucket_name, Dry::Types['strict.string']
|
|
25
|
+
attribute :jurisdiction, Dry::Types['strict.string'].optional.default(nil)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Environment variable configuration
|
|
29
|
+
class PagesEnvVar < Dry::Struct
|
|
30
|
+
transform_keys(&:to_sym)
|
|
31
|
+
|
|
32
|
+
attribute :type, Dry::Types['strict.string'].enum('plain_text', 'secret_text')
|
|
33
|
+
attribute :value, Dry::Types['strict.string']
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
module Pangea
|
|
6
|
+
module Resources
|
|
7
|
+
module Cloudflare
|
|
8
|
+
module Types
|
|
9
|
+
# Build configuration for Pages project
|
|
10
|
+
class PagesBuildConfig < Dry::Struct
|
|
11
|
+
transform_keys(&:to_sym)
|
|
12
|
+
|
|
13
|
+
attribute :build_command, Dry::Types['strict.string'].optional.default(nil)
|
|
14
|
+
attribute :destination_dir, Dry::Types['strict.string'].optional.default(nil)
|
|
15
|
+
attribute :root_dir, Dry::Types['strict.string'].optional.default(nil)
|
|
16
|
+
attribute :build_caching, Dry::Types['strict.bool'].optional.default(nil)
|
|
17
|
+
attribute :web_analytics_tag, Dry::Types['strict.string'].optional.default(nil)
|
|
18
|
+
attribute :web_analytics_token, Dry::Types['strict.string'].optional.default(nil)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Source repository configuration
|
|
22
|
+
class PagesSourceConfig < Dry::Struct
|
|
23
|
+
transform_keys(&:to_sym)
|
|
24
|
+
|
|
25
|
+
attribute :owner, Dry::Types['strict.string']
|
|
26
|
+
attribute :repo_name, Dry::Types['strict.string']
|
|
27
|
+
attribute :production_branch, Dry::Types['strict.string'].optional.default(nil)
|
|
28
|
+
attribute :production_deployments_enabled, Dry::Types['strict.bool'].optional.default(nil)
|
|
29
|
+
attribute :deployments_enabled, Dry::Types['strict.bool'].optional.default(nil)
|
|
30
|
+
attribute :pr_comments_enabled, Dry::Types['strict.bool'].optional.default(nil)
|
|
31
|
+
attribute :preview_deployment_setting, Dry::Types['strict.string']
|
|
32
|
+
.enum('none', 'all', 'custom')
|
|
33
|
+
.optional
|
|
34
|
+
.default(nil)
|
|
35
|
+
attribute :preview_branch_includes, Dry::Types['strict.array']
|
|
36
|
+
.of(Dry::Types['strict.string'])
|
|
37
|
+
.optional
|
|
38
|
+
.default(nil)
|
|
39
|
+
attribute :preview_branch_excludes, Dry::Types['strict.array']
|
|
40
|
+
.of(Dry::Types['strict.string'])
|
|
41
|
+
.optional
|
|
42
|
+
.default(nil)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Source repository definition
|
|
46
|
+
class PagesSource < Dry::Struct
|
|
47
|
+
transform_keys(&:to_sym)
|
|
48
|
+
|
|
49
|
+
attribute :type, Dry::Types['strict.string'].enum('github', 'gitlab')
|
|
50
|
+
attribute :config, PagesSourceConfig
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
require_relative 'bindings'
|
|
6
|
+
|
|
7
|
+
module Pangea
|
|
8
|
+
module Resources
|
|
9
|
+
module Cloudflare
|
|
10
|
+
module Types
|
|
11
|
+
# Resource limits for deployment
|
|
12
|
+
class PagesDeploymentLimits < Dry::Struct
|
|
13
|
+
transform_keys(&:to_sym)
|
|
14
|
+
|
|
15
|
+
attribute :cpu_ms, Dry::Types['coercible.integer'].constrained(gteq: 1).optional.default(nil)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Placement configuration
|
|
19
|
+
class PagesDeploymentPlacement < Dry::Struct
|
|
20
|
+
transform_keys(&:to_sym)
|
|
21
|
+
|
|
22
|
+
attribute :mode, Dry::Types['strict.string'].enum('smart')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Deployment configuration (for preview or production)
|
|
26
|
+
class PagesDeploymentConfig < Dry::Struct
|
|
27
|
+
transform_keys(&:to_sym)
|
|
28
|
+
|
|
29
|
+
attribute :compatibility_date, Dry::Types['strict.string']
|
|
30
|
+
.constrained(format: /\A\d{4}-\d{2}-\d{2}\z/)
|
|
31
|
+
.optional
|
|
32
|
+
.default(nil)
|
|
33
|
+
attribute :compatibility_flags, Dry::Types['strict.array']
|
|
34
|
+
.of(Dry::Types['strict.string'])
|
|
35
|
+
.optional
|
|
36
|
+
.default(nil)
|
|
37
|
+
attribute :build_image_major_version, Dry::Types['coercible.integer']
|
|
38
|
+
.constrained(gteq: 1)
|
|
39
|
+
.optional
|
|
40
|
+
.default(nil)
|
|
41
|
+
attribute :always_use_latest_compatibility_date, Dry::Types['strict.bool'].optional.default(nil)
|
|
42
|
+
attribute :fail_open, Dry::Types['strict.bool'].optional.default(nil)
|
|
43
|
+
attribute :usage_model, Dry::Types['strict.string']
|
|
44
|
+
.enum('standard', 'bundled', 'unbound')
|
|
45
|
+
.optional
|
|
46
|
+
.default(nil)
|
|
47
|
+
attribute :env_vars, Dry::Types['strict.hash']
|
|
48
|
+
.map(Dry::Types['strict.string'], PagesEnvVar)
|
|
49
|
+
.optional
|
|
50
|
+
.default(nil)
|
|
51
|
+
attribute :kv_namespaces, Dry::Types['strict.hash'].optional.default(nil)
|
|
52
|
+
attribute :d1_databases, Dry::Types['strict.hash'].optional.default(nil)
|
|
53
|
+
attribute :durable_object_namespaces, Dry::Types['strict.hash'].optional.default(nil)
|
|
54
|
+
attribute :r2_buckets, Dry::Types['strict.hash']
|
|
55
|
+
.map(Dry::Types['strict.string'], PagesR2Binding)
|
|
56
|
+
.optional
|
|
57
|
+
.default(nil)
|
|
58
|
+
attribute :services, Dry::Types['strict.hash']
|
|
59
|
+
.map(Dry::Types['strict.string'], PagesServiceBinding)
|
|
60
|
+
.optional
|
|
61
|
+
.default(nil)
|
|
62
|
+
attribute :analytics_engine_datasets, Dry::Types['strict.hash'].optional.default(nil)
|
|
63
|
+
attribute :queue_producers, Dry::Types['strict.hash'].optional.default(nil)
|
|
64
|
+
attribute :hyperdrive_bindings, Dry::Types['strict.hash'].optional.default(nil)
|
|
65
|
+
attribute :vectorize_bindings, Dry::Types['strict.hash'].optional.default(nil)
|
|
66
|
+
attribute :ai_bindings, Dry::Types['strict.hash'].optional.default(nil)
|
|
67
|
+
attribute :browsers, Dry::Types['strict.hash'].optional.default(nil)
|
|
68
|
+
attribute :mtls_certificates, Dry::Types['strict.hash'].optional.default(nil)
|
|
69
|
+
attribute :limits, PagesDeploymentLimits.optional.default(nil)
|
|
70
|
+
attribute :placement, PagesDeploymentPlacement.optional.default(nil)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Deployment configurations container
|
|
74
|
+
class PagesDeploymentConfigs < Dry::Struct
|
|
75
|
+
transform_keys(&:to_sym)
|
|
76
|
+
|
|
77
|
+
attribute :production, PagesDeploymentConfig.optional.default(nil)
|
|
78
|
+
attribute :preview, PagesDeploymentConfig.optional.default(nil)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
|
|
4
|
+
|
|
5
|
+
require 'dry-struct'
|
|
6
|
+
require 'pangea/resources/types'
|
|
7
|
+
require_relative 'types/attributes'
|
|
8
|
+
|
|
9
|
+
module Pangea
|
|
10
|
+
module Resources
|
|
11
|
+
module Cloudflare
|
|
12
|
+
module Types
|
|
13
|
+
# PagesBuildConfig is defined in types/build_config.rb
|
|
14
|
+
# PagesSourceConfig is defined in types/build_config.rb
|
|
15
|
+
# PagesSource is defined in types/build_config.rb
|
|
16
|
+
# PagesServiceBinding is defined in types/bindings.rb
|
|
17
|
+
# PagesR2Binding is defined in types/bindings.rb
|
|
18
|
+
# PagesEnvVar is defined in types/bindings.rb
|
|
19
|
+
# PagesDeploymentLimits is defined in types/deployment_config.rb
|
|
20
|
+
# PagesDeploymentPlacement is defined in types/deployment_config.rb
|
|
21
|
+
# PagesDeploymentConfig is defined in types/deployment_config.rb
|
|
22
|
+
# PagesDeploymentConfigs is defined in types/deployment_config.rb
|
|
23
|
+
# PagesProjectAttributes is defined in types/attributes.rb
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Copyright 2025 The Pangea Authors
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'pangea/resources/base'
|
|
18
|
+
require 'pangea/resources/reference'
|
|
19
|
+
require 'pangea/resources/cloudflare_queue/types'
|
|
20
|
+
require 'pangea/resource_registry'
|
|
21
|
+
|
|
22
|
+
module Pangea
|
|
23
|
+
module Resources
|
|
24
|
+
# Cloudflare Queue resource module that self-registers
|
|
25
|
+
module CloudflareQueue
|
|
26
|
+
# Create a Cloudflare Queue
|
|
27
|
+
#
|
|
28
|
+
# Queues provide message queuing for asynchronous task processing.
|
|
29
|
+
# Messages are delivered to Workers with configurable retry and
|
|
30
|
+
# concurrency settings.
|
|
31
|
+
#
|
|
32
|
+
# @param name [Symbol] The resource name
|
|
33
|
+
# @param attributes [Hash] Queue attributes
|
|
34
|
+
# @option attributes [String] :account_id Cloudflare account ID (required)
|
|
35
|
+
# @option attributes [String] :queue_name Queue name (required)
|
|
36
|
+
# @option attributes [Integer] :max_concurrency Maximum concurrent consumers (1-100)
|
|
37
|
+
# @option attributes [Integer] :max_retries Maximum retry attempts (0-100)
|
|
38
|
+
# @option attributes [Integer] :max_wait_time_ms Maximum wait time before retry in ms
|
|
39
|
+
# @option attributes [Integer] :retry_delay Delay between retries in seconds
|
|
40
|
+
# @option attributes [Integer] :visibility_timeout_ms Message visibility timeout in ms
|
|
41
|
+
# @option attributes [Integer] :message_retention_period Retention period in seconds (60-1209600)
|
|
42
|
+
#
|
|
43
|
+
# @return [ResourceReference] Reference object with outputs
|
|
44
|
+
#
|
|
45
|
+
# @example Create a basic task queue
|
|
46
|
+
# cloudflare_queue(:tasks, {
|
|
47
|
+
# account_id: "a" * 32,
|
|
48
|
+
# queue_name: "background-tasks"
|
|
49
|
+
# })
|
|
50
|
+
#
|
|
51
|
+
# @example Create queue with concurrency and retry settings
|
|
52
|
+
# cloudflare_queue(:email_queue, {
|
|
53
|
+
# account_id: "a" * 32,
|
|
54
|
+
# queue_name: "email-delivery",
|
|
55
|
+
# max_concurrency: 20,
|
|
56
|
+
# max_retries: 5,
|
|
57
|
+
# retry_delay: 60,
|
|
58
|
+
# message_retention_period: 86400 # 1 day
|
|
59
|
+
# })
|
|
60
|
+
#
|
|
61
|
+
# @example Create high-throughput queue
|
|
62
|
+
# cloudflare_queue(:analytics, {
|
|
63
|
+
# account_id: "a" * 32,
|
|
64
|
+
# queue_name: "analytics-events",
|
|
65
|
+
# max_concurrency: 100,
|
|
66
|
+
# max_retries: 3,
|
|
67
|
+
# visibility_timeout_ms: 30000,
|
|
68
|
+
# message_retention_period: 604800 # 7 days
|
|
69
|
+
# })
|
|
70
|
+
def cloudflare_queue(name, attributes = {})
|
|
71
|
+
# Validate attributes using dry-struct
|
|
72
|
+
queue_attrs = Cloudflare::Types::QueueAttributes.new(attributes)
|
|
73
|
+
|
|
74
|
+
# Generate terraform resource block via terraform-synthesizer
|
|
75
|
+
resource(:cloudflare_queue, name) do
|
|
76
|
+
account_id queue_attrs.account_id
|
|
77
|
+
name queue_attrs.queue_name
|
|
78
|
+
max_concurrency queue_attrs.max_concurrency if queue_attrs.max_concurrency
|
|
79
|
+
max_retries queue_attrs.max_retries if queue_attrs.max_retries
|
|
80
|
+
max_wait_time_ms queue_attrs.max_wait_time_ms if queue_attrs.max_wait_time_ms
|
|
81
|
+
retry_delay queue_attrs.retry_delay if queue_attrs.retry_delay
|
|
82
|
+
visibility_timeout_ms queue_attrs.visibility_timeout_ms if queue_attrs.visibility_timeout_ms
|
|
83
|
+
message_retention_period queue_attrs.message_retention_period if queue_attrs.message_retention_period
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Return resource reference with available outputs
|
|
87
|
+
ResourceReference.new(
|
|
88
|
+
type: 'cloudflare_queue',
|
|
89
|
+
name: name,
|
|
90
|
+
resource_attributes: queue_attrs.to_h,
|
|
91
|
+
outputs: {
|
|
92
|
+
id: "${cloudflare_queue.#{name}.id}",
|
|
93
|
+
queue_id: "${cloudflare_queue.#{name}.id}",
|
|
94
|
+
queue_name: "${cloudflare_queue.#{name}.name}"
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Maintain backward compatibility by extending Cloudflare module
|
|
101
|
+
module Cloudflare
|
|
102
|
+
include CloudflareQueue
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Auto-register this module when it's loaded
|
|
108
|
+
Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Copyright 2025 The Pangea Authors
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'dry-struct'
|
|
18
|
+
require 'pangea/resources/types'
|
|
19
|
+
|
|
20
|
+
module Pangea
|
|
21
|
+
module Resources
|
|
22
|
+
module Cloudflare
|
|
23
|
+
module Types
|
|
24
|
+
# Type-safe attributes for Cloudflare Queue
|
|
25
|
+
#
|
|
26
|
+
# Queues provide message queuing for asynchronous processing.
|
|
27
|
+
# Messages are delivered to Workers with configurable retry and
|
|
28
|
+
# concurrency settings.
|
|
29
|
+
#
|
|
30
|
+
# @example Create a task queue
|
|
31
|
+
# QueueAttributes.new(
|
|
32
|
+
# account_id: "a" * 32,
|
|
33
|
+
# queue_name: "email-tasks",
|
|
34
|
+
# max_concurrency: 10,
|
|
35
|
+
# max_retries: 3
|
|
36
|
+
# )
|
|
37
|
+
class QueueAttributes < Dry::Struct
|
|
38
|
+
transform_keys(&:to_sym)
|
|
39
|
+
|
|
40
|
+
# @!attribute account_id
|
|
41
|
+
# @return [String] The Cloudflare account ID
|
|
42
|
+
attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
|
|
43
|
+
|
|
44
|
+
# @!attribute queue_name
|
|
45
|
+
# @return [String] Queue name (unique identifier)
|
|
46
|
+
attribute :queue_name, Dry::Types['strict.string'].constrained(
|
|
47
|
+
min_size: 1,
|
|
48
|
+
max_size: 256
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# @!attribute max_concurrency
|
|
52
|
+
# @return [Integer, nil] Maximum concurrent consumers (1-100)
|
|
53
|
+
attribute :max_concurrency, Dry::Types['coercible.integer']
|
|
54
|
+
.constrained(gteq: 1, lteq: 100)
|
|
55
|
+
.optional
|
|
56
|
+
.default(nil)
|
|
57
|
+
|
|
58
|
+
# @!attribute max_retries
|
|
59
|
+
# @return [Integer, nil] Maximum retry attempts (0-100)
|
|
60
|
+
attribute :max_retries, Dry::Types['coercible.integer']
|
|
61
|
+
.constrained(gteq: 0, lteq: 100)
|
|
62
|
+
.optional
|
|
63
|
+
.default(nil)
|
|
64
|
+
|
|
65
|
+
# @!attribute max_wait_time_ms
|
|
66
|
+
# @return [Integer, nil] Maximum wait time before retry in milliseconds
|
|
67
|
+
attribute :max_wait_time_ms, Dry::Types['coercible.integer']
|
|
68
|
+
.constrained(gteq: 0)
|
|
69
|
+
.optional
|
|
70
|
+
.default(nil)
|
|
71
|
+
|
|
72
|
+
# @!attribute retry_delay
|
|
73
|
+
# @return [Integer, nil] Delay between retries in seconds
|
|
74
|
+
attribute :retry_delay, Dry::Types['coercible.integer']
|
|
75
|
+
.constrained(gteq: 0)
|
|
76
|
+
.optional
|
|
77
|
+
.default(nil)
|
|
78
|
+
|
|
79
|
+
# @!attribute visibility_timeout_ms
|
|
80
|
+
# @return [Integer, nil] Message visibility timeout in milliseconds
|
|
81
|
+
attribute :visibility_timeout_ms, Dry::Types['coercible.integer']
|
|
82
|
+
.constrained(gteq: 0)
|
|
83
|
+
.optional
|
|
84
|
+
.default(nil)
|
|
85
|
+
|
|
86
|
+
# @!attribute message_retention_period
|
|
87
|
+
# @return [Integer, nil] Message retention period in seconds (60-1209600)
|
|
88
|
+
attribute :message_retention_period, Dry::Types['coercible.integer']
|
|
89
|
+
.constrained(gteq: 60, lteq: 1209600) # 1 min to 14 days
|
|
90
|
+
.optional
|
|
91
|
+
.default(nil)
|
|
92
|
+
|
|
93
|
+
# Check if queue has high concurrency configured
|
|
94
|
+
# @return [Boolean] true if max_concurrency >= 10
|
|
95
|
+
def high_concurrency?
|
|
96
|
+
max_concurrency && max_concurrency >= 10
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Check if queue has retry configured
|
|
100
|
+
# @return [Boolean] true if max_retries > 0
|
|
101
|
+
def retries_enabled?
|
|
102
|
+
max_retries && max_retries > 0
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Get retention period in days
|
|
106
|
+
# @return [Float, nil] Retention period in days
|
|
107
|
+
def retention_days
|
|
108
|
+
return nil unless message_retention_period
|
|
109
|
+
message_retention_period / 86400.0
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Extract environment from queue name if present
|
|
113
|
+
# @return [String, nil] Environment name if detected
|
|
114
|
+
def environment
|
|
115
|
+
case queue_name.downcase
|
|
116
|
+
when /production|prod/
|
|
117
|
+
'production'
|
|
118
|
+
when /staging|stage/
|
|
119
|
+
'staging'
|
|
120
|
+
when /development|dev/
|
|
121
|
+
'development'
|
|
122
|
+
when /test/
|
|
123
|
+
'test'
|
|
124
|
+
else
|
|
125
|
+
nil
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|