// Copyright 2020 Fortinet, Inc. All rights reserved.
// Author: Frank Shen (@frankshen01), Hongbin Lu (@fgtdev-hblu)
// Documentation:
// Frank Shen (@frankshen01), Hongbin Lu (@fgtdev-hblu),
// Xing Li (@lix-fortinet), Yue Wang (@yuew-ftnt), Yuffie Zhu (@yuffiezhu)

// Description: Provider for FortiOS

package fortiadc

import (
	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

// Provider creates and returns the FortiOS *schema.Provider.
func Provider() *schema.Provider {
	return &schema.Provider{
		Schema: map[string]*schema.Schema{
			"hostname": &schema.Schema{
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "The hostname/IP address of the FortiOS to be connected",
			},

			"token": &schema.Schema{
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "",
			},

			"insecure": {
				Type:        schema.TypeBool,
				Optional:    true,
				Description: "",
			},

			"cabundlefile": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "CA Bundle file",
			},

			"cabundlecontent": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "CA Bundle file content",
			},

			"http_proxy": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "HTTP proxy address",
			},

			"https_proxy": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "HTTPS proxy address",
			},

			"no_proxy": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "NO proxy address",
			},

			"peerauth": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "disable",
				Description: "Enable/disable peer authentication, can be 'enable' or 'disable'",
			},

			"cacert": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "CA certtificate(Optional)",
			},

			"clientcert": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "User certificate",
			},

			"clientkey": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "User private key",
			},

			"vdom": &schema.Schema{
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "",
			},

			"fmg_hostname": &schema.Schema{
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "Hostname/IP address of the FortiManager to connect to",
			},

			"fmg_username": &schema.Schema{
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "",
			},

			"fmg_passwd": &schema.Schema{
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "",
			},

			"fmg_insecure": {
				Type:        schema.TypeBool,
				Optional:    true,
				Description: "",
			},

			"fmg_cabundlefile": {
				Type:        schema.TypeString,
				Optional:    true,
				Default:     "",
				Description: "CA Bundle file",
			},
		},

		DataSourcesMap: map[string]*schema.Resource{
			// manual path
			"fortiadc_json_generic_api": dataSourceJSONGenericAPI(),
			"fortiadc_vdomlist":         dataSourceVdomList(),
			//auto gen path
			/*"fortiadc_router_static":                           dataSourceRouterStatic(),
			"fortiadc_router_staticlist":                       dataSourceRouterStaticList(),
			"fortiadc_system_global":                           dataSourceSystemGlobal(),
			"fortiadc_load_balance_pool_child_pool_member":     dataSourceLoadBalancePoolChildPoolMember(),
			"fortiadc_load_balance_pool_child_pool_memberlist": dataSourceLoadBalancePoolChildPoolMemberList(),
			"fortiadc_security_ips_profile":                    dataSourceSecurityIpsProfile(),
			"fortiadc_security_ips_profilelist":                dataSourceSecurityIpsProfileList(),*/
			"fortiadc_system_ha_child_remote_ip_monitor_list":                          dataSourceSystemHaChildRemoteIpMonitorList(),
			"fortiadc_system_ha_child_remote_ip_monitor_listlist":                      dataSourceSystemHaChildRemoteIpMonitorListList(),
			"fortiadc_system_certificate_certificate_verify_child_group_member":        dataSourceSystemCertificateCertificateVerifyChildGroupMember(),
			"fortiadc_system_certificate_certificate_verify_child_group_memberlist":    dataSourceSystemCertificateCertificateVerifyChildGroupMemberList(),
			"fortiadc_system_global":                                                   dataSourceSystemGlobal(),
			"fortiadc_router_access_list":                                              dataSourceRouterAccessList(),
			"fortiadc_router_access_listlist":                                          dataSourceRouterAccessListList(),
			"fortiadc_load_balance_content_routing_child_match_condition":              dataSourceLoadBalanceContentRoutingChildMatchCondition(),
			"fortiadc_load_balance_content_routing_child_match_conditionlist":          dataSourceLoadBalanceContentRoutingChildMatchConditionList(),
			"fortiadc_system_health_check_script":                                      dataSourceSystemHealthCheckScript(),
			"fortiadc_system_health_check_scriptlist":                                  dataSourceSystemHealthCheckScriptList(),
			"fortiadc_system_certificate_local":                                        dataSourceSystemCertificateLocal(),
			"fortiadc_system_certificate_locallist":                                    dataSourceSystemCertificateLocalList(),
			"fortiadc_load_balance_clone_pool_child_pool_member":                       dataSourceLoadBalanceClonePoolChildPoolMember(),
			"fortiadc_load_balance_clone_pool_child_pool_memberlist":                   dataSourceLoadBalanceClonePoolChildPoolMemberList(),
			"fortiadc_system_certificate_ca_group_child_group_member":                  dataSourceSystemCertificateCaGroupChildGroupMember(),
			"fortiadc_system_certificate_ca_group_child_group_memberlist":              dataSourceSystemCertificateCaGroupChildGroupMemberList(),
			"fortiadc_system_isp_addr_child_address":                                   dataSourceSystemIspAddrChildAddress(),
			"fortiadc_system_isp_addr_child_addresslist":                               dataSourceSystemIspAddrChildAddressList(),
			"fortiadc_system_certificate_ca_group":                                     dataSourceSystemCertificateCaGroup(),
			"fortiadc_system_certificate_ca_grouplist":                                 dataSourceSystemCertificateCaGroupList(),
			"fortiadc_system_service":                                                  dataSourceSystemService(),
			"fortiadc_system_servicelist":                                              dataSourceSystemServiceList(),
			"fortiadc_load_balance_profile_child_server_request_header_erase":          dataSourceLoadBalanceProfileChildServerRequestHeaderErase(),
			"fortiadc_load_balance_profile_child_server_request_header_eraselist":      dataSourceLoadBalanceProfileChildServerRequestHeaderEraseList(),
			"fortiadc_load_balance_caching_child_uri_exclude_list":                     dataSourceLoadBalanceCachingChildUriExcludeList(),
			"fortiadc_load_balance_caching_child_uri_exclude_listlist":                 dataSourceLoadBalanceCachingChildUriExcludeListList(),
			"fortiadc_load_balance_method":                                             dataSourceLoadBalanceMethod(),
			"fortiadc_load_balance_methodlist":                                         dataSourceLoadBalanceMethodList(),
			"fortiadc_system_overlay_tunnel_child_remote_host":                         dataSourceSystemOverlayTunnelChildRemoteHost(),
			"fortiadc_system_overlay_tunnel_child_remote_hostlist":                     dataSourceSystemOverlayTunnelChildRemoteHostList(),
			"fortiadc_load_balance_profile_child_mssql_user_password":                  dataSourceLoadBalanceProfileChildMssqlUserPassword(),
			"fortiadc_load_balance_profile_child_mssql_user_passwordlist":              dataSourceLoadBalanceProfileChildMssqlUserPasswordList(),
			"fortiadc_load_balance_geoip_list":                                         dataSourceLoadBalanceGeoipList(),
			"fortiadc_load_balance_geoip_listlist":                                     dataSourceLoadBalanceGeoipListList(),
			"fortiadc_system_overlay_tunnel":                                           dataSourceSystemOverlayTunnel(),
			"fortiadc_system_overlay_tunnellist":                                       dataSourceSystemOverlayTunnelList(),
			"fortiadc_system_address":                                                  dataSourceSystemAddress(),
			"fortiadc_system_addresslist":                                              dataSourceSystemAddressList(),
			"fortiadc_load_balance_decompression_child_uri_list":                       dataSourceLoadBalanceDecompressionChildUriList(),
			"fortiadc_load_balance_decompression_child_uri_listlist":                   dataSourceLoadBalanceDecompressionChildUriListList(),
			"fortiadc_load_balance_pagespeed_child_page_control":                       dataSourceLoadBalancePagespeedChildPageControl(),
			"fortiadc_load_balance_pagespeed_child_page_controllist":                   dataSourceLoadBalancePagespeedChildPageControlList(),
			"fortiadc_load_balance_profile":                                            dataSourceLoadBalanceProfile(),
			"fortiadc_load_balance_profilelist":                                        dataSourceLoadBalanceProfileList(),
			"fortiadc_load_balance_pool":                                               dataSourceLoadBalancePool(),
			"fortiadc_load_balance_poollist":                                           dataSourceLoadBalancePoolList(),
			"fortiadc_system_isp_addr":                                                 dataSourceSystemIspAddr(),
			"fortiadc_system_isp_addrlist":                                             dataSourceSystemIspAddrList(),
			"fortiadc_load_balance_auth_policy":                                        dataSourceLoadBalanceAuthPolicy(),
			"fortiadc_load_balance_auth_policylist":                                    dataSourceLoadBalanceAuthPolicyList(),
			"fortiadc_system_sdn_connector":                                            dataSourceSystemSdnConnector(),
			"fortiadc_system_sdn_connectorlist":                                        dataSourceSystemSdnConnectorList(),
			"fortiadc_router_ospf_child_ha_router_id_list":                             dataSourceRouterOspfChildHaRouterIdList(),
			"fortiadc_router_ospf_child_ha_router_id_listlist":                         dataSourceRouterOspfChildHaRouterIdListList(),
			"fortiadc_system_health_check":                                             dataSourceSystemHealthCheck(),
			"fortiadc_system_health_checklist":                                         dataSourceSystemHealthCheckList(),
			"fortiadc_router_access_list_child_rule":                                   dataSourceRouterAccessListChildRule(),
			"fortiadc_router_access_list_child_rulelist":                               dataSourceRouterAccessListChildRuleList(),
			"fortiadc_system_certificate_ocsp":                                         dataSourceSystemCertificateOcsp(),
			"fortiadc_system_certificate_ocsplist":                                     dataSourceSystemCertificateOcspList(),
			"fortiadc_system_stream_scripting":                                         dataSourceSystemStreamScripting(),
			"fortiadc_system_stream_scriptinglist":                                     dataSourceSystemStreamScriptingList(),
			"fortiadc_system_interface":                                                dataSourceSystemInterface(),
			"fortiadc_system_interfacelist":                                            dataSourceSystemInterfaceList(),
			"fortiadc_load_balance_persistence_child_radius_attribute":                 dataSourceLoadBalancePersistenceChildRadiusAttribute(),
			"fortiadc_load_balance_persistence_child_radius_attributelist":             dataSourceLoadBalancePersistenceChildRadiusAttributeList(),
			"fortiadc_router_policy":                                                   dataSourceRouterPolicy(),
			"fortiadc_router_policylist":                                               dataSourceRouterPolicyList(),
			"fortiadc_load_balance_ippool_child_node_member":                           dataSourceLoadBalanceIppoolChildNodeMember(),
			"fortiadc_load_balance_ippool_child_node_memberlist":                       dataSourceLoadBalanceIppoolChildNodeMemberList(),
			"fortiadc_load_balance_captcha_profile":                                    dataSourceLoadBalanceCaptchaProfile(),
			"fortiadc_load_balance_captcha_profilelist":                                dataSourceLoadBalanceCaptchaProfileList(),
			"fortiadc_system_vdom":                                                     dataSourceSystemVdom(),
			"fortiadc_system_vdomlist":                                                 dataSourceSystemVdomList(),
			"fortiadc_system_mailserver":                                               dataSourceSystemMailserver(),
			"fortiadc_router_ospf_child_ospf_interface":                                dataSourceRouterOspfChildOspfInterface(),
			"fortiadc_router_ospf_child_ospf_interfacelist":                            dataSourceRouterOspfChildOspfInterfaceList(),
			"fortiadc_system_isp_province":                                             dataSourceSystemIspProvince(),
			"fortiadc_system_isp_provincelist":                                         dataSourceSystemIspProvinceList(),
			"fortiadc_system_certificate_certificate_verify":                           dataSourceSystemCertificateCertificateVerify(),
			"fortiadc_system_certificate_certificate_verifylist":                       dataSourceSystemCertificateCertificateVerifyList(),
			"fortiadc_load_balance_decompression_child_content_types":                  dataSourceLoadBalanceDecompressionChildContentTypes(),
			"fortiadc_load_balance_decompression_child_content_typeslist":              dataSourceLoadBalanceDecompressionChildContentTypesList(),
			"fortiadc_system_auto_backup":                                              dataSourceSystemAutoBackup(),
			"fortiadc_system_interface_child_trust_ip_list":                            dataSourceSystemInterfaceChildTrustIpList(),
			"fortiadc_system_interface_child_trust_ip_listlist":                        dataSourceSystemInterfaceChildTrustIpListList(),
			"fortiadc_router_ospf_child_area":                                          dataSourceRouterOspfChildArea(),
			"fortiadc_router_ospf_child_arealist":                                      dataSourceRouterOspfChildAreaList(),
			"fortiadc_load_balance_profile_child_mysql_rule":                           dataSourceLoadBalanceProfileChildMysqlRule(),
			"fortiadc_load_balance_profile_child_mysql_rulelist":                       dataSourceLoadBalanceProfileChildMysqlRuleList(),
			"fortiadc_system_vdom_link":                                                dataSourceSystemVdomLink(),
			"fortiadc_system_vdom_linklist":                                            dataSourceSystemVdomLinkList(),
			"fortiadc_load_balance_real_server_ssl_profile":                            dataSourceLoadBalanceRealServerSslProfile(),
			"fortiadc_load_balance_real_server_ssl_profilelist":                        dataSourceLoadBalanceRealServerSslProfileList(),
			"fortiadc_load_balance_error_page":                                         dataSourceLoadBalanceErrorPage(),
			"fortiadc_load_balance_error_pagelist":                                     dataSourceLoadBalanceErrorPageList(),
			"fortiadc_load_balance_certificate_caching":                                dataSourceLoadBalanceCertificateCaching(),
			"fortiadc_load_balance_certificate_cachinglist":                            dataSourceLoadBalanceCertificateCachingList(),
			"fortiadc_load_balance_l2_exception_list":                                  dataSourceLoadBalanceL2ExceptionList(),
			"fortiadc_load_balance_l2_exception_listlist":                              dataSourceLoadBalanceL2ExceptionListList(),
			"fortiadc_router_bgp_child_neighbor":                                       dataSourceRouterBgpChildNeighbor(),
			"fortiadc_router_bgp_child_neighborlist":                                   dataSourceRouterBgpChildNeighborList(),
			"fortiadc_system_certificate_intermediate_ca":                              dataSourceSystemCertificateIntermediateCa(),
			"fortiadc_system_certificate_intermediate_calist":                          dataSourceSystemCertificateIntermediateCaList(),
			"fortiadc_system_schedule_group_child_schedule_member":                     dataSourceSystemScheduleGroupChildScheduleMember(),
			"fortiadc_system_schedule_group_child_schedule_memberlist":                 dataSourceSystemScheduleGroupChildScheduleMemberList(),
			"fortiadc_load_balance_pagespeed":                                          dataSourceLoadBalancePagespeed(),
			"fortiadc_load_balance_pagespeedlist":                                      dataSourceLoadBalancePagespeedList(),
			"fortiadc_load_balance_compression_child_content_types":                    dataSourceLoadBalanceCompressionChildContentTypes(),
			"fortiadc_load_balance_compression_child_content_typeslist":                dataSourceLoadBalanceCompressionChildContentTypesList(),
			"fortiadc_router_access_list6_child_rule":                                  dataSourceRouterAccessList6ChildRule(),
			"fortiadc_router_access_list6_child_rulelist":                              dataSourceRouterAccessList6ChildRuleList(),
			"fortiadc_firewall_nat_snat":                                               dataSourceFirewallNatSnat(),
			"fortiadc_firewall_nat_snatlist":                                           dataSourceFirewallNatSnatList(),
			"fortiadc_load_balance_decompression":                                      dataSourceLoadBalanceDecompression(),
			"fortiadc_load_balance_decompressionlist":                                  dataSourceLoadBalanceDecompressionList(),
			"fortiadc_load_balance_compression_child_uri_list":                         dataSourceLoadBalanceCompressionChildUriList(),
			"fortiadc_load_balance_compression_child_uri_listlist":                     dataSourceLoadBalanceCompressionChildUriListList(),
			"fortiadc_load_balance_client_ssl_profile":                                 dataSourceLoadBalanceClientSslProfile(),
			"fortiadc_load_balance_client_ssl_profilelist":                             dataSourceLoadBalanceClientSslProfileList(),
			"fortiadc_system_certificate_local_cert_group_child_group_member":          dataSourceSystemCertificateLocalCertGroupChildGroupMember(),
			"fortiadc_system_certificate_local_cert_group_child_group_memberlist":      dataSourceSystemCertificateLocalCertGroupChildGroupMemberList(),
			"fortiadc_router_ospf":                                                     dataSourceRouterOspf(),
			"fortiadc_router_prefix_list6":                                             dataSourceRouterPrefixList6(),
			"fortiadc_router_prefix_list6list":                                         dataSourceRouterPrefixList6List(),
			"fortiadc_load_balance_profile_child_server_response_header_erase":         dataSourceLoadBalanceProfileChildServerResponseHeaderErase(),
			"fortiadc_load_balance_profile_child_server_response_header_eraselist":     dataSourceLoadBalanceProfileChildServerResponseHeaderEraseList(),
			"fortiadc_security_ztna_profile":                                           dataSourceSecurityZtnaProfile(),
			"fortiadc_security_ztna_profilelist":                                       dataSourceSecurityZtnaProfileList(),
			"fortiadc_load_balance_content_rewriting_child_match_condition":            dataSourceLoadBalanceContentRewritingChildMatchCondition(),
			"fortiadc_load_balance_content_rewriting_child_match_conditionlist":        dataSourceLoadBalanceContentRewritingChildMatchConditionList(),
			"fortiadc_load_balance_profile_child_client_response_header_insert":        dataSourceLoadBalanceProfileChildClientResponseHeaderInsert(),
			"fortiadc_load_balance_profile_child_client_response_header_insertlist":    dataSourceLoadBalanceProfileChildClientResponseHeaderInsertList(),
			"fortiadc_system_servicegrp":                                               dataSourceSystemServicegrp(),
			"fortiadc_system_servicegrplist":                                           dataSourceSystemServicegrpList(),
			"fortiadc_load_balance_web_filter_profile_child_category_members":          dataSourceLoadBalanceWebFilterProfileChildCategoryMembers(),
			"fortiadc_load_balance_web_filter_profile_child_category_memberslist":      dataSourceLoadBalanceWebFilterProfileChildCategoryMembersList(),
			"fortiadc_load_balance_caching_child_dyn_cache_list":                       dataSourceLoadBalanceCachingChildDynCacheList(),
			"fortiadc_load_balance_caching_child_dyn_cache_listlist":                   dataSourceLoadBalanceCachingChildDynCacheListList(),
			"fortiadc_load_balance_profile_child_server_request_header_insert":         dataSourceLoadBalanceProfileChildServerRequestHeaderInsert(),
			"fortiadc_load_balance_profile_child_server_request_header_insertlist":     dataSourceLoadBalanceProfileChildServerRequestHeaderInsertList(),
			"fortiadc_system_addrgrp":                                                  dataSourceSystemAddrgrp(),
			"fortiadc_system_addrgrplist":                                              dataSourceSystemAddrgrpList(),
			"fortiadc_router_access_list6":                                             dataSourceRouterAccessList6(),
			"fortiadc_router_access_list6list":                                         dataSourceRouterAccessList6List(),
			"fortiadc_load_balance_profile_child_client_response_header_erase":         dataSourceLoadBalanceProfileChildClientResponseHeaderErase(),
			"fortiadc_load_balance_profile_child_client_response_header_eraselist":     dataSourceLoadBalanceProfileChildClientResponseHeaderEraseList(),
			"fortiadc_router_prefix_list_child_rule":                                   dataSourceRouterPrefixListChildRule(),
			"fortiadc_router_prefix_list_child_rulelist":                               dataSourceRouterPrefixListChildRuleList(),
			"fortiadc_config_sync_list":                                                dataSourceConfigSyncList(),
			"fortiadc_config_sync_listlist":                                            dataSourceConfigSyncListList(),
			"fortiadc_router_prefix_list":                                              dataSourceRouterPrefixList(),
			"fortiadc_router_prefix_listlist":                                          dataSourceRouterPrefixListList(),
			"fortiadc_system_azure_lb_backend_ip":                                      dataSourceSystemAzureLbBackendIp(),
			"fortiadc_system_azure_lb_backend_iplist":                                  dataSourceSystemAzureLbBackendIpList(),
			"fortiadc_router_bgp_child_network":                                        dataSourceRouterBgpChildNetwork(),
			"fortiadc_router_bgp_child_networklist":                                    dataSourceRouterBgpChildNetworkList(),
			"fortiadc_system_certificate_intermediate_ca_group_child_group_member":     dataSourceSystemCertificateIntermediateCaGroupChildGroupMember(),
			"fortiadc_system_certificate_intermediate_ca_group_child_group_memberlist": dataSourceSystemCertificateIntermediateCaGroupChildGroupMemberList(),
			"fortiadc_load_balance_allowlist":                                          dataSourceLoadBalanceAllowlist(),
			"fortiadc_load_balance_allowlistlist":                                      dataSourceLoadBalanceAllowlistList(),
			"fortiadc_router_bgp":                                                      dataSourceRouterBgp(),
			"fortiadc_router_bgp_child_ha_router_id_list":                              dataSourceRouterBgpChildHaRouterIdList(),
			"fortiadc_router_bgp_child_ha_router_id_listlist":                          dataSourceRouterBgpChildHaRouterIdListList(),
			"fortiadc_router_prefix_list6_child_rule":                                  dataSourceRouterPrefixList6ChildRule(),
			"fortiadc_router_prefix_list6_child_rulelist":                              dataSourceRouterPrefixList6ChildRuleList(),
			"fortiadc_load_balance_schedule_pool":                                      dataSourceLoadBalanceSchedulePool(),
			"fortiadc_load_balance_schedule_poollist":                                  dataSourceLoadBalanceSchedulePoolList(),
			"fortiadc_load_balance_web_category":                                       dataSourceLoadBalanceWebCategory(),
			"fortiadc_load_balance_web_categorylist":                                   dataSourceLoadBalanceWebCategoryList(),
			"fortiadc_system_ha":                                                       dataSourceSystemHa(),
			"fortiadc_load_balance_pagespeed_profile":                                  dataSourceLoadBalancePagespeedProfile(),
			"fortiadc_load_balance_pagespeed_profilelist":                              dataSourceLoadBalancePagespeedProfileList(),
			"fortiadc_router_md5_ospf_child_md5_member":                                dataSourceRouterMd5OspfChildMd5Member(),
			"fortiadc_router_md5_ospf_child_md5_memberlist":                            dataSourceRouterMd5OspfChildMd5MemberList(),
			"fortiadc_load_balance_content_rewriting":                                  dataSourceLoadBalanceContentRewriting(),
			"fortiadc_load_balance_content_rewritinglist":                              dataSourceLoadBalanceContentRewritingList(),
			"fortiadc_user_adfs_publish":                                               dataSourceUserAdfsPublish(),
			"fortiadc_user_adfs_publishlist":                                           dataSourceUserAdfsPublishList(),
			"fortiadc_load_balance_virtual_server":                                     dataSourceLoadBalanceVirtualServer(),
			"fortiadc_load_balance_virtual_serverlist":                                 dataSourceLoadBalanceVirtualServerList(),
			"fortiadc_load_balance_profile_child_mysql_user_password":                  dataSourceLoadBalanceProfileChildMysqlUserPassword(),
			"fortiadc_load_balance_profile_child_mysql_user_passwordlist":              dataSourceLoadBalanceProfileChildMysqlUserPasswordList(),
			"fortiadc_load_balance_caching":                                            dataSourceLoadBalanceCaching(),
			"fortiadc_load_balance_cachinglist":                                        dataSourceLoadBalanceCachingList(),
			"fortiadc_router_md5_ospf":                                                 dataSourceRouterMd5Ospf(),
			"fortiadc_router_md5_ospflist":                                             dataSourceRouterMd5OspfList(),
			"fortiadc_load_balance_persistence":                                        dataSourceLoadBalancePersistence(),
			"fortiadc_load_balance_persistencelist":                                    dataSourceLoadBalancePersistenceList(),
			"fortiadc_load_balance_persistence_child_iso8583_bitmap":                   dataSourceLoadBalancePersistenceChildIso8583Bitmap(),
			"fortiadc_load_balance_persistence_child_iso8583_bitmaplist":               dataSourceLoadBalancePersistenceChildIso8583BitmapList(),
			"fortiadc_load_balance_http2_profile":                                      dataSourceLoadBalanceHttp2Profile(),
			"fortiadc_load_balance_http2_profilelist":                                  dataSourceLoadBalanceHttp2ProfileList(),
			"fortiadc_system_scripting":                                                dataSourceSystemScripting(),
			"fortiadc_system_scriptinglist":                                            dataSourceSystemScriptingList(),
			"fortiadc_load_balance_real_server":                                        dataSourceLoadBalanceRealServer(),
			"fortiadc_load_balance_real_serverlist":                                    dataSourceLoadBalanceRealServerList(),
			"fortiadc_system_schedule_group":                                           dataSourceSystemScheduleGroup(),
			"fortiadc_system_schedule_grouplist":                                       dataSourceSystemScheduleGroupList(),
			"fortiadc_load_balance_profile_child_mysql_sharding":                       dataSourceLoadBalanceProfileChildMysqlSharding(),
			"fortiadc_load_balance_profile_child_mysql_shardinglist":                   dataSourceLoadBalanceProfileChildMysqlShardingList(),
			"fortiadc_system_certificate_crl":                                          dataSourceSystemCertificateCrl(),
			"fortiadc_system_certificate_crllist":                                      dataSourceSystemCertificateCrlList(),
			"fortiadc_system_address6":                                                 dataSourceSystemAddress6(),
			"fortiadc_system_address6list":                                             dataSourceSystemAddress6List(),
			"fortiadc_security_antivirus_profile":                                      dataSourceSecurityAntivirusProfile(),
			"fortiadc_security_antivirus_profilelist":                                  dataSourceSecurityAntivirusProfileList(),
			"fortiadc_load_balance_clone_pool":                                         dataSourceLoadBalanceClonePool(),
			"fortiadc_load_balance_clone_poollist":                                     dataSourceLoadBalanceClonePoolList(),
			"fortiadc_load_balance_pagespeed_child_resource_control":                   dataSourceLoadBalancePagespeedChildResourceControl(),
			"fortiadc_load_balance_pagespeed_child_resource_controllist":               dataSourceLoadBalancePagespeedChildResourceControlList(),
			"fortiadc_system_traffic_group":                                            dataSourceSystemTrafficGroup(),
			"fortiadc_system_traffic_grouplist":                                        dataSourceSystemTrafficGroupList(),
			"fortiadc_router_ospf_child_network":                                       dataSourceRouterOspfChildNetwork(),
			"fortiadc_router_ospf_child_networklist":                                   dataSourceRouterOspfChildNetworkList(),
			"fortiadc_router_isp":                                                      dataSourceRouterIsp(),
			"fortiadc_router_isplist":                                                  dataSourceRouterIspList(),
			"fortiadc_system_interface_child_ha_node_ip_list":                          dataSourceSystemInterfaceChildHaNodeIpList(),
			"fortiadc_system_interface_child_ha_node_ip_listlist":                      dataSourceSystemInterfaceChildHaNodeIpListList(),
			"fortiadc_security_waf_profile":                                            dataSourceSecurityWafProfile(),
			"fortiadc_security_waf_profilelist":                                        dataSourceSecurityWafProfileList(),
			"fortiadc_load_balance_profile_child_client_request_header_erase":          dataSourceLoadBalanceProfileChildClientRequestHeaderErase(),
			"fortiadc_load_balance_profile_child_client_request_header_eraselist":      dataSourceLoadBalanceProfileChildClientRequestHeaderEraseList(),
			"fortiadc_system_addrgrp6":                                                 dataSourceSystemAddrgrp6(),
			"fortiadc_system_addrgrp6list":                                             dataSourceSystemAddrgrp6List(),
			"fortiadc_system_certificate_local_cert_group":                             dataSourceSystemCertificateLocalCertGroup(),
			"fortiadc_system_certificate_local_cert_grouplist":                         dataSourceSystemCertificateLocalCertGroupList(),
			"fortiadc_system_time_manual":                                              dataSourceSystemTimeManual(),
			"fortiadc_load_balance_content_routing":                                    dataSourceLoadBalanceContentRouting(),
			"fortiadc_load_balance_content_routinglist":                                dataSourceLoadBalanceContentRoutingList(),
			"fortiadc_system_certificate_intermediate_ca_group":                        dataSourceSystemCertificateIntermediateCaGroup(),
			"fortiadc_system_certificate_intermediate_ca_grouplist":                    dataSourceSystemCertificateIntermediateCaGroupList(),
			"fortiadc_security_dos_dos_protection_profile":                             dataSourceSecurityDosDosProtectionProfile(),
			"fortiadc_security_dos_dos_protection_profilelist":                         dataSourceSecurityDosDosProtectionProfileList(),
			"fortiadc_load_balance_web_sub_category":                                   dataSourceLoadBalanceWebSubCategory(),
			"fortiadc_load_balance_web_sub_categorylist":                               dataSourceLoadBalanceWebSubCategoryList(),
			"fortiadc_load_balance_compression":                                        dataSourceLoadBalanceCompression(),
			"fortiadc_load_balance_compressionlist":                                    dataSourceLoadBalanceCompressionList(),
			"fortiadc_system_interface_child_secondary_ip_list":                        dataSourceSystemInterfaceChildSecondaryIpList(),
			"fortiadc_system_interface_child_secondary_ip_listlist":                    dataSourceSystemInterfaceChildSecondaryIpListList(),
			"fortiadc_firewall_vip":                                                    dataSourceFirewallVip(),
			"fortiadc_firewall_viplist":                                                dataSourceFirewallVipList(),
			"fortiadc_load_balance_profile_child_server_response_header_insert":        dataSourceLoadBalanceProfileChildServerResponseHeaderInsert(),
			"fortiadc_load_balance_profile_child_server_response_header_insertlist":    dataSourceLoadBalanceProfileChildServerResponseHeaderInsertList(),
			"fortiadc_load_balance_web_filter_profile":                                 dataSourceLoadBalanceWebFilterProfile(),
			"fortiadc_load_balance_web_filter_profilelist":                             dataSourceLoadBalanceWebFilterProfileList(),
			"fortiadc_load_balance_l2_exception_list_child_member":                     dataSourceLoadBalanceL2ExceptionListChildMember(),
			"fortiadc_load_balance_l2_exception_list_child_memberlist":                 dataSourceLoadBalanceL2ExceptionListChildMemberList(),
			"fortiadc_router_static":                                                   dataSourceRouterStatic(),
			"fortiadc_router_staticlist":                                               dataSourceRouterStaticList(),
			"fortiadc_security_ips_profile":                                            dataSourceSecurityIpsProfile(),
			"fortiadc_security_ips_profilelist":                                        dataSourceSecurityIpsProfileList(),
			"fortiadc_load_balance_pool_child_pool_member":                             dataSourceLoadBalancePoolChildPoolMember(),
			"fortiadc_load_balance_pool_child_pool_memberlist":                         dataSourceLoadBalancePoolChildPoolMemberList(),
			"fortiadc_load_balance_profile_child_client_request_header_insert":         dataSourceLoadBalanceProfileChildClientRequestHeaderInsert(),
			"fortiadc_load_balance_profile_child_client_request_header_insertlist":     dataSourceLoadBalanceProfileChildClientRequestHeaderInsertList(),
			"fortiadc_load_balance_ippool":                                             dataSourceLoadBalanceIppool(),
			"fortiadc_load_balance_ippoollist":                                         dataSourceLoadBalanceIppoolList(),
			"fortiadc_system_dns":                                                      dataSourceSystemDns(),
			"fortiadc_system_dns_vdom":                                                 dataSourceSystemDnsVdom(),
		},

		ResourcesMap: map[string]*schema.Resource{
			// manual path
			"fortiadc_system_ha_mgmt_update":              resourceSystemHaMgmtUpdate(),
			"fortiadc_system_certificate_local_upload":    resourceLocalCertUpload(),
			"fortiadc_certificate_intmed_caupload":        resourceCertificateIntmedCaUpload(),
			"fortiadc_ca_certificateupload":               resourceCaCertUpload(),
			"fortiadc_certificate_crlupload":              resourceCertificateCrlUpload(),
			"fortiadc_upload_error_page":                  resourceUploadErrorPage(),
			"fortiadc_upload_captcha_cust":                resourceUploadCaptchaCust(),
			"fortiadc_system_scripting_upload":            resourceSystemScriptingUpload(),
			"fortiadc_system_certificate_intermediate_ca": resourceSystemCertificateIntermediateCa(),
			"fortiadc_vdom":                               resourceVdom(),
			//auto gen path
			"fortiadc_system_ha_child_remote_ip_monitor_list":                      resourceSystemHaChildRemoteIpMonitorList(),
			"fortiadc_system_certificate_certificate_verify_child_group_member":    resourceSystemCertificateCertificateVerifyChildGroupMember(),
			"fortiadc_system_global":                                               resourceSystemGlobal(),
			"fortiadc_router_access_list":                                          resourceRouterAccessList(),
			"fortiadc_load_balance_content_routing_child_match_condition":          resourceLoadBalanceContentRoutingChildMatchCondition(),
			"fortiadc_system_health_check_script":                                  resourceSystemHealthCheckScript(),
			"fortiadc_system_certificate_local":                                    resourceSystemCertificateLocal(),
			"fortiadc_load_balance_clone_pool_child_pool_member":                   resourceLoadBalanceClonePoolChildPoolMember(),
			"fortiadc_system_certificate_ca_group_child_group_member":              resourceSystemCertificateCaGroupChildGroupMember(),
			"fortiadc_system_isp_addr_child_address":                               resourceSystemIspAddrChildAddress(),
			"fortiadc_system_certificate_ca_group":                                 resourceSystemCertificateCaGroup(),
			"fortiadc_system_service":                                              resourceSystemService(),
			"fortiadc_load_balance_profile_child_server_request_header_erase":      resourceLoadBalanceProfileChildServerRequestHeaderErase(),
			"fortiadc_load_balance_caching_child_uri_exclude_list":                 resourceLoadBalanceCachingChildUriExcludeList(),
			"fortiadc_load_balance_method":                                         resourceLoadBalanceMethod(),
			"fortiadc_system_overlay_tunnel_child_remote_host":                     resourceSystemOverlayTunnelChildRemoteHost(),
			"fortiadc_load_balance_profile_child_mssql_user_password":              resourceLoadBalanceProfileChildMssqlUserPassword(),
			"fortiadc_load_balance_geoip_list":                                     resourceLoadBalanceGeoipList(),
			"fortiadc_system_overlay_tunnel":                                       resourceSystemOverlayTunnel(),
			"fortiadc_system_address":                                              resourceSystemAddress(),
			"fortiadc_load_balance_decompression_child_uri_list":                   resourceLoadBalanceDecompressionChildUriList(),
			"fortiadc_load_balance_pagespeed_child_page_control":                   resourceLoadBalancePagespeedChildPageControl(),
			"fortiadc_load_balance_profile":                                        resourceLoadBalanceProfile(),
			"fortiadc_load_balance_pool":                                           resourceLoadBalancePool(),
			"fortiadc_system_isp_addr":                                             resourceSystemIspAddr(),
			"fortiadc_load_balance_auth_policy":                                    resourceLoadBalanceAuthPolicy(),
			"fortiadc_system_sdn_connector":                                        resourceSystemSdnConnector(),
			"fortiadc_router_ospf_child_ha_router_id_list":                         resourceRouterOspfChildHaRouterIdList(),
			"fortiadc_system_health_check":                                         resourceSystemHealthCheck(),
			"fortiadc_router_access_list_child_rule":                               resourceRouterAccessListChildRule(),
			"fortiadc_system_certificate_ocsp":                                     resourceSystemCertificateOcsp(),
			"fortiadc_system_stream_scripting":                                     resourceSystemStreamScripting(),
			"fortiadc_system_interface":                                            resourceSystemInterface(),
			"fortiadc_load_balance_persistence_child_radius_attribute":             resourceLoadBalancePersistenceChildRadiusAttribute(),
			"fortiadc_router_policy":                                               resourceRouterPolicy(),
			"fortiadc_load_balance_ippool_child_node_member":                       resourceLoadBalanceIppoolChildNodeMember(),
			"fortiadc_load_balance_captcha_profile":                                resourceLoadBalanceCaptchaProfile(),
			"fortiadc_system_vdom":                                                 resourceSystemVdom(),
			"fortiadc_system_mailserver":                                           resourceSystemMailserver(),
			"fortiadc_router_ospf_child_ospf_interface":                            resourceRouterOspfChildOspfInterface(),
			"fortiadc_system_isp_province":                                         resourceSystemIspProvince(),
			"fortiadc_system_certificate_certificate_verify":                       resourceSystemCertificateCertificateVerify(),
			"fortiadc_load_balance_decompression_child_content_types":              resourceLoadBalanceDecompressionChildContentTypes(),
			"fortiadc_system_auto_backup":                                          resourceSystemAutoBackup(),
			"fortiadc_system_interface_child_trust_ip_list":                        resourceSystemInterfaceChildTrustIpList(),
			"fortiadc_router_ospf_child_area":                                      resourceRouterOspfChildArea(),
			"fortiadc_load_balance_profile_child_mysql_rule":                       resourceLoadBalanceProfileChildMysqlRule(),
			"fortiadc_system_vdom_link":                                            resourceSystemVdomLink(),
			"fortiadc_load_balance_real_server_ssl_profile":                        resourceLoadBalanceRealServerSslProfile(),
			"fortiadc_load_balance_error_page":                                     resourceLoadBalanceErrorPage(),
			"fortiadc_load_balance_certificate_caching":                            resourceLoadBalanceCertificateCaching(),
			"fortiadc_load_balance_l2_exception_list":                              resourceLoadBalanceL2ExceptionList(),
			"fortiadc_router_bgp_child_neighbor":                                   resourceRouterBgpChildNeighbor(),
			"fortiadc_system_schedule_group_child_schedule_member":                 resourceSystemScheduleGroupChildScheduleMember(),
			"fortiadc_load_balance_pagespeed":                                      resourceLoadBalancePagespeed(),
			"fortiadc_load_balance_compression_child_content_types":                resourceLoadBalanceCompressionChildContentTypes(),
			"fortiadc_router_access_list6_child_rule":                              resourceRouterAccessList6ChildRule(),
			"fortiadc_firewall_nat_snat":                                           resourceFirewallNatSnat(),
			"fortiadc_load_balance_decompression":                                  resourceLoadBalanceDecompression(),
			"fortiadc_load_balance_compression_child_uri_list":                     resourceLoadBalanceCompressionChildUriList(),
			"fortiadc_load_balance_client_ssl_profile":                             resourceLoadBalanceClientSslProfile(),
			"fortiadc_system_certificate_local_cert_group_child_group_member":      resourceSystemCertificateLocalCertGroupChildGroupMember(),
			"fortiadc_router_ospf":                                                 resourceRouterOspf(),
			"fortiadc_router_prefix_list6":                                         resourceRouterPrefixList6(),
			"fortiadc_load_balance_profile_child_server_response_header_erase":     resourceLoadBalanceProfileChildServerResponseHeaderErase(),
			"fortiadc_security_ztna_profile":                                       resourceSecurityZtnaProfile(),
			"fortiadc_load_balance_content_rewriting_child_match_condition":        resourceLoadBalanceContentRewritingChildMatchCondition(),
			"fortiadc_load_balance_profile_child_client_response_header_insert":    resourceLoadBalanceProfileChildClientResponseHeaderInsert(),
			"fortiadc_system_servicegrp":                                           resourceSystemServicegrp(),
			"fortiadc_load_balance_web_filter_profile_child_category_members":      resourceLoadBalanceWebFilterProfileChildCategoryMembers(),
			"fortiadc_load_balance_caching_child_dyn_cache_list":                   resourceLoadBalanceCachingChildDynCacheList(),
			"fortiadc_load_balance_profile_child_server_request_header_insert":     resourceLoadBalanceProfileChildServerRequestHeaderInsert(),
			"fortiadc_system_addrgrp":                                              resourceSystemAddrgrp(),
			"fortiadc_router_access_list6":                                         resourceRouterAccessList6(),
			"fortiadc_load_balance_profile_child_client_response_header_erase":     resourceLoadBalanceProfileChildClientResponseHeaderErase(),
			"fortiadc_router_prefix_list_child_rule":                               resourceRouterPrefixListChildRule(),
			"fortiadc_config_sync_list":                                            resourceConfigSyncList(),
			"fortiadc_router_prefix_list":                                          resourceRouterPrefixList(),
			"fortiadc_system_azure_lb_backend_ip":                                  resourceSystemAzureLbBackendIp(),
			"fortiadc_router_bgp_child_network":                                    resourceRouterBgpChildNetwork(),
			"fortiadc_system_certificate_intermediate_ca_group_child_group_member": resourceSystemCertificateIntermediateCaGroupChildGroupMember(),
			"fortiadc_load_balance_allowlist":                                      resourceLoadBalanceAllowlist(),
			"fortiadc_router_bgp":                                                  resourceRouterBgp(),
			"fortiadc_router_bgp_child_ha_router_id_list":                          resourceRouterBgpChildHaRouterIdList(),
			"fortiadc_router_prefix_list6_child_rule":                              resourceRouterPrefixList6ChildRule(),
			"fortiadc_load_balance_schedule_pool":                                  resourceLoadBalanceSchedulePool(),
			"fortiadc_load_balance_web_category":                                   resourceLoadBalanceWebCategory(),
			"fortiadc_system_ha":                                                   resourceSystemHa(),
			"fortiadc_load_balance_pagespeed_profile":                              resourceLoadBalancePagespeedProfile(),
			"fortiadc_router_md5_ospf_child_md5_member":                            resourceRouterMd5OspfChildMd5Member(),
			"fortiadc_load_balance_content_rewriting":                              resourceLoadBalanceContentRewriting(),
			"fortiadc_user_adfs_publish":                                           resourceUserAdfsPublish(),
			"fortiadc_load_balance_virtual_server":                                 resourceLoadBalanceVirtualServer(),
			"fortiadc_load_balance_profile_child_mysql_user_password":              resourceLoadBalanceProfileChildMysqlUserPassword(),
			"fortiadc_load_balance_caching":                                        resourceLoadBalanceCaching(),
			"fortiadc_router_md5_ospf":                                             resourceRouterMd5Ospf(),
			"fortiadc_load_balance_persistence":                                    resourceLoadBalancePersistence(),
			"fortiadc_load_balance_persistence_child_iso8583_bitmap":               resourceLoadBalancePersistenceChildIso8583Bitmap(),
			"fortiadc_load_balance_http2_profile":                                  resourceLoadBalanceHttp2Profile(),
			"fortiadc_system_scripting":                                            resourceSystemScripting(),
			"fortiadc_load_balance_real_server":                                    resourceLoadBalanceRealServer(),
			"fortiadc_system_schedule_group":                                       resourceSystemScheduleGroup(),
			"fortiadc_load_balance_profile_child_mysql_sharding":                   resourceLoadBalanceProfileChildMysqlSharding(),
			"fortiadc_system_certificate_crl":                                      resourceSystemCertificateCrl(),
			"fortiadc_system_address6":                                             resourceSystemAddress6(),
			"fortiadc_security_antivirus_profile":                                  resourceSecurityAntivirusProfile(),
			"fortiadc_load_balance_clone_pool":                                     resourceLoadBalanceClonePool(),
			"fortiadc_load_balance_pagespeed_child_resource_control":               resourceLoadBalancePagespeedChildResourceControl(),
			"fortiadc_system_traffic_group":                                        resourceSystemTrafficGroup(),
			"fortiadc_router_ospf_child_network":                                   resourceRouterOspfChildNetwork(),
			"fortiadc_router_isp":                                                  resourceRouterIsp(),
			"fortiadc_system_interface_child_ha_node_ip_list":                      resourceSystemInterfaceChildHaNodeIpList(),
			"fortiadc_security_waf_profile":                                        resourceSecurityWafProfile(),
			"fortiadc_load_balance_profile_child_client_request_header_erase":      resourceLoadBalanceProfileChildClientRequestHeaderErase(),
			"fortiadc_system_addrgrp6":                                             resourceSystemAddrgrp6(),
			"fortiadc_system_certificate_local_cert_group":                         resourceSystemCertificateLocalCertGroup(),
			"fortiadc_system_time_manual":                                          resourceSystemTimeManual(),
			"fortiadc_load_balance_content_routing":                                resourceLoadBalanceContentRouting(),
			"fortiadc_system_certificate_intermediate_ca_group":                    resourceSystemCertificateIntermediateCaGroup(),
			"fortiadc_security_dos_dos_protection_profile":                         resourceSecurityDosDosProtectionProfile(),
			"fortiadc_load_balance_web_sub_category":                               resourceLoadBalanceWebSubCategory(),
			"fortiadc_load_balance_compression":                                    resourceLoadBalanceCompression(),
			"fortiadc_system_interface_child_secondary_ip_list":                    resourceSystemInterfaceChildSecondaryIpList(),
			"fortiadc_firewall_vip":                                                resourceFirewallVip(),
			"fortiadc_load_balance_profile_child_server_response_header_insert":    resourceLoadBalanceProfileChildServerResponseHeaderInsert(),
			"fortiadc_load_balance_web_filter_profile":                             resourceLoadBalanceWebFilterProfile(),
			"fortiadc_load_balance_l2_exception_list_child_member":                 resourceLoadBalanceL2ExceptionListChildMember(),
			"fortiadc_router_static":                                               resourceRouterStatic(),
			"fortiadc_security_ips_profile":                                        resourceSecurityIpsProfile(),
			"fortiadc_load_balance_pool_child_pool_member":                         resourceLoadBalancePoolChildPoolMember(),
			"fortiadc_load_balance_profile_child_client_request_header_insert":     resourceLoadBalanceProfileChildClientRequestHeaderInsert(),
			"fortiadc_load_balance_ippool":                                         resourceLoadBalanceIppool(),
			"fortiadc_system_dns":                                                  resourceSystemDns(),
			"fortiadc_system_dns_vdom":                                             resourceSystemDnsVdom(),
			"fortiadc_firewall_policy":                                             resourceFirewallPolicy(),
			"fortiadc_firewall_policy_child_rule":                                  resourceFirewallPolicyChildRule(),
			"fortiadc_global_dns_server_address_group":                             resourceGlobalDnsServerAddressGroup(),
			"fortiadc_global_dns_server_address_group_child_member":                resourceGlobalDnsServerAddressGroupChildMember(),
			"fortiadc_global_dns_server_general":                                   resourceGlobalDnsServerGeneral(),
			"fortiadc_global_dns_server_policy":                                    resourceGlobalDnsServerPolicy(),
			"fortiadc_global_dns_server_remote_dns_server":                         resourceGlobalDnsServerRemoteDnsServer(),
			"fortiadc_global_dns_server_remote_dns_server_child_member":            resourceGlobalDnsServerRemoteDnsServerChildMember(),
			"fortiadc_global_dns_server_response_rate_limit":                       resourceGlobalDnsServerResponseRateLimit(),
			"fortiadc_global_dns_server_zone":                                      resourceGlobalDnsServerZone(),
			"fortiadc_global_load_balance_data_center":                             resourceGlobalLoadBalanceDataCenter(),
			"fortiadc_global_load_balance_host":                                    resourceGlobalLoadBalanceHost(),
			"fortiadc_global_load_balance_host_child_virtual_server_pool_list":     resourceGlobalLoadBalanceHostChildVirtualServerPoolList(),
			"fortiadc_global_load_balance_servers":                                 resourceGlobalLoadBalanceServers(),
			"fortiadc_global_load_balance_servers_child_virtual_server_list":       resourceGlobalLoadBalanceServersChildVirtualServerList(),
			"fortiadc_global_load_balance_setting":                                 resourceGlobalLoadBalanceSetting(),
			"fortiadc_global_load_balance_virtual_server_pool":                     resourceGlobalLoadBalanceVirtualServerPool(),
			"fortiadc_global_load_balance_virtual_server_pool_child_member":        resourceGlobalLoadBalanceVirtualServerPoolChildMember(),
			"fortiadc_security_waf_exception":                                      resourceSecurityWafException(),
			"fortiadc_security_waf_exception_child_exception_rule":                 resourceSecurityWafExceptionChildExceptionRule(),
			"fortiadc_security_waf_sig_profile_category_id_list_group":             resourceSecurityWafSigProfileCategoryIdListGroup(),
			"fortiadc_security_waf_sig_profile_sub_category_id_list_group":         resourceSecurityWafSigProfileSubCategoryIdListGroup(),
			"fortiadc_security_waf_threshold_based_detection":                      resourceSecurityWafThresholdBasedDetection(),
			"fortiadc_security_waf_url_protection":                                 resourceSecurityWafUrlProtection(),
			"fortiadc_security_waf_url_protection_child_file_extension_rule":       resourceSecurityWafUrlProtectionChildFileExtensionRule(),
			"fortiadc_security_waf_url_protection_child_url_access_rule":           resourceSecurityWafUrlProtectionChildUrlAccessRule(),
			"fortiadc_security_waf_web_attack_signature":                           resourceSecurityWafWebAttackSignature(),
			"fortiadc_security_waf_web_attack_signature_child_category":            resourceSecurityWafWebAttackSignatureChildCategory(),
			"fortiadc_security_waf_web_attack_signature_child_signature":           resourceSecurityWafWebAttackSignatureChildSignature(),
			"fortiadc_security_waf_web_attack_signature_child_sub_category":        resourceSecurityWafWebAttackSignatureChildSubCategory(),
		},

		ConfigureFunc: providerConfigure,
	}
}

func providerConfigure(d *schema.ResourceData) (interface{}, error) {

	// Init client config with the values from TF files
	config := Config{
		Hostname:        d.Get("hostname").(string),
		Token:           d.Get("token").(string),
		CABundle:        d.Get("cabundlefile").(string),
		CABundleContent: d.Get("cabundlecontent").(string),
		Vdom:            d.Get("vdom").(string),
		HTTPProxy:       d.Get("http_proxy").(string),
		HTTPSProxy:      d.Get("https_proxy").(string),
		NOProxy:         d.Get("no_proxy").(string),

		PeerAuth:   d.Get("peerauth").(string),
		CaCert:     d.Get("cacert").(string),
		ClientCert: d.Get("clientcert").(string),
		ClientKey:  d.Get("clientkey").(string),
	}

	v1, ok1 := d.GetOkExists("insecure")
	if ok1 {
		insecure := v1.(bool)
		config.Insecure = &insecure
	}

	// Create Client for later connections
	return config.CreateClient()
}
