From 233a8591f5c53af855e23f2383b207434a24a890 Mon Sep 17 00:00:00 2001 From: jgomezve Date: Tue, 7 Feb 2023 12:40:46 -0500 Subject: [PATCH 1/3] Test --- dcnm/provider.go | 1 + dcnm/resource_dcnm_fabric.go | 870 ++++++++++++++++++ .../dcnm-go-client/models/fabric.go | 456 +++++++++ 3 files changed, 1327 insertions(+) create mode 100644 dcnm/resource_dcnm_fabric.go create mode 100644 vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go diff --git a/dcnm/provider.go b/dcnm/provider.go index 6070556..7e6976c 100644 --- a/dcnm/provider.go +++ b/dcnm/provider.go @@ -75,6 +75,7 @@ func Provider() *schema.Provider { "dcnm_route_peering": resourceRoutePeering(), "dcnm_service_policy": resourceDCNMServicePolicy(), "dcnm_template": resourceDCNMTemplate(), + "dcnm_fabric": resourceDCNMFabric(), }, DataSourcesMap: map[string]*schema.Resource{ diff --git a/dcnm/resource_dcnm_fabric.go b/dcnm/resource_dcnm_fabric.go new file mode 100644 index 0000000..789b89b --- /dev/null +++ b/dcnm/resource_dcnm_fabric.go @@ -0,0 +1,870 @@ +package dcnm + +import ( + "fmt" + "log" + "strconv" + + "github.com/ciscoecosystem/dcnm-go-client/client" + "github.com/ciscoecosystem/dcnm-go-client/container" + "github.com/ciscoecosystem/dcnm-go-client/models" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" +) + +func resourceDCNMFabric() *schema.Resource { + return &schema.Resource{ + Create: resourceDCNMFabricCreate, + Read: resourceDCNMFabricRead, + Update: resourceDCNMFabricUpdate, + Delete: resourceDCNMFabricDelete, + + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + + "name": &schema.Schema{ + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + "fabric_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + + "template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Easy_Fabric", + }, + + "asn": &schema.Schema{ + Type: schema.TypeString, + Required: true, + }, + + "underlay_interface_numbering": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "p2p", + ValidateFunc: validation.StringInSlice([]string{ + "p2p", + "unnumbered", + }, false), + }, + + "underlay_subnet_mask": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "30", + //TODO: Range validation + }, + + "underlay_routing_protocol": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "ospf", + ValidateFunc: validation.StringInSlice([]string{ + "ospf", + "is-is", + }, false), + }, + + "route_reflectors_count": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "2", + ValidateFunc: validation.StringInSlice([]string{ + "2", + "4", + }, false), + }, + + "anycast_mac": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "2020.0000.00aa", + //TODO: Validate MAC + }, + + "replication_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Multicast", + ValidateFunc: validation.StringInSlice([]string{ + "Multicast", + "Ingress", + }, false), + }, + + "multicast_group_subnet": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "239.1.1.0/25", + //TODO: Validate range + }, + + "rendevous_point_count": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "2", + ValidateFunc: validation.StringInSlice([]string{ + "2", + "4", + }, false), + }, + + "rendevous_point_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "asm", + ValidateFunc: validation.StringInSlice([]string{ + "asm", + "bidir", + }, false), + }, + + "rendevous_loopback_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 254, + ValidateFunc: validation.IntBetween(1, 254), + }, + + "vpc_peer_link_vlan": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 3600, + ValidateFunc: validation.IntBetween(2, 4094), + }, + + "vpc_peer_keep_alive_option": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "management", + ValidateFunc: validation.StringInSlice([]string{ + "management", + "loopback", + }, false), + }, + + "vpc_auto_recovery_time": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 360, + ValidateFunc: validation.IntBetween(240, 3600), + }, + + "vpc_delay_restore_time": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 150, + ValidateFunc: validation.IntBetween(1, 3600), + }, + + "underlay_routing_loopback_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 0, + ValidateFunc: validation.IntBetween(0, 1023), + }, + + "underlay_vtep_loopback_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 1, + ValidateFunc: validation.IntBetween(0, 1023), + }, + + "underlay_routing_protocol_tag": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "UNDERLAY", + }, + + "ospf_area_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "0.0.0.0", + }, + + "vrf_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Default_VRF_Universal", + }, + + "network_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Default_Network_Universal", + }, + + "vrf_extension_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Default_VRF_Extension_Universal", + }, + + "network_extension_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Default_Network_Extension_Universal", + }, + + "intra_fabric_interface_mtu": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 9216, + ValidateFunc: validation.IntBetween(576, 9216), + }, + + "layer_2_host_interface_mtu": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 9216, + ValidateFunc: validation.IntBetween(576, 9216), + }, + + "power_supply_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "ps-redundant", + ValidateFunc: validation.StringInSlice([]string{ + "pd-redundant", + "combined", + "insrc-redundant", + }, false), + }, + + "copp_profile": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "strict", + ValidateFunc: validation.StringInSlice([]string{ + "strict", + "dense", + "lenient", + "moderate", + "manual", + }, false), + }, + + "underlay_routing_loopback_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "10.2.0.0/22", + }, + + "underlay_vtep_loopback_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "10.3.0.0/22", + }, + + "underlay_rp_loopback_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "10.254.254.0/24", + }, + + "underlay_subnet_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "10.4.0.0/16", + }, + + "layer_2_vxlan_vni_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "30000-49000", + }, + + "layer_3_vxlan_vni_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "50000-59000", + }, + + "network_vlan_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "2300-2999", + }, + + "vrf_vlan_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "2000-2299", + }, + + "subinterface_dot1q_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "2-511", + }, + + "vrf_lite_deployment": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Manual", + ValidateFunc: validation.StringInSlice([]string{ + "Manual", + "Back2BackOnly", + "ToExternalOnly", + "Back2Back&ToExternal", + }, false), + }, + + "vrf_lite_subnet_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "10.33.0.0/16", + }, + + "vrf_lite_subnet_mask": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Default: 30, + ValidateFunc: validation.IntBetween(8, 31), + }, + + "service_network_vlan_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "3000-3199", + }, + + "route_map_sequence_number_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "1-65534", + }, + }, + } +} + +func getRemoteFabric(client *client.Client, name string) (*container.Container, error) { + durl := fmt.Sprintf("/rest/control/fabrics/%s", name) + + cont, err := client.GetviaURL(durl) + if err != nil { + return nil, err + } + + return cont, nil +} + +func setFabricAttributes(d *schema.ResourceData, cont *container.Container) *schema.ResourceData { + + d.Set("name", stripQuotes(cont.S("fabricName").String())) + d.Set("fabric_id", stripQuotes(cont.S("fabricId").String())) + d.Set("template", stripQuotes(cont.S("templateName").String())) + + cont, err := cleanJsonString(stripQuotes(cont.S("nvPairs").String())) + if err == nil { + if cont.Exists("BGP_AS") { + d.Set("asn", stripQuotes(cont.S("BGP_AS").String())) + } + if cont.Exists("FABRIC_INTERFACE_TYPE") { + d.Set("underlay_interface_numbering", stripQuotes(cont.S("FABRIC_INTERFACE_TYPE").String())) + } + if cont.Exists("SUBNET_TARGET_MASK") { + d.Set("underlay_subnet_mask", stripQuotes(cont.S("SUBNET_TARGET_MASK").String())) + } + if cont.Exists("LINK_STATE_ROUTING") { + d.Set("underlay_routing_protocol", stripQuotes(cont.S("LINK_STATE_ROUTING").String())) + } + if cont.Exists("RR_COUNT") { + d.Set("route_reflectors_count", stripQuotes(cont.S("RR_COUNT").String())) + } + if cont.Exists("ANYCAST_GW_MAC") { + d.Set("anycast_mac", stripQuotes(cont.S("ANYCAST_GW_MAC").String())) + } + if cont.Exists("REPLICATION_MODE") { + d.Set("replication_mode", stripQuotes(cont.S("REPLICATION_MODE").String())) + } + if cont.Exists("MULTICAST_GROUP_SUBNET") { + d.Set("multicast_group_subnet", stripQuotes(cont.S("MULTICAST_GROUP_SUBNET").String())) + } + if cont.Exists("RP_COUNT") { + d.Set("rendevous_point_count", stripQuotes(cont.S("RP_COUNT").String())) + } + if cont.Exists("RP_MODE") { + d.Set("rendevous_point_mode", stripQuotes(cont.S("RP_MODE").String())) + } + if cont.Exists("RP_LB_ID") && stripQuotes(cont.S("RP_LB_ID").String()) != "" { + if rpLbId := stripQuotes(cont.S("RP_LB_ID").String()); err == nil { + rpLbIdInt, _ := strconv.Atoi(rpLbId) + d.Set("rendevous_loopback_id", rpLbIdInt) + } + } + if cont.Exists("VPC_PEER_LINK_VLAN") && stripQuotes(cont.S("VPC_PEER_LINK_VLAN").String()) != "" { + if vpcPeerVlan := stripQuotes(cont.S("VPC_PEER_LINK_VLAN").String()); err == nil { + vpcPeerVlanInt, _ := strconv.Atoi(vpcPeerVlan) + d.Set("vpc_peer_link_vlan", vpcPeerVlanInt) + } + } + if cont.Exists("VPC_PEER_KEEP_ALIVE_OPTION") { + d.Set("vpc_peer_keep_alive_option", stripQuotes(cont.S("VPC_PEER_KEEP_ALIVE_OPTION").String())) + } + if cont.Exists("VPC_AUTO_RECOVERY_TIME") && stripQuotes(cont.S("VPC_AUTO_RECOVERY_TIME").String()) != "" { + if vpcRecoveryTime := stripQuotes(cont.S("VPC_AUTO_RECOVERY_TIME").String()); err == nil { + vpcRecoveryTimeInt, _ := strconv.Atoi(vpcRecoveryTime) + d.Set("vpc_auto_recovery_time", vpcRecoveryTimeInt) + } + } + if cont.Exists("VPC_DELAY_RESTORE") && stripQuotes(cont.S("VPC_DELAY_RESTORE").String()) != "" { + if vpcRestoreTime := stripQuotes(cont.S("VPC_DELAY_RESTORE").String()); err == nil { + vpcRestoreTimeInt, _ := strconv.Atoi(vpcRestoreTime) + d.Set("vpc_delay_restore_time", vpcRestoreTimeInt) + } + } + if cont.Exists("BGP_LB_ID") && stripQuotes(cont.S("BGP_LB_ID").String()) != "" { + if bgpLbId := stripQuotes(cont.S("BGP_LB_ID").String()); err == nil { + bgpLbIdInt, _ := strconv.Atoi(bgpLbId) + d.Set("underlay_routing_loopback_id", bgpLbIdInt) + } + } + if cont.Exists("NVE_LB_ID") && stripQuotes(cont.S("NVE_LB_ID").String()) != "" { + if nveLbId := stripQuotes(cont.S("NVE_LB_ID").String()); err == nil { + nveLbIdInt, _ := strconv.Atoi(nveLbId) + d.Set("underlay_vtep_loopback_id", nveLbIdInt) + } + } + if cont.Exists("LINK_STATE_ROUTING_TAG") { + d.Set("underlay_routing_protocol_tag", stripQuotes(cont.S("LINK_STATE_ROUTING_TAG").String())) + } + if cont.Exists("OSPF_AREA_ID") { + d.Set("ospf_area_id", stripQuotes(cont.S("OSPF_AREA_ID").String())) + } + if cont.Exists("default_vrf") { + d.Set("vrf_template", stripQuotes(cont.S("default_vrf").String())) + } + if cont.Exists("default_network") { + d.Set("network_template", stripQuotes(cont.S("default_network").String())) + } + if cont.Exists("vrf_extension_template") { + d.Set("vrf_extension_template", stripQuotes(cont.S("vrf_extension_template").String())) + } + if cont.Exists("network_extension_template") { + d.Set("network_extension_template", stripQuotes(cont.S("network_extension_template").String())) + } + if cont.Exists("FABRIC_MTU") && stripQuotes(cont.S("FABRIC_MTU").String()) != "" { + if fabricMtu := stripQuotes(cont.S("FABRIC_MTU").String()); err == nil { + fabricMtuInt, _ := strconv.Atoi(fabricMtu) + d.Set("intra_fabric_interface_mtu", fabricMtuInt) + } + } + if cont.Exists("L2_HOST_INTF_MTU") && stripQuotes(cont.S("L2_HOST_INTF_MTU").String()) != "" { + if hostMtu := stripQuotes(cont.S("L2_HOST_INTF_MTU").String()); err == nil { + hostMtuInt, _ := strconv.Atoi(hostMtu) + d.Set("layer_2_host_interface_mtu", hostMtuInt) + } + } + if cont.Exists("POWER_REDUNDANCY_MODE") { + d.Set("power_supply_mode", stripQuotes(cont.S("POWER_REDUNDANCY_MODE").String())) + } + if cont.Exists("COPP_POLICY") { + d.Set("copp_profile", stripQuotes(cont.S("COPP_POLICY").String())) + } + if cont.Exists("LOOPBACK0_IP_RANGE") { + d.Set("underlay_routing_loopback_ip_range", stripQuotes(cont.S("LOOPBACK0_IP_RANGE").String())) + } + if cont.Exists("LOOPBACK1_IP_RANGE") { + d.Set("underlay_vtep_loopback_ip_range", stripQuotes(cont.S("LOOPBACK1_IP_RANGE").String())) + } + if cont.Exists("RP_MODANYCAST_RP_IP_RANGEE") { + d.Set("underlay_rp_loopback_ip_range", stripQuotes(cont.S("ANYCAST_RP_IP_RANGE").String())) + } + if cont.Exists("SUBNET_RANGE") { + d.Set("underlay_subnet_ip_range", stripQuotes(cont.S("SUBNET_RANGE").String())) + } + if cont.Exists("L2_SEGMENT_ID_RANGE") { + d.Set("layer_2_vxlan_vni_range", stripQuotes(cont.S("L2_SEGMENT_ID_RANGE").String())) + } + if cont.Exists("L3_PARTITION_ID_RANGE") { + d.Set("layer_3_vxlan_vni_range", stripQuotes(cont.S("L3_PARTITION_ID_RANGE").String())) + } + if cont.Exists("NETWORK_VLAN_RANGE") { + d.Set("network_vlan_range", stripQuotes(cont.S("NETWORK_VLAN_RANGE").String())) + } + if cont.Exists("VRF_VLAN_RANGE") { + d.Set("vrf_vlan_range", stripQuotes(cont.S("VRF_VLAN_RANGE").String())) + } + if cont.Exists("SUBINTERFACE_RANGE") { + d.Set("subinterface_dot1q_range", stripQuotes(cont.S("SUBINTERFACE_RANGE").String())) + } + if cont.Exists("VRF_LITE_AUTOCONFIG") { + d.Set("vrf_lite_deployment", stripQuotes(cont.S("VRF_LITE_AUTOCONFIG").String())) + } + if cont.Exists("DCI_SUBNET_RANGE") { + d.Set("vrf_lite_subnet_ip_range", stripQuotes(cont.S("DCI_SUBNET_RANGE").String())) + } + if cont.Exists("DCI_SUBNET_TARGET_MASK") && stripQuotes(cont.S("DCI_SUBNET_TARGET_MASK").String()) != "" { + if vrfLiteSubnetMask := stripQuotes(cont.S("DCI_SUBNET_TARGET_MASK").String()); err == nil { + vrfLiteSubnetMaskInt, _ := strconv.Atoi(vrfLiteSubnetMask) + d.Set("vrf_lite_subnet_mask", vrfLiteSubnetMaskInt) + } + } + if cont.Exists("SERVICE_NETWORK_VLAN_RANGE") { + d.Set("service_network_vlan_range", stripQuotes(cont.S("SERVICE_NETWORK_VLAN_RANGE").String())) + } + if cont.Exists("ROUTE_MAP_SEQUENCE_NUMBER_RANGE") { + d.Set("route_map_sequence_number_range", stripQuotes(cont.S("ROUTE_MAP_SEQUENCE_NUMBER_RANGE").String())) + } + } + + d.Set("id", stripQuotes(cont.S("id").String())) + return d +} + +func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { + log.Println("[DEBUG] Begining Create method ") + + dcnmClient := m.(*client.Client) + + fabric := models.Fabric{} + fabric.Name = d.Get("name").(string) + fabric.Template = d.Get("template").(string) + + configMap := models.FabricConfig{} + + if asn, ok := d.GetOk("asn"); ok { + configMap.Asn = asn.(string) + } + if underlayRoutingNumbering, ok := d.GetOk("underlay_interface_numbering"); ok { + configMap.UnderlayInterfaceNumbering = underlayRoutingNumbering.(string) + } + if underlaySubnetMask, ok := d.GetOk("underlay_subnet_mask"); ok { + configMap.UnderlaySubnetMask = underlaySubnetMask.(string) + } + if uderlayRoutingProtocol, ok := d.GetOk("underlay_routing_protocol"); ok { + configMap.UnderlayRoutingProcotol = uderlayRoutingProtocol.(string) + } + if rrCount, ok := d.GetOk("route_reflectors_count"); ok { + configMap.RouteReflectorCount = rrCount.(string) + } + if anycastMac, ok := d.GetOk("anycast_mac"); ok { + configMap.AnycastMac = anycastMac.(string) + } + if replicationMode, ok := d.GetOk("replication_mode"); ok { + configMap.ReplicationMode = replicationMode.(string) + } + if multicastGroupSubnet, ok := d.GetOk("multicast_group_subnet"); ok { + configMap.MulticastGroupSubnet = multicastGroupSubnet.(string) + } + if rpCount, ok := d.GetOk("rendevous_point_count"); ok { + configMap.RendevouzPointCount = rpCount.(string) + } + if rpMode, ok := d.GetOk("rendevous_point_mode"); ok { + configMap.RendevouzPointMode = rpMode.(string) + } + if rpId, ok := d.GetOk("rendevous_loopback_id"); ok { + configMap.RendevouzPointLoopbackId = strconv.Itoa(rpId.(int)) + } + if vpcPlVlan, ok := d.GetOk("vpc_peer_link_vlan"); ok { + configMap.VpcPeerLinkVlan = strconv.Itoa(vpcPlVlan.(int)) + } + if vpcPkaOption, ok := d.GetOk("vpc_peer_keep_alive_option"); ok { + configMap.VpcPeerKeepAliveOption = vpcPkaOption.(string) + } + if vpcAutoRectime, ok := d.GetOk("vpc_auto_recovery_time"); ok { + configMap.VpcAutoRecoveryTime = strconv.Itoa(vpcAutoRectime.(int)) + } + if vpcDelayResTime, ok := d.GetOk("vpc_delay_restore_time"); ok { + configMap.VpcDelayRestore = strconv.Itoa(vpcDelayResTime.(int)) + } + if rtLooId, ok := d.GetOk("underlay_routing_loopback_id"); ok { + configMap.UnderlayRoutingLoopbackId = strconv.Itoa(rtLooId.(int)) + } else { + configMap.UnderlayRoutingLoopbackId = "0" + } + if vtepLooId, ok := d.GetOk("underlay_vtep_loopback_id"); ok { + configMap.UnderlayVtepLoopbackId = strconv.Itoa(vtepLooId.(int)) + } + if rtProtoTag, ok := d.GetOk("underlay_routing_protocol_tag"); ok { + configMap.UnderlayRoutingProtocolTag = rtProtoTag.(string) + } + if ospfAreaId, ok := d.GetOk("ospf_area_id"); ok { + configMap.OspfAreaId = ospfAreaId.(string) + } + if vrfTemp, ok := d.GetOk("vrf_template"); ok { + configMap.VrfTemplate = vrfTemp.(string) + } + if netTemp, ok := d.GetOk("network_template"); ok { + configMap.NetworkTemplate = netTemp.(string) + } + if vrfExtTemp, ok := d.GetOk("vrf_extension_template"); ok { + configMap.VrfExtensionTemplate = vrfExtTemp.(string) + } + if netExtTemp, ok := d.GetOk("network_extension_template"); ok { + configMap.NetworkExtensionTemplate = netExtTemp.(string) + } + if fabMtu, ok := d.GetOk("intra_fabric_interface_mtu"); ok { + configMap.IntraFabricInterfaceMtu = strconv.Itoa(fabMtu.(int)) + } + if hostMtu, ok := d.GetOk("layer_2_host_interface_mtu"); ok { + configMap.Layer2HostInterfaceMtu = strconv.Itoa(hostMtu.(int)) + } + if psMode, ok := d.GetOk("power_supply_mode"); ok { + configMap.PowerSupplyMode = psMode.(string) + } + if coppProf, ok := d.GetOk("copp_profile"); ok { + configMap.CoppProfile = coppProf.(string) + } + if rtLooIpRange, ok := d.GetOk("underlay_routing_loopback_ip_range"); ok { + configMap.UnderlayRoutingLoopbackIpRange = rtLooIpRange.(string) + } + if vtepLooIpRange, ok := d.GetOk("underlay_vtep_loopback_ip_range"); ok { + configMap.UnderlayVtepLoopbackIpRange = vtepLooIpRange.(string) + } + if rpLooIpRange, ok := d.GetOk("underlay_rp_loopback_ip_range"); ok { + configMap.UnderlayRpLoopbackIpRange = rpLooIpRange.(string) + } + if subIpRange, ok := d.GetOk("underlay_subnet_ip_range"); ok { + configMap.UnderlaySubnetIpRange = subIpRange.(string) + } + if l2VniRange, ok := d.GetOk("layer_2_vxlan_vni_range"); ok { + configMap.Layer2VxlanVniRange = l2VniRange.(string) + } + if l3VniRange, ok := d.GetOk("layer_3_vxlan_vni_range"); ok { + configMap.Layer3VxlanVniRange = l3VniRange.(string) + } + if netVlanRange, ok := d.GetOk("network_vlan_range"); ok { + configMap.NetworkVlanRange = netVlanRange.(string) + } + if vrfVlanRange, ok := d.GetOk("vrf_vlan_range"); ok { + configMap.VrfVlanRange = vrfVlanRange.(string) + } + if vrfLiteDeployment, ok := d.GetOk("vrf_lite_deployment"); ok { + configMap.VrfLiteDeployment = vrfLiteDeployment.(string) + } + if subIfDot1qRange, ok := d.GetOk("subinterface_dot1q_range"); ok { + configMap.SubinterfaceDot1qRange = subIfDot1qRange.(string) + } + if vrfLifeSubnetIpRange, ok := d.GetOk("vrf_lite_subnet_ip_range"); ok { + configMap.VrfLiteSubnetIpRange = vrfLifeSubnetIpRange.(string) + } + if vrfLiteSubnetMask, ok := d.GetOk("vrf_lite_subnet_mask"); ok { + configMap.VrfLiteSubnetMask = strconv.Itoa(vrfLiteSubnetMask.(int)) + } + if svcNetVlanRange, ok := d.GetOk("service_network_vlan_range"); ok { + configMap.ServiceNetworkVlanRange = svcNetVlanRange.(string) + } + if rmSeqRange, ok := d.GetOk("route_map_sequence_number_range"); ok { + configMap.RouteMapSequenceNumberRange = rmSeqRange.(string) + } + + configMap.FabricTemplate = fabric.Template + configMap.FabricName = fabric.Name + fabric.Config = configMap + fabric.SetConfigDefaults() + + durl := "/rest/control/fabrics" + cont, err := dcnmClient.Save(durl, &fabric) + if err != nil { + return err + } + + d.SetId(stripQuotes(cont.S("id").String())) + + log.Println("[DEBUG] End of Create method ", d.Id()) + return resourceDCNMFabricRead(d, m) +} + +func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { + log.Println("[DEBUG] Begining Update method ") + + dcnmClient := m.(*client.Client) + + fabric := models.Fabric{} + fabric.Name = d.Get("name").(string) + fabric.Template = d.Get("template").(string) + fabric.FabricId = d.Get("fabric_id").(string) + + configMap := models.FabricConfig{} + + if asn, ok := d.GetOk("asn"); ok { + configMap.Asn = asn.(string) + } + if underlayRoutingNumbering, ok := d.GetOk("underlay_interface_numbering"); ok { + configMap.UnderlayInterfaceNumbering = underlayRoutingNumbering.(string) + } + if underlaySubnetMask, ok := d.GetOk("underlay_subnet_mask"); ok { + configMap.UnderlaySubnetMask = underlaySubnetMask.(string) + } + if uderlayRoutingProtocol, ok := d.GetOk("underlay_routing_protocol"); ok { + configMap.UnderlayRoutingProcotol = uderlayRoutingProtocol.(string) + } + if rrCount, ok := d.GetOk("route_reflectors_count"); ok { + configMap.RouteReflectorCount = rrCount.(string) + } + if anycastMac, ok := d.GetOk("anycast_mac"); ok { + configMap.AnycastMac = anycastMac.(string) + } + if replicationMode, ok := d.GetOk("replication_mode"); ok { + configMap.ReplicationMode = replicationMode.(string) + } + if multicastGroupSubnet, ok := d.GetOk("multicast_group_subnet"); ok { + configMap.MulticastGroupSubnet = multicastGroupSubnet.(string) + } + if rpCount, ok := d.GetOk("rendevous_point_count"); ok { + configMap.RendevouzPointCount = rpCount.(string) + } + if rpMode, ok := d.GetOk("rendevous_point_mode"); ok { + configMap.RendevouzPointMode = rpMode.(string) + } + if rpId, ok := d.GetOk("rendevous_loopback_id"); ok { + configMap.RendevouzPointLoopbackId = strconv.Itoa(rpId.(int)) + } + if vpcPlVlan, ok := d.GetOk("vpc_peer_link_vlan"); ok { + configMap.VpcPeerLinkVlan = strconv.Itoa(vpcPlVlan.(int)) + } + if vpcPkaOption, ok := d.GetOk("vpc_peer_keep_alive_option"); ok { + configMap.VpcPeerKeepAliveOption = vpcPkaOption.(string) + } + if vpcAutoRectime, ok := d.GetOk("vpc_auto_recovery_time"); ok { + configMap.VpcAutoRecoveryTime = strconv.Itoa(vpcAutoRectime.(int)) + } + if vpcDelayResTime, ok := d.GetOk("vpc_delay_restore_time"); ok { + configMap.VpcDelayRestore = strconv.Itoa(vpcDelayResTime.(int)) + } + if rtLooId, ok := d.GetOk("underlay_routing_loopback_id"); ok { + configMap.UnderlayRoutingLoopbackId = strconv.Itoa(rtLooId.(int)) + } else { + configMap.UnderlayRoutingLoopbackId = "0" + } + if vtepLooId, ok := d.GetOk("underlay_vtep_loopback_id"); ok { + configMap.UnderlayVtepLoopbackId = strconv.Itoa(vtepLooId.(int)) + } + if rtProtoTag, ok := d.GetOk("underlay_routing_protocol_tag"); ok { + configMap.UnderlayRoutingProtocolTag = rtProtoTag.(string) + } + if ospfAreaId, ok := d.GetOk("ospf_area_id"); ok { + configMap.OspfAreaId = ospfAreaId.(string) + } + if vrfTemp, ok := d.GetOk("vrf_template"); ok { + configMap.VrfTemplate = vrfTemp.(string) + } + if netTemp, ok := d.GetOk("network_template"); ok { + configMap.NetworkTemplate = netTemp.(string) + } + if vrfExtTemp, ok := d.GetOk("vrf_extension_template"); ok { + configMap.VrfExtensionTemplate = vrfExtTemp.(string) + } + if netExtTemp, ok := d.GetOk("network_extension_template"); ok { + configMap.NetworkExtensionTemplate = netExtTemp.(string) + } + if fabMtu, ok := d.GetOk("intra_fabric_interface_mtu"); ok { + configMap.IntraFabricInterfaceMtu = strconv.Itoa(fabMtu.(int)) + } + if hostMtu, ok := d.GetOk("layer_2_host_interface_mtu"); ok { + configMap.Layer2HostInterfaceMtu = strconv.Itoa(hostMtu.(int)) + } + if psMode, ok := d.GetOk("power_supply_mode"); ok { + configMap.PowerSupplyMode = psMode.(string) + } + if coppProf, ok := d.GetOk("copp_profile"); ok { + configMap.CoppProfile = coppProf.(string) + } + if rtLooIpRange, ok := d.GetOk("underlay_routing_loopback_ip_range"); ok { + configMap.UnderlayRoutingLoopbackIpRange = rtLooIpRange.(string) + } + if vtepLooIpRange, ok := d.GetOk("underlay_vtep_loopback_ip_range"); ok { + configMap.UnderlayVtepLoopbackIpRange = vtepLooIpRange.(string) + } + if rpLooIpRange, ok := d.GetOk("underlay_rp_loopback_ip_range"); ok { + configMap.UnderlayRpLoopbackIpRange = rpLooIpRange.(string) + } + if subIpRange, ok := d.GetOk("underlay_subnet_ip_range"); ok { + configMap.UnderlaySubnetIpRange = subIpRange.(string) + } + if l2VniRange, ok := d.GetOk("layer_2_vxlan_vni_range"); ok { + configMap.Layer2VxlanVniRange = l2VniRange.(string) + } + if l3VniRange, ok := d.GetOk("layer_3_vxlan_vni_range"); ok { + configMap.Layer3VxlanVniRange = l3VniRange.(string) + } + if netVlanRange, ok := d.GetOk("network_vlan_range"); ok { + configMap.NetworkVlanRange = netVlanRange.(string) + } + if vrfVlanRange, ok := d.GetOk("vrf_vlan_range"); ok { + configMap.VrfVlanRange = vrfVlanRange.(string) + } + if subIfDot1qRange, ok := d.GetOk("subinterface_dot1q_range"); ok { + configMap.SubinterfaceDot1qRange = subIfDot1qRange.(string) + } + if vrfLiteDeployment, ok := d.GetOk("vrf_lite_deployment"); ok { + configMap.VrfLiteDeployment = vrfLiteDeployment.(string) + } + if vrfLifeSubnetIpRange, ok := d.GetOk("vrf_lite_subnet_ip_range"); ok { + configMap.VrfLiteSubnetIpRange = vrfLifeSubnetIpRange.(string) + } + if vrfLiteSubnetMask, ok := d.GetOk("vrf_lite_subnet_mask"); ok { + configMap.VrfLiteSubnetMask = strconv.Itoa(vrfLiteSubnetMask.(int)) + } + if svcNetVlanRange, ok := d.GetOk("service_network_vlan_range"); ok { + configMap.ServiceNetworkVlanRange = svcNetVlanRange.(string) + } + if rmSeqRange, ok := d.GetOk("route_map_sequence_number_range"); ok { + configMap.RouteMapSequenceNumberRange = rmSeqRange.(string) + } + + configMap.FabricTemplate = fabric.Template + configMap.FabricName = fabric.Name + fabric.Config = configMap + idInt, _ := strconv.Atoi(d.Id()) + fabric.Id = idInt + fabric.SetConfigDefaults() + + dn := fabric.Name + durl := fmt.Sprintf("/rest/control/fabrics/%s", dn) + cont, err := dcnmClient.Update(durl, &fabric) + if err != nil { + return err + } + + d.SetId(stripQuotes(cont.S("id").String())) + log.Println("[DEBUG] End of Update method ", d.Id()) + return resourceDCNMFabricRead(d, m) +} + +func resourceDCNMFabricRead(d *schema.ResourceData, m interface{}) error { + log.Println("[DEBUG] Begining Read method ", d.Id()) + + dcnmClient := m.(*client.Client) + + dn := d.Get("name").(string) + + cont, err := getRemoteFabric(dcnmClient, dn) + if err != nil { + return err + } + + setFabricAttributes(d, cont) + + log.Println("[DEBUG] End of Read method ", d.Id()) + return nil +} + +func resourceDCNMFabricDelete(d *schema.ResourceData, m interface{}) error { + log.Println("[DEBUG] Begining Delete method ", d.Id()) + dcnmClient := m.(*client.Client) + + dn := d.Get("name").(string) + + durl := fmt.Sprintf("/rest/control/fabrics/%s", dn) + _, err := dcnmClient.Delete(durl) + if err != nil { + return err + } + + d.SetId("") + log.Println("[DEBUG] End of Delete method ", d.Id()) + return nil +} diff --git a/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go b/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go new file mode 100644 index 0000000..497f048 --- /dev/null +++ b/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go @@ -0,0 +1,456 @@ +package models + +type Fabric struct { + Id int `json:",omitempty"` + Name string `json:",omitempty"` + FabricId string `json:",omitempty"` + Template string `json:",omitempty"` + Config FabricConfig `json:",omitempty"` +} + +type FabricConfig struct { + Asn string `json:"BGP_AS"` + UnderlayInterfaceNumbering string `json:"FABRIC_INTERFACE_TYPE"` + UnderlaySubnetMask string `json:"SUBNET_TARGET_MASK"` + UnderlayRoutingProcotol string `json:"LINK_STATE_ROUTING"` + RouteReflectorCount string `json:"RR_COUNT"` + AnycastMac string `json:"ANYCAST_GW_MAC"` + ReplicationMode string `json:"REPLICATION_MODE"` + MulticastGroupSubnet string `json:"MULTICAST_GROUP_SUBNET"` + RendevouzPointCount string `json:"RP_COUNT"` + RendevouzPointMode string `json:"RP_MODE"` + RendevouzPointLoopbackId string `json:"RP_LB_ID"` + VpcPeerLinkVlan string `json:"VPC_PEER_LINK_VLAN"` + VpcPeerKeepAliveOption string `json:"VPC_PEER_KEEP_ALIVE_OPTION"` + VpcAutoRecoveryTime string `json:"VPC_AUTO_RECOVERY_TIME"` + VpcDelayRestore string `json:"VPC_DELAY_RESTORE"` + VpcDelayRestoretime string `json:"VPC_DELAY_RESTORE_TIME"` + UnderlayRoutingLoopbackId string `json:"BGP_LB_ID"` + UnderlayVtepLoopbackId string `json:"NVE_LB_ID"` + UnderlayRoutingProtocolTag string `json:"LINK_STATE_ROUTING_TAG"` + OspfAreaId string `json:"OSPF_AREA_ID"` + VrfTemplate string `json:"default_vrf"` + NetworkTemplate string `json:"default_network"` + VrfExtensionTemplate string `json:"vrf_extension_template"` + NetworkExtensionTemplate string `json:"network_extension_template"` + IntraFabricInterfaceMtu string `json:"FABRIC_MTU"` + Layer2HostInterfaceMtu string `json:"L2_HOST_INTF_MTU"` + PowerSupplyMode string `json:"POWER_REDUNDANCY_MODE"` + CoppProfile string `json:"COPP_POLICY"` + UnderlayRoutingLoopbackIpRange string `json:"LOOPBACK0_IP_RANGE"` + UnderlayVtepLoopbackIpRange string `json:"LOOPBACK1_IP_RANGE"` + UnderlayRpLoopbackIpRange string `json:"ANYCAST_RP_IP_RANGE"` + UnderlaySubnetIpRange string `json:"SUBNET_RANGE"` + Layer2VxlanVniRange string `json:"L2_SEGMENT_ID_RANGE"` + Layer3VxlanVniRange string `json:"L3_PARTITION_ID_RANGE"` + NetworkVlanRange string `json:"NETWORK_VLAN_RANGE"` + VrfVlanRange string `json:"VRF_VLAN_RANGE"` + SubinterfaceDot1qRange string `json:"SUBINTERFACE_RANGE"` + VrfLiteDeployment string `json:"VRF_LITE_AUTOCONFIG"` + VrfLiteSubnetIpRange string `json:"DCI_SUBNET_RANGE"` + VrfLiteSubnetMask string `json:"DCI_SUBNET_TARGET_MASK"` + ServiceNetworkVlanRange string `json:"SERVICE_NETWORK_VLAN_RANGE"` + RouteMapSequenceNumberRange string `json:"ROUTE_MAP_SEQUENCE_NUMBER_RANGE"` + // Properties not exposed in the Terraform Resource + MsoSiteId string `json:"MSO_SITE_ID"` + PhantomRpLbId1 string `json:"PHANTOM_RP_LB_ID1"` + PhantomRpLbId2 string `json:"PHANTOM_RP_LB_ID2"` + PhantomRpLbId3 string `json:"PHANTOM_RP_LB_ID3"` + IbgpPeerTemplate string `json:"IBGP_PEER_TEMPLATE"` + PhantomRpLbId4 string `json:"PHANTOM_RP_LB_ID4"` + AbstractOspf string `json:"abstract_ospf"` + FeaturePtp string `json:"FEATURE_PTP"` + DhcpStartInternal string `json:"DHCP_START_INTERNAL"` + SspineCount string `json:"SSPINE_COUNT"` + AdvertisePipBgp string `json:"ADVERTISE_PIP_BGP"` + FabricVpcQosPolicyName string `json:"FABRIC_VPC_QOS_POLICY_NAME"` + BfdPimEnable bool `json:"BFD_PIM_ENABLE"` + DhcpEnd string `json:"DHCP_END"` + UnderlayIsV6 string `json:"UNDERLAY_IS_V6"` + FabricVpcDomainId string `json:"FABRIC_VPC_DOMAIN_ID"` + SeedSwitchCoreInterfaces string `json:"SEED_SWITCH_CORE_INTERFACES"` + FabricMtuPrev string `json:"FABRIC_MTU_PREV"` + BfdIsisEnable bool `json:"BFD_ISIS_ENABLE"` + HdTime string `json:"HD_TIME"` + OspfAuthEnable string `json:"OSPF_AUTH_ENABLE"` + Loopback1Ipv6Range string `json:"LOOPBACK1_IPV6_RANGE"` + RouterIdRange string `json:"ROUTER_ID_RANGE"` + MsoConnectivityDeployed string `json:"MSO_CONNECTIVITY_DEPLOYED"` + EnableMacsec string `json:"ENABLE_MACSEC"` + DeafultQueuingPolicyOther string `json:"DEAFULT_QUEUING_POLICY_OTHER"` + UnnumDhcpStartInternal string `json:"UNNUM_DHCP_START_INTERNAL"` + MacsecReportTimer string `json:"MACSEC_REPORT_TIMER"` + PremsoParentFabric string `json:"PREMSO_PARENT_FABRIC"` + UnnumDhcpEndInternal string `json:"UNNUM_DHCP_END_INTERNAL"` + PtpDomainId string `json:"PTP_DOMAIN_ID"` + AutoSymmetricVrfLite bool `json:"AUTO_SYMMETRIC_VRF_LITE"` + UseLinkLocal bool `json:"USE_LINK_LOCAL"` + BgpAsPrev string `json:"BGP_AS_PREV"` + EnablePbr string `json:"ENABLE_PBR"` + VpcPeerLinkPo string `json:"VPC_PEER_LINK_PO"` + IsisAuthEnable bool `json:"ISIS_AUTH_ENABLE"` + VpcEnableIpv6NdSync string `json:"VPC_ENABLE_IPv6_ND_SYNC"` + AbstractIsisInterface string `json:"abstract_isis_interface"` + TcamAllocation string `json:"TCAM_ALLOCATION"` + MacsecAlgorithm string `json:"MACSEC_ALGORITHM"` + IsisLevel string `json:"ISIS_LEVEL"` + AbstractAnycastRp string `json:"abstract_anycast_rp"` + EnableNetflow string `json:"ENABLE_NETFLOW"` + DeafultQueuingPolicyRSeries string `json:"DEAFULT_QUEUING_POLICY_R_SERIES"` + TempVpcPeerLink string `json:"temp_vpc_peer_link"` + BrownfieldNetworkNameFormat string `json:"BROWNFIELD_NETWORK_NAME_FORMAT"` + EnableFabricVpcDomainId string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID"` + IbgpPeerTemplateLeaf string `json:"IBGP_PEER_TEMPLATE_LEAF"` + MgmtGwInternal string `json:"MGMT_GW_INTERNAL"` + EnableNxapi string `json:"ENABLE_NXAPI"` + GrfieldDebugFlag string `json:"GRFIELD_DEBUG_FLAG"` + IsisAuthKeychainName string `json:"ISIS_AUTH_KEYCHAIN_NAME"` + AbstractBgpNeighbor string `json:"abstract_bgp_neighbor"` + OspfAuthKeyId string `json:"OSPF_AUTH_KEY_ID"` + PimHelloAuthEnable string `json:"PIM_HELLO_AUTH_ENABLE"` + AbstractFeatureLeaf string `json:"abstract_feature_leaf"` + BfdAuthEnable bool `json:"BFD_AUTH_ENABLE"` + ExtraConfTor string `json:"EXTRA_CONF_TOR"` + AaaServerConf string `json:"AAA_SERVER_CONF"` + Enablerealtimebackup string `json:"enableRealTimeBackup"` + StrictCcMode string `json:"STRICT_CC_MODE"` + V6SubnetTargetMask string `json:"V6_SUBNET_TARGET_MASK"` + AbstractTrunkHost string `json:"abstract_trunk_host"` + MstInstanceRange string `json:"MST_INSTANCE_RANGE"` + BgpAuthEnable string `json:"BGP_AUTH_ENABLE"` + PmEnablePrev string `json:"PM_ENABLE_PREV"` + Enablescheduledbackup string `json:"enableScheduledBackup"` + AbstractOspfInterface string `json:"abstract_ospf_interface"` + BfdOspfEnable bool `json:"BFD_OSPF_ENABLE"` + MacsecFallbackAlgorithm string `json:"MACSEC_FALLBACK_ALGORITHM"` + UnnumDhcpEnd string `json:"UNNUM_DHCP_END"` + EnableAaa bool `json:"ENABLE_AAA"` + DeploymentFreeze string `json:"DEPLOYMENT_FREEZE"` + L2HostIntfMtuPrev string `json:"L2_HOST_INTF_MTU_PREV"` + NetflowMonitorList string `json:"NETFLOW_MONITOR_LIST"` + EnableAgent string `json:"ENABLE_AGENT"` + NtpServerIpList string `json:"NTP_SERVER_IP_LIST"` + OverlayMode string `json:"OVERLAY_MODE"` + MacsecFallbackKeyString string `json:"MACSEC_FALLBACK_KEY_STRING"` + StpRootOption string `json:"STP_ROOT_OPTION"` + IsisOverloadEnable bool `json:"ISIS_OVERLOAD_ENABLE"` + NetflowRecordList string `json:"NETFLOW_RECORD_LIST"` + SpineCount string `json:"SPINE_COUNT"` + AbstractExtraConfigBootstrap string `json:"abstract_extra_config_bootstrap"` + MplsLoopbackIpRange string `json:"MPLS_LOOPBACK_IP_RANGE"` + LinkStateRoutingTagPrev string `json:"LINK_STATE_ROUTING_TAG_PREV"` + DhcpEnable bool `json:"DHCP_ENABLE"` + BfdAuthKeyId string `json:"BFD_AUTH_KEY_ID"` + MsoSiteGroupName string `json:"MSO_SITE_GROUP_NAME"` + MgmtPrefixInternal string `json:"MGMT_PREFIX_INTERNAL"` + DhcpIpv6EnableInternal string `json:"DHCP_IPV6_ENABLE_INTERNAL"` + BgpAuthKeyType string `json:"BGP_AUTH_KEY_TYPE"` + TempAnycastGateway string `json:"temp_anycast_gateway"` + BrfieldDebugFlag string `json:"BRFIELD_DEBUG_FLAG"` + BootstrapMultisubnet string `json:"BOOTSTRAP_MULTISUBNET"` + IsisP2PEnable bool `json:"ISIS_P2P_ENABLE"` + EnableNgoam string `json:"ENABLE_NGOAM"` + CdpEnable string `json:"CDP_ENABLE"` + PtpLbId string `json:"PTP_LB_ID"` + DhcpIpv6Enable string `json:"DHCP_IPV6_ENABLE"` + MacsecKeyString string `json:"MACSEC_KEY_STRING"` + OspfAuthKey string `json:"OSPF_AUTH_KEY"` + EnableFabricVpcDomainIdPrev string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID_PREV"` + ExtraConfLeaf string `json:"EXTRA_CONF_LEAF"` + DhcpStart string `json:"DHCP_START"` + EnableTrm string `json:"ENABLE_TRM"` + FeaturePtpInternal string `json:"FEATURE_PTP_INTERNAL"` + EnableNxapiHttp string `json:"ENABLE_NXAPI_HTTP"` + AbstractIsis string `json:"abstract_isis"` + MplsLbId string `json:"MPLS_LB_ID"` + FabricVpcDomainIdPrev string `json:"FABRIC_VPC_DOMAIN_ID_PREV"` + StaticUnderlayIpAlloc string `json:"STATIC_UNDERLAY_IP_ALLOC"` + MgmtV6PrefixInternal string `json:"MGMT_V6PREFIX_INTERNAL"` + MplsHandoff string `json:"MPLS_HANDOFF"` + StpBridgePriority string `json:"STP_BRIDGE_PRIORITY"` + Scheduledtime string `json:"scheduledTime"` + MacsecCipherSuite string `json:"MACSEC_CIPHER_SUITE"` + StpVlanRange string `json:"STP_VLAN_RANGE"` + AnycastLbId string `json:"ANYCAST_LB_ID"` + MsoControlerId string `json:"MSO_CONTROLER_ID"` + BfdEnable string `json:"BFD_ENABLE"` + AbstractExtraConfigLeaf string `json:"abstract_extra_config_leaf"` + AbstractDhcp string `json:"abstract_dhcp"` + ExtraConfSpine string `json:"EXTRA_CONF_SPINE"` + NtpServerVrf string `json:"NTP_SERVER_VRF"` + SpineSwitchCoreInterfaces string `json:"SPINE_SWITCH_CORE_INTERFACES"` + IsisOverloadElapseTime string `json:"ISIS_OVERLOAD_ELAPSE_TIME"` + BootstrapConf string `json:"BOOTSTRAP_CONF"` + IsisAuthKey string `json:"ISIS_AUTH_KEY"` + DnsServerIpList string `json:"DNS_SERVER_IP_LIST"` + DnsServerVrf string `json:"DNS_SERVER_VRF"` + EnableEvpn string `json:"ENABLE_EVPN"` + AbstractMulticast string `json:"abstract_multicast"` + BfdAuthKey string `json:"BFD_AUTH_KEY"` + AgentIntf string `json:"AGENT_INTF"` + L3VniMcastGroup string `json:"L3VNI_MCAST_GROUP"` + UnnumBootstrapLbId string `json:"UNNUM_BOOTSTRAP_LB_ID"` + VpcDomainIdRange string `json:"VPC_DOMAIN_ID_RANGE"` + HostIntfAdminState string `json:"HOST_INTF_ADMIN_STATE"` + BfdIbgpEnable bool `json:"BFD_IBGP_ENABLE"` + SyslogSev string `json:"SYSLOG_SEV"` + AbstractLoopbackInterface string `json:"abstract_loopback_interface"` + SyslogServerVrf string `json:"SYSLOG_SERVER_VRF"` + ExtraConfIntraLinks string `json:"EXTRA_CONF_INTRA_LINKS"` + SnmpServerHostTrap string `json:"SNMP_SERVER_HOST_TRAP"` + AbstractExtraConfigSpine string `json:"abstract_extra_config_spine"` + PimHelloAuthKey string `json:"PIM_HELLO_AUTH_KEY"` + TempVpcDomainMgmt string `json:"temp_vpc_domain_mgmt"` + V6SubnetRange string `json:"V6_SUBNET_RANGE"` + AbstractRoutedHost string `json:"abstract_routed_host"` + BgpAuthKey string `json:"BGP_AUTH_KEY"` + InbandDhcpServers string `json:"INBAND_DHCP_SERVERS"` + IsisAuthKeychainKeyId string `json:"ISIS_AUTH_KEYCHAIN_KEY_ID"` + MgmtV6Prefix string `json:"MGMT_V6PREFIX"` + AbstractFeatureSpine string `json:"abstract_feature_spine"` + EnableDefaultQueuingPolicy string `json:"ENABLE_DEFAULT_QUEUING_POLICY"` + AnycastBgwAdvertisePip string `json:"ANYCAST_BGW_ADVERTISE_PIP"` + NetflowExporterList string `json:"NETFLOW_EXPORTER_LIST"` + AbstractVlanInterface string `json:"abstract_vlan_interface"` + FabricName string `json:"FABRIC_NAME"` + AbstractPimInterface string `json:"abstract_pim_interface"` + PmEnable string `json:"PM_ENABLE"` + Loopback0Ipv6Range string `json:"LOOPBACK0_IPV6_RANGE"` + OverlayModePrev string `json:"OVERLAY_MODE_PREV"` + EnableVpcPeerLinkNativeVlan string `json:"ENABLE_VPC_PEER_LINK_NATIVE_VLAN"` + AbstractRouteMap string `json:"abstract_route_map"` + InbandMgmtPrev string `json:"INBAND_MGMT_PREV"` + AbstractVpcDomain string `json:"abstract_vpc_domain"` + DhcpEndInternal string `json:"DHCP_END_INTERNAL"` + BootstrapEnable string `json:"BOOTSTRAP_ENABLE"` + AbstractExtraConfigTor string `json:"abstract_extra_config_tor"` + SyslogServerIpList string `json:"SYSLOG_SERVER_IP_LIST"` + BootstrapEnablePrev string `json:"BOOTSTRAP_ENABLE_PREV"` + EnableTenantDhcp string `json:"ENABLE_TENANT_DHCP"` + AnycastRpIpRangeInternal string `json:"ANYCAST_RP_IP_RANGE_INTERNAL"` + BootstrapMultisubnetInternal string `json:"BOOTSTRAP_MULTISUBNET_INTERNAL"` + MgmtGw string `json:"MGMT_GW"` + UnnumDhcpStart string `json:"UNNUM_DHCP_START"` + MgmtPrefix string `json:"MGMT_PREFIX"` + AbstractBgpRr string `json:"abstract_bgp_rr"` + InbandMgmt string `json:"INBAND_MGMT"` + AbstractBgp string `json:"abstract_bgp"` + EnableNetflowPrev string `json:"ENABLE_NETFLOW_PREV"` + DeafultQueuingPolicyCloudscale string `json:"DEAFULT_QUEUING_POLICY_CLOUDSCALE"` + FabricVpcQos string `json:"FABRIC_VPC_QOS"` + AaaRemoteIpEnabled string `json:"AAA_REMOTE_IP_ENABLED"` + SpineAddDelBedugFlag string `json:"SSPINE_ADD_DEL_DEBUG_FLAG"` + ActiveMigration string `json:"ACTIVE_MIGRATION"` + FabricTemplate string `json:"FF"` //TODO: Check variable name + FabricType string `json:"FABRIC_TYPE"` + SiteId string `json:"SITE_ID"` +} + +func (fabric *Fabric) ToMap() (map[string]interface{}, error) { + fabricAttributeMap := make(map[string]interface{}) + + if fabric.Id != 0 { + A(fabricAttributeMap, "id", fabric.Id) + } + A(fabricAttributeMap, "fabricName", fabric.Name) + A(fabricAttributeMap, "fabricId", fabric.FabricId) + A(fabricAttributeMap, "templateName", fabric.Template) + A(fabricAttributeMap, "nvPairs", fabric.Config) + return fabricAttributeMap, nil +} + +func (fabric *Fabric) SetConfigDefaults() { + fabric.Config.MsoSiteId = "" + fabric.Config.PhantomRpLbId1 = "" + fabric.Config.PhantomRpLbId2 = "" + fabric.Config.PhantomRpLbId3 = "" + fabric.Config.IbgpPeerTemplate = "" + fabric.Config.PhantomRpLbId4 = "" + fabric.Config.AbstractOspf = "base_ospf" + fabric.Config.FeaturePtp = "false" + fabric.Config.DhcpStartInternal = "" + fabric.Config.SspineCount = "0" + fabric.Config.AdvertisePipBgp = "false" + fabric.Config.FabricVpcQosPolicyName = "" + fabric.Config.BfdPimEnable = false + fabric.Config.DhcpEnd = "" + fabric.Config.UnderlayIsV6 = "false" + fabric.Config.FabricVpcDomainId = "" + fabric.Config.SeedSwitchCoreInterfaces = "" + fabric.Config.FabricMtuPrev = "9216" + fabric.Config.BfdIsisEnable = false + fabric.Config.HdTime = "180" + fabric.Config.OspfAuthEnable = "false" + fabric.Config.Loopback1Ipv6Range = "" + fabric.Config.RouterIdRange = "" + fabric.Config.MsoConnectivityDeployed = "" + fabric.Config.EnableMacsec = "false" + fabric.Config.DeafultQueuingPolicyOther = "" + fabric.Config.UnnumDhcpStartInternal = "" + fabric.Config.MacsecReportTimer = "" + fabric.Config.PremsoParentFabric = "" + fabric.Config.UnnumDhcpEndInternal = "" + fabric.Config.PtpDomainId = "" + fabric.Config.AutoSymmetricVrfLite = false + fabric.Config.UseLinkLocal = false + fabric.Config.BgpAsPrev = "" + fabric.Config.EnablePbr = "false" + fabric.Config.VpcPeerLinkPo = "500" + fabric.Config.VpcDelayRestoretime = "60" + fabric.Config.IsisAuthEnable = false + fabric.Config.VpcEnableIpv6NdSync = "true" + fabric.Config.AbstractIsisInterface = "isis_interface" + fabric.Config.TcamAllocation = "true" + fabric.Config.MacsecAlgorithm = "" + fabric.Config.IsisLevel = "" + fabric.Config.AbstractAnycastRp = "anycast_rp" + fabric.Config.EnableNetflow = "false" + fabric.Config.DeafultQueuingPolicyRSeries = "" + fabric.Config.TempVpcPeerLink = "int_vpc_peer_link_po" + fabric.Config.BrownfieldNetworkNameFormat = "Auto_Net_VNI$$VNI$$_VLAN$$VLAN_ID$$" + fabric.Config.EnableFabricVpcDomainId = "false" + fabric.Config.IbgpPeerTemplateLeaf = "" + fabric.Config.MgmtGwInternal = "" + fabric.Config.EnableNxapi = "true" + fabric.Config.GrfieldDebugFlag = "Disable" + fabric.Config.IsisAuthKeychainName = "" + fabric.Config.AbstractBgpNeighbor = "evpn_bgp_rr_neighbor" + fabric.Config.OspfAuthKeyId = "" + fabric.Config.PimHelloAuthEnable = "false" + fabric.Config.AbstractFeatureLeaf = "base_feature_leaf_upg" + fabric.Config.BfdAuthEnable = false + fabric.Config.ExtraConfTor = "" + fabric.Config.AaaServerConf = "" + fabric.Config.Enablerealtimebackup = "" + fabric.Config.StrictCcMode = "false" + fabric.Config.V6SubnetTargetMask = "" + fabric.Config.AbstractTrunkHost = "int_trunk_host" + fabric.Config.MstInstanceRange = "" + fabric.Config.BgpAuthEnable = "false" + fabric.Config.PmEnablePrev = "false" + fabric.Config.Enablescheduledbackup = "" + fabric.Config.AbstractOspfInterface = "ospf_interface_11_1" + fabric.Config.BfdOspfEnable = false + fabric.Config.MacsecFallbackAlgorithm = "" + fabric.Config.UnnumDhcpEnd = "" + fabric.Config.EnableAaa = false + fabric.Config.DeploymentFreeze = "false" + fabric.Config.L2HostIntfMtuPrev = "9216" + fabric.Config.NetflowMonitorList = "" + fabric.Config.EnableAgent = "false" + fabric.Config.NtpServerIpList = "" + fabric.Config.OverlayMode = "config-profile" + fabric.Config.MacsecFallbackKeyString = "" + fabric.Config.StpRootOption = "unmanaged" + fabric.Config.FabricType = "Switch_Fabric" + fabric.Config.IsisOverloadEnable = false + fabric.Config.NetflowRecordList = "" + fabric.Config.SpineCount = "0" + fabric.Config.AbstractExtraConfigBootstrap = "extra_config_bootstrap_11_1" + fabric.Config.MplsLoopbackIpRange = "" + fabric.Config.LinkStateRoutingTagPrev = "" + fabric.Config.DhcpEnable = false + fabric.Config.BfdAuthKeyId = "" + fabric.Config.MsoSiteGroupName = "" + fabric.Config.MgmtPrefixInternal = "" + fabric.Config.DhcpIpv6EnableInternal = "" + fabric.Config.BgpAuthKeyType = "" + fabric.Config.SiteId = "" + fabric.Config.TempAnycastGateway = "anycast_gateway" + fabric.Config.BrfieldDebugFlag = "Disable" + fabric.Config.BootstrapMultisubnet = "" + fabric.Config.IsisP2PEnable = false + fabric.Config.EnableNgoam = "true" + fabric.Config.CdpEnable = "false" + fabric.Config.PtpLbId = "" + fabric.Config.DhcpIpv6Enable = "" + fabric.Config.MacsecKeyString = "" + fabric.Config.OspfAuthKey = "" + fabric.Config.EnableFabricVpcDomainIdPrev = "" + fabric.Config.ExtraConfLeaf = "" + fabric.Config.DhcpStart = "" + fabric.Config.EnableTrm = "false" + fabric.Config.FeaturePtpInternal = "false" + fabric.Config.EnableNxapiHttp = "true" + fabric.Config.AbstractIsis = "base_isis_level2" + fabric.Config.MplsLbId = "" + fabric.Config.FabricVpcDomainIdPrev = "" + fabric.Config.StaticUnderlayIpAlloc = "false" + fabric.Config.MgmtV6PrefixInternal = "" + fabric.Config.MplsHandoff = "false" + fabric.Config.StpBridgePriority = "" + fabric.Config.Scheduledtime = "" + fabric.Config.MacsecCipherSuite = "" + fabric.Config.StpVlanRange = "" + fabric.Config.AnycastLbId = "" + fabric.Config.MsoControlerId = "" + fabric.Config.BfdEnable = "false" + fabric.Config.AbstractExtraConfigLeaf = "extra_config_leaf" + fabric.Config.AbstractDhcp = "base_dhcp" + fabric.Config.ExtraConfSpine = "" + fabric.Config.NtpServerVrf = "" + fabric.Config.SpineSwitchCoreInterfaces = "" + fabric.Config.IsisOverloadElapseTime = "" + fabric.Config.BootstrapConf = "" + fabric.Config.IsisAuthKey = "" + fabric.Config.DnsServerIpList = "" + fabric.Config.DnsServerVrf = "" + fabric.Config.EnableEvpn = "true" + fabric.Config.AbstractMulticast = "base_multicast_11_1" + fabric.Config.BfdAuthKey = "" + fabric.Config.AgentIntf = "eth0" + fabric.Config.L3VniMcastGroup = "" + fabric.Config.UnnumBootstrapLbId = "" + fabric.Config.VpcDomainIdRange = "1-1000" + fabric.Config.HostIntfAdminState = "true" + fabric.Config.BfdIbgpEnable = false + fabric.Config.SyslogSev = "" + fabric.Config.AbstractLoopbackInterface = "int_fabric_loopback_11_1" + fabric.Config.SyslogServerVrf = "" + fabric.Config.ExtraConfIntraLinks = "" + fabric.Config.SnmpServerHostTrap = "true" + fabric.Config.AbstractExtraConfigSpine = "extra_config_spine" + fabric.Config.PimHelloAuthKey = "" + fabric.Config.TempVpcDomainMgmt = "vpc_domain_mgmt" + fabric.Config.V6SubnetRange = "" + fabric.Config.AbstractRoutedHost = "int_routed_host" + fabric.Config.BgpAuthKey = "" + fabric.Config.InbandDhcpServers = "" + fabric.Config.IsisAuthKeychainKeyId = "" + fabric.Config.MgmtV6Prefix = "64" + fabric.Config.AbstractFeatureSpine = "base_feature_spine_upg" + fabric.Config.EnableDefaultQueuingPolicy = "false" + fabric.Config.AnycastBgwAdvertisePip = "false" + fabric.Config.NetflowExporterList = "" + fabric.Config.AbstractVlanInterface = "int_fabric_vlan_11_1" + fabric.Config.AbstractPimInterface = "pim_interface" + fabric.Config.PmEnable = "false" + fabric.Config.Loopback0Ipv6Range = "" + fabric.Config.OverlayModePrev = "" + fabric.Config.EnableVpcPeerLinkNativeVlan = "false" + fabric.Config.AbstractRouteMap = "route_map" + fabric.Config.InbandMgmtPrev = "false" + fabric.Config.AbstractVpcDomain = "base_vpc_domain_11_1" + fabric.Config.ActiveMigration = "false" + fabric.Config.DhcpEndInternal = "" + fabric.Config.BootstrapEnable = "false" + fabric.Config.AbstractExtraConfigTor = "extra_config_tor" + fabric.Config.SyslogServerIpList = "" + fabric.Config.BootstrapEnablePrev = "false" + fabric.Config.EnableTenantDhcp = "true" + fabric.Config.AnycastRpIpRangeInternal = "" + fabric.Config.BootstrapMultisubnetInternal = "" + fabric.Config.MgmtGw = "" + fabric.Config.UnnumDhcpStart = "" + fabric.Config.MgmtPrefix = "" + fabric.Config.AbstractBgpRr = "evpn_bgp_rr" + fabric.Config.InbandMgmt = "false" + fabric.Config.AbstractBgp = "base_bgp" + fabric.Config.EnableNetflowPrev = "" + fabric.Config.DeafultQueuingPolicyCloudscale = "" + fabric.Config.FabricVpcQos = "false" + fabric.Config.AaaRemoteIpEnabled = "false" + fabric.Config.SpineAddDelBedugFlag = "Disable" + fabric.Config.ActiveMigration = "false" + fabric.Config.FabricType = "Switch_Fabric" +} From 5049001922dd73a3ee51de6973ddbe6db32cc65d Mon Sep 17 00:00:00 2001 From: jgomezve Date: Thu, 9 Feb 2023 12:05:16 -0500 Subject: [PATCH 2/3] Add data_source and importer --- dcnm/data_source_dcnm_fabric.go | 374 +++++++++ dcnm/provider.go | 1 + dcnm/resource_dcnm_fabric.go | 728 +++++++++++++----- dcnm/utils.go | 1 + .../dcnm-go-client/client/service_manager.go | 1 + .../dcnm-go-client/models/fabric.go | 419 +++++----- 6 files changed, 1135 insertions(+), 389 deletions(-) create mode 100644 dcnm/data_source_dcnm_fabric.go diff --git a/dcnm/data_source_dcnm_fabric.go b/dcnm/data_source_dcnm_fabric.go new file mode 100644 index 0000000..08beef4 --- /dev/null +++ b/dcnm/data_source_dcnm_fabric.go @@ -0,0 +1,374 @@ +package dcnm + +import ( + "log" + + "github.com/ciscoecosystem/dcnm-go-client/client" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func datasourceDCNMFabric() *schema.Resource { + return &schema.Resource{ + Read: datasourceDCNMFabricRead, + + Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Required: true, + }, + + "fabric_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "asn": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "underlay_interface_numbering": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "underlay_subnet_mask": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "underlay_routing_protocol": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "route_reflectors_count": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "anycast_mac": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "replication_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "multicast_group_subnet": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "rendevous_point_count": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "rendevous_point_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "rendevous_loopback_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "vpc_peer_link_vlan": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "vpc_peer_keep_alive_option": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vpc_auto_recovery_time": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "vpc_delay_restore_time": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "underlay_routing_loopback_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "underlay_vtep_loopback_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "underlay_routing_protocol_tag": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "ospf_area_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "ospf_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "ibgp_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "isis_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "pim_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "bfd_authentication_key_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "bfd_authentication_key": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "ibgp_peer_template_config": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "leaf_ibgp_peer_template_config": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vrf_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "network_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vrf_extension_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "network_extension_template": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "overlay_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "intra_fabric_interface_mtu": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "layer_2_host_interface_mtu": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "power_supply_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "copp_profile": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "enable_vxlan_oam": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "enable_nx_api": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "enable_nx_api_on_http": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "enable_ndfc_as_trap_host": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + "underlay_routing_loopback_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "underlay_vtep_loopback_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "underlay_rp_loopback_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "underlay_subnet_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "layer_2_vxlan_vni_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "layer_3_vxlan_vni_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "network_vlan_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vrf_vlan_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "subinterface_dot1q_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vrf_lite_deployment": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vrf_lite_subnet_ip_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "vrf_lite_subnet_mask": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + "service_network_vlan_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "route_map_sequence_number_range": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + }, + } +} + +func datasourceDCNMFabricRead(d *schema.ResourceData, m interface{}) error { + log.Println("[DEBUG] Begining Read method ", d.Id()) + + dcnmClient := m.(*client.Client) + + dn := d.Get("name").(string) + + cont, err := getRemoteFabric(dcnmClient, dn) + if err != nil { + return err + } + + setFabricAttributes(d, cont) + + return nil +} diff --git a/dcnm/provider.go b/dcnm/provider.go index 7e6976c..b4408fd 100644 --- a/dcnm/provider.go +++ b/dcnm/provider.go @@ -88,6 +88,7 @@ func Provider() *schema.Provider { "dcnm_route_peering": datasourceDCNMRoutePeering(), "dcnm_service_policy": datasourceDCNMServicePolicy(), "dcnm_template": datasourceDCNMTemplate(), + "dcnm_fabric": datasourceDCNMFabric(), }, ConfigureFunc: configClient, } diff --git a/dcnm/resource_dcnm_fabric.go b/dcnm/resource_dcnm_fabric.go index 789b89b..9232918 100644 --- a/dcnm/resource_dcnm_fabric.go +++ b/dcnm/resource_dcnm_fabric.go @@ -19,11 +19,11 @@ func resourceDCNMFabric() *schema.Resource { Update: resourceDCNMFabricUpdate, Delete: resourceDCNMFabricDelete, + Importer: &schema.ResourceImporter{ + State: resourceDCNMFabricImporter, + }, + Schema: map[string]*schema.Schema{ - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - }, "name": &schema.Schema{ Type: schema.TypeString, @@ -43,8 +43,9 @@ func resourceDCNMFabric() *schema.Resource { }, "asn": &schema.Schema{ - Type: schema.TypeString, - Required: true, + Type: schema.TypeInt, + Required: true, + ValidateFunc: validation.IntBetween(1, 4294967295), }, "underlay_interface_numbering": &schema.Schema{ @@ -58,10 +59,10 @@ func resourceDCNMFabric() *schema.Resource { }, "underlay_subnet_mask": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Default: "30", - //TODO: Range validation + Type: schema.TypeInt, + Optional: true, + Default: 30, + ValidateFunc: validation.IntBetween(30, 31), }, "underlay_routing_protocol": &schema.Schema{ @@ -75,13 +76,13 @@ func resourceDCNMFabric() *schema.Resource { }, "route_reflectors_count": &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeInt, Optional: true, - Default: "2", - ValidateFunc: validation.StringInSlice([]string{ - "2", - "4", - }, false), + Default: 2, + ValidateFunc: validation.IntInSlice([]int{ + 2, + 4, + }), }, "anycast_mac": &schema.Schema{ @@ -109,13 +110,13 @@ func resourceDCNMFabric() *schema.Resource { }, "rendevous_point_count": &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeInt, Optional: true, - Default: "2", - ValidateFunc: validation.StringInSlice([]string{ - "2", - "4", - }, false), + Default: 2, + ValidateFunc: validation.IntInSlice([]int{ + 2, + 4, + }), }, "rendevous_point_mode": &schema.Schema{ @@ -192,6 +193,53 @@ func resourceDCNMFabric() *schema.Resource { Default: "0.0.0.0", }, + "ospf_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + + "ibgp_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + + "isis_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + + "pim_bfd": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + + "bfd_authentication_key_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + ValidateFunc: validation.IntBetween(1, 255), + }, + + "bfd_authentication_key": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + }, + + "ibgp_peer_template_config": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "", + }, + + "leaf_ibgp_peer_template_config": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "", + }, + "vrf_template": &schema.Schema{ Type: schema.TypeString, Optional: true, @@ -216,6 +264,16 @@ func resourceDCNMFabric() *schema.Resource { Default: "Default_Network_Extension_Universal", }, + "overlay_mode": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "config-profile", + ValidateFunc: validation.StringInSlice([]string{ + "config-profile", + "cli", + }, false), + }, + "intra_fabric_interface_mtu": &schema.Schema{ Type: schema.TypeInt, Optional: true, @@ -254,6 +312,30 @@ func resourceDCNMFabric() *schema.Resource { }, false), }, + "enable_vxlan_oam": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: true, + }, + + "enable_nx_api": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: true, + }, + + "enable_nx_api_on_http": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: true, + }, + + "enable_ndfc_as_trap_host": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: true, + }, + "underlay_routing_loopback_ip_range": &schema.Schema{ Type: schema.TypeString, Optional: true, @@ -364,165 +446,272 @@ func setFabricAttributes(d *schema.ResourceData, cont *container.Container) *sch d.Set("name", stripQuotes(cont.S("fabricName").String())) d.Set("fabric_id", stripQuotes(cont.S("fabricId").String())) d.Set("template", stripQuotes(cont.S("templateName").String())) + d.SetId(stripQuotes(cont.S("id").String())) - cont, err := cleanJsonString(stripQuotes(cont.S("nvPairs").String())) - if err == nil { - if cont.Exists("BGP_AS") { - d.Set("asn", stripQuotes(cont.S("BGP_AS").String())) - } - if cont.Exists("FABRIC_INTERFACE_TYPE") { - d.Set("underlay_interface_numbering", stripQuotes(cont.S("FABRIC_INTERFACE_TYPE").String())) - } - if cont.Exists("SUBNET_TARGET_MASK") { - d.Set("underlay_subnet_mask", stripQuotes(cont.S("SUBNET_TARGET_MASK").String())) - } - if cont.Exists("LINK_STATE_ROUTING") { - d.Set("underlay_routing_protocol", stripQuotes(cont.S("LINK_STATE_ROUTING").String())) - } - if cont.Exists("RR_COUNT") { - d.Set("route_reflectors_count", stripQuotes(cont.S("RR_COUNT").String())) - } - if cont.Exists("ANYCAST_GW_MAC") { - d.Set("anycast_mac", stripQuotes(cont.S("ANYCAST_GW_MAC").String())) - } - if cont.Exists("REPLICATION_MODE") { - d.Set("replication_mode", stripQuotes(cont.S("REPLICATION_MODE").String())) - } - if cont.Exists("MULTICAST_GROUP_SUBNET") { - d.Set("multicast_group_subnet", stripQuotes(cont.S("MULTICAST_GROUP_SUBNET").String())) - } - if cont.Exists("RP_COUNT") { - d.Set("rendevous_point_count", stripQuotes(cont.S("RP_COUNT").String())) - } - if cont.Exists("RP_MODE") { - d.Set("rendevous_point_mode", stripQuotes(cont.S("RP_MODE").String())) - } - if cont.Exists("RP_LB_ID") && stripQuotes(cont.S("RP_LB_ID").String()) != "" { - if rpLbId := stripQuotes(cont.S("RP_LB_ID").String()); err == nil { - rpLbIdInt, _ := strconv.Atoi(rpLbId) - d.Set("rendevous_loopback_id", rpLbIdInt) - } - } - if cont.Exists("VPC_PEER_LINK_VLAN") && stripQuotes(cont.S("VPC_PEER_LINK_VLAN").String()) != "" { - if vpcPeerVlan := stripQuotes(cont.S("VPC_PEER_LINK_VLAN").String()); err == nil { - vpcPeerVlanInt, _ := strconv.Atoi(vpcPeerVlan) - d.Set("vpc_peer_link_vlan", vpcPeerVlanInt) - } - } - if cont.Exists("VPC_PEER_KEEP_ALIVE_OPTION") { - d.Set("vpc_peer_keep_alive_option", stripQuotes(cont.S("VPC_PEER_KEEP_ALIVE_OPTION").String())) - } - if cont.Exists("VPC_AUTO_RECOVERY_TIME") && stripQuotes(cont.S("VPC_AUTO_RECOVERY_TIME").String()) != "" { - if vpcRecoveryTime := stripQuotes(cont.S("VPC_AUTO_RECOVERY_TIME").String()); err == nil { - vpcRecoveryTimeInt, _ := strconv.Atoi(vpcRecoveryTime) - d.Set("vpc_auto_recovery_time", vpcRecoveryTimeInt) - } - } - if cont.Exists("VPC_DELAY_RESTORE") && stripQuotes(cont.S("VPC_DELAY_RESTORE").String()) != "" { - if vpcRestoreTime := stripQuotes(cont.S("VPC_DELAY_RESTORE").String()); err == nil { - vpcRestoreTimeInt, _ := strconv.Atoi(vpcRestoreTime) - d.Set("vpc_delay_restore_time", vpcRestoreTimeInt) - } - } - if cont.Exists("BGP_LB_ID") && stripQuotes(cont.S("BGP_LB_ID").String()) != "" { - if bgpLbId := stripQuotes(cont.S("BGP_LB_ID").String()); err == nil { - bgpLbIdInt, _ := strconv.Atoi(bgpLbId) - d.Set("underlay_routing_loopback_id", bgpLbIdInt) - } - } - if cont.Exists("NVE_LB_ID") && stripQuotes(cont.S("NVE_LB_ID").String()) != "" { - if nveLbId := stripQuotes(cont.S("NVE_LB_ID").String()); err == nil { - nveLbIdInt, _ := strconv.Atoi(nveLbId) - d.Set("underlay_vtep_loopback_id", nveLbIdInt) - } - } - if cont.Exists("LINK_STATE_ROUTING_TAG") { - d.Set("underlay_routing_protocol_tag", stripQuotes(cont.S("LINK_STATE_ROUTING_TAG").String())) - } - if cont.Exists("OSPF_AREA_ID") { - d.Set("ospf_area_id", stripQuotes(cont.S("OSPF_AREA_ID").String())) - } - if cont.Exists("default_vrf") { - d.Set("vrf_template", stripQuotes(cont.S("default_vrf").String())) - } - if cont.Exists("default_network") { - d.Set("network_template", stripQuotes(cont.S("default_network").String())) - } - if cont.Exists("vrf_extension_template") { - d.Set("vrf_extension_template", stripQuotes(cont.S("vrf_extension_template").String())) - } - if cont.Exists("network_extension_template") { - d.Set("network_extension_template", stripQuotes(cont.S("network_extension_template").String())) - } - if cont.Exists("FABRIC_MTU") && stripQuotes(cont.S("FABRIC_MTU").String()) != "" { - if fabricMtu := stripQuotes(cont.S("FABRIC_MTU").String()); err == nil { - fabricMtuInt, _ := strconv.Atoi(fabricMtu) - d.Set("intra_fabric_interface_mtu", fabricMtuInt) - } - } - if cont.Exists("L2_HOST_INTF_MTU") && stripQuotes(cont.S("L2_HOST_INTF_MTU").String()) != "" { - if hostMtu := stripQuotes(cont.S("L2_HOST_INTF_MTU").String()); err == nil { - hostMtuInt, _ := strconv.Atoi(hostMtu) - d.Set("layer_2_host_interface_mtu", hostMtuInt) - } - } - if cont.Exists("POWER_REDUNDANCY_MODE") { - d.Set("power_supply_mode", stripQuotes(cont.S("POWER_REDUNDANCY_MODE").String())) - } - if cont.Exists("COPP_POLICY") { - d.Set("copp_profile", stripQuotes(cont.S("COPP_POLICY").String())) - } - if cont.Exists("LOOPBACK0_IP_RANGE") { - d.Set("underlay_routing_loopback_ip_range", stripQuotes(cont.S("LOOPBACK0_IP_RANGE").String())) - } - if cont.Exists("LOOPBACK1_IP_RANGE") { - d.Set("underlay_vtep_loopback_ip_range", stripQuotes(cont.S("LOOPBACK1_IP_RANGE").String())) - } - if cont.Exists("RP_MODANYCAST_RP_IP_RANGEE") { - d.Set("underlay_rp_loopback_ip_range", stripQuotes(cont.S("ANYCAST_RP_IP_RANGE").String())) - } - if cont.Exists("SUBNET_RANGE") { - d.Set("underlay_subnet_ip_range", stripQuotes(cont.S("SUBNET_RANGE").String())) - } - if cont.Exists("L2_SEGMENT_ID_RANGE") { - d.Set("layer_2_vxlan_vni_range", stripQuotes(cont.S("L2_SEGMENT_ID_RANGE").String())) - } - if cont.Exists("L3_PARTITION_ID_RANGE") { - d.Set("layer_3_vxlan_vni_range", stripQuotes(cont.S("L3_PARTITION_ID_RANGE").String())) - } - if cont.Exists("NETWORK_VLAN_RANGE") { - d.Set("network_vlan_range", stripQuotes(cont.S("NETWORK_VLAN_RANGE").String())) + cont = cont.S("nvPairs") + + if cont.Exists("BGP_AS") && stripQuotes(cont.S("BGP_AS").String()) != "" { + bgpAsn := stripQuotes(cont.S("BGP_AS").String()) + bgpAsnInt, _ := strconv.Atoi(bgpAsn) + d.Set("asn", bgpAsnInt) + + } + if cont.Exists("FABRIC_INTERFACE_TYPE") { + d.Set("underlay_interface_numbering", stripQuotes(cont.S("FABRIC_INTERFACE_TYPE").String())) + } + if cont.Exists("SUBNET_TARGET_MASK") && stripQuotes(cont.S("SUBNET_TARGET_MASK").String()) != "" { + subnetMask := stripQuotes(cont.S("SUBNET_TARGET_MASK").String()) + subnetMaskInt, _ := strconv.Atoi(subnetMask) + d.Set("underlay_subnet_mask", subnetMaskInt) + + } + if cont.Exists("LINK_STATE_ROUTING") { + d.Set("underlay_routing_protocol", stripQuotes(cont.S("LINK_STATE_ROUTING").String())) + } + if cont.Exists("RR_COUNT") && stripQuotes(cont.S("RR_COUNT").String()) != "" { + rrCount := stripQuotes(cont.S("RR_COUNT").String()) + rrCountInt, _ := strconv.Atoi(rrCount) + d.Set("route_reflectors_count", rrCountInt) + + } + if cont.Exists("ANYCAST_GW_MAC") { + d.Set("anycast_mac", stripQuotes(cont.S("ANYCAST_GW_MAC").String())) + } + if cont.Exists("REPLICATION_MODE") { + d.Set("replication_mode", stripQuotes(cont.S("REPLICATION_MODE").String())) + } + if cont.Exists("MULTICAST_GROUP_SUBNET") { + d.Set("multicast_group_subnet", stripQuotes(cont.S("MULTICAST_GROUP_SUBNET").String())) + } + if cont.Exists("RP_COUNT") && stripQuotes(cont.S("RP_COUNT").String()) != "" { + rpCount := stripQuotes(cont.S("RP_COUNT").String()) + rpCountInt, _ := strconv.Atoi(rpCount) + d.Set("rendevous_point_count", rpCountInt) + + } + if cont.Exists("RP_MODE") { + d.Set("rendevous_point_mode", stripQuotes(cont.S("RP_MODE").String())) + } + if cont.Exists("RP_LB_ID") && stripQuotes(cont.S("RP_LB_ID").String()) != "" { + rpLbId := stripQuotes(cont.S("RP_LB_ID").String()) + rpLbIdInt, _ := strconv.Atoi(rpLbId) + d.Set("rendevous_loopback_id", rpLbIdInt) + + } + if cont.Exists("VPC_PEER_LINK_VLAN") && stripQuotes(cont.S("VPC_PEER_LINK_VLAN").String()) != "" { + vpcPeerVlan := stripQuotes(cont.S("VPC_PEER_LINK_VLAN").String()) + vpcPeerVlanInt, _ := strconv.Atoi(vpcPeerVlan) + d.Set("vpc_peer_link_vlan", vpcPeerVlanInt) + + } + if cont.Exists("VPC_PEER_KEEP_ALIVE_OPTION") { + d.Set("vpc_peer_keep_alive_option", stripQuotes(cont.S("VPC_PEER_KEEP_ALIVE_OPTION").String())) + } + if cont.Exists("VPC_AUTO_RECOVERY_TIME") && stripQuotes(cont.S("VPC_AUTO_RECOVERY_TIME").String()) != "" { + vpcRecoveryTime := stripQuotes(cont.S("VPC_AUTO_RECOVERY_TIME").String()) + vpcRecoveryTimeInt, _ := strconv.Atoi(vpcRecoveryTime) + d.Set("vpc_auto_recovery_time", vpcRecoveryTimeInt) + + } + if cont.Exists("VPC_DELAY_RESTORE") && stripQuotes(cont.S("VPC_DELAY_RESTORE").String()) != "" { + vpcRestoreTime := stripQuotes(cont.S("VPC_DELAY_RESTORE").String()) + vpcRestoreTimeInt, _ := strconv.Atoi(vpcRestoreTime) + d.Set("vpc_delay_restore_time", vpcRestoreTimeInt) + + } + if cont.Exists("BGP_LB_ID") && stripQuotes(cont.S("BGP_LB_ID").String()) != "" { + bgpLbId := stripQuotes(cont.S("BGP_LB_ID").String()) + bgpLbIdInt, _ := strconv.Atoi(bgpLbId) + d.Set("underlay_routing_loopback_id", bgpLbIdInt) + + } + if cont.Exists("NVE_LB_ID") && stripQuotes(cont.S("NVE_LB_ID").String()) != "" { + nveLbId := stripQuotes(cont.S("NVE_LB_ID").String()) + nveLbIdInt, _ := strconv.Atoi(nveLbId) + d.Set("underlay_vtep_loopback_id", nveLbIdInt) + + } + if cont.Exists("LINK_STATE_ROUTING_TAG") { + d.Set("underlay_routing_protocol_tag", stripQuotes(cont.S("LINK_STATE_ROUTING_TAG").String())) + } + if cont.Exists("OSPF_AREA_ID") { + d.Set("ospf_area_id", stripQuotes(cont.S("OSPF_AREA_ID").String())) + } + if cont.Exists("BFD_OSPF_ENABLE") { + if stripQuotes(cont.S("BFD_OSPF_ENABLE").String()) == "true" { + d.Set("ospf_bfd", true) + } else { + d.Set("ospf_bfd", false) } - if cont.Exists("VRF_VLAN_RANGE") { - d.Set("vrf_vlan_range", stripQuotes(cont.S("VRF_VLAN_RANGE").String())) + } + if cont.Exists("BFD_IBGP_ENABLE") { + if stripQuotes(cont.S("BFD_IBGP_ENABLE").String()) == "true" { + d.Set("ibgp_bfd", true) + } else { + d.Set("ibgp_bfd", false) } - if cont.Exists("SUBINTERFACE_RANGE") { - d.Set("subinterface_dot1q_range", stripQuotes(cont.S("SUBINTERFACE_RANGE").String())) + } + if cont.Exists("BFD_ISIS_ENABLE") { + if stripQuotes(cont.S("BFD_ISIS_ENABLE").String()) == "true" { + d.Set("isis_bfd", true) + } else { + d.Set("isis_bfd", false) } - if cont.Exists("VRF_LITE_AUTOCONFIG") { - d.Set("vrf_lite_deployment", stripQuotes(cont.S("VRF_LITE_AUTOCONFIG").String())) + } + if cont.Exists("BFD_PIM_ENABLE") { + if stripQuotes(cont.S("BFD_PIM_ENABLE").String()) == "true" { + d.Set("pim_bfd", true) + } else { + d.Set("pim_bfd", false) } - if cont.Exists("DCI_SUBNET_RANGE") { - d.Set("vrf_lite_subnet_ip_range", stripQuotes(cont.S("DCI_SUBNET_RANGE").String())) + } + if cont.Exists("BFD_AUTH_KEY_ID") && stripQuotes(cont.S("BFD_AUTH_KEY_ID").String()) != "" { + bfdAuthKeyId := stripQuotes(cont.S("BFD_AUTH_KEY_ID").String()) + bfdAuthKeyIdInt, _ := strconv.Atoi(bfdAuthKeyId) + d.Set("bfd_authentication_key_id", bfdAuthKeyIdInt) + + } + if cont.Exists("BFD_AUTH_KEY") && stripQuotes(cont.S("BFD_AUTH_KEY").String()) != "" { + bfdAuthKey := stripQuotes(cont.S("BFD_AUTH_KEY").String()) + bfdAuthKeyInt, _ := strconv.Atoi(bfdAuthKey) + d.Set("bfd_authentication_key", bfdAuthKeyInt) + + } + + if cont.Exists("IBGP_PEER_TEMPLATE") { + d.Set("ibgp_peer_template_config", stripQuotes(cont.S("IBGP_PEER_TEMPLATE").String())) + } + if cont.Exists("IBGP_PEER_TEMPLATE_LEAF") { + d.Set("leaf_ibgp_peer_template_config", stripQuotes(cont.S("IBGP_PEER_TEMPLATE_LEAF").String())) + } + if cont.Exists("default_vrf") { + d.Set("vrf_template", stripQuotes(cont.S("default_vrf").String())) + } + if cont.Exists("default_network") { + d.Set("network_template", stripQuotes(cont.S("default_network").String())) + } + if cont.Exists("vrf_extension_template") { + d.Set("vrf_extension_template", stripQuotes(cont.S("vrf_extension_template").String())) + } + if cont.Exists("network_extension_template") { + d.Set("network_extension_template", stripQuotes(cont.S("network_extension_template").String())) + } + if cont.Exists("OVERLAY_MODE_PREV") { + d.Set("overlay_mode", stripQuotes(cont.S("OVERLAY_MODE_PREV").String())) + } + if cont.Exists("FABRIC_MTU") && stripQuotes(cont.S("FABRIC_MTU").String()) != "" { + fabricMtu := stripQuotes(cont.S("FABRIC_MTU").String()) + fabricMtuInt, _ := strconv.Atoi(fabricMtu) + d.Set("intra_fabric_interface_mtu", fabricMtuInt) + + } + if cont.Exists("L2_HOST_INTF_MTU") && stripQuotes(cont.S("L2_HOST_INTF_MTU").String()) != "" { + hostMtu := stripQuotes(cont.S("L2_HOST_INTF_MTU").String()) + hostMtuInt, _ := strconv.Atoi(hostMtu) + d.Set("layer_2_host_interface_mtu", hostMtuInt) + + } + if cont.Exists("POWER_REDUNDANCY_MODE") { + d.Set("power_supply_mode", stripQuotes(cont.S("POWER_REDUNDANCY_MODE").String())) + } + if cont.Exists("COPP_POLICY") { + d.Set("copp_profile", stripQuotes(cont.S("COPP_POLICY").String())) + } + if cont.Exists("ENABLE_NGOAM") { + if stripQuotes(cont.S("ENABLE_NGOAM").String()) == "true" { + d.Set("enable_vxlan_oam", true) + } else { + d.Set("enable_vxlan_oam", false) } - if cont.Exists("DCI_SUBNET_TARGET_MASK") && stripQuotes(cont.S("DCI_SUBNET_TARGET_MASK").String()) != "" { - if vrfLiteSubnetMask := stripQuotes(cont.S("DCI_SUBNET_TARGET_MASK").String()); err == nil { - vrfLiteSubnetMaskInt, _ := strconv.Atoi(vrfLiteSubnetMask) - d.Set("vrf_lite_subnet_mask", vrfLiteSubnetMaskInt) - } + } + if cont.Exists("ENABLE_NXAPI") { + if stripQuotes(cont.S("ENABLE_NXAPI").String()) == "true" { + d.Set("enable_nx_api", true) + } else { + d.Set("enable_nx_api", false) } - if cont.Exists("SERVICE_NETWORK_VLAN_RANGE") { - d.Set("service_network_vlan_range", stripQuotes(cont.S("SERVICE_NETWORK_VLAN_RANGE").String())) + } + if cont.Exists("ENABLE_NXAPI_HTTP") { + if stripQuotes(cont.S("ENABLE_NXAPI_HTTP").String()) == "true" { + d.Set("enable_nx_api_on_http", true) + } else { + d.Set("enable_nx_api_on_http", false) } - if cont.Exists("ROUTE_MAP_SEQUENCE_NUMBER_RANGE") { - d.Set("route_map_sequence_number_range", stripQuotes(cont.S("ROUTE_MAP_SEQUENCE_NUMBER_RANGE").String())) + } + if cont.Exists("SNMP_SERVER_HOST_TRAP") { + if stripQuotes(cont.S("SNMP_SERVER_HOST_TRAP").String()) == "true" { + d.Set("enable_ndfc_as_trap_host", true) + } else { + d.Set("enable_ndfc_as_trap_host", false) } } - d.Set("id", stripQuotes(cont.S("id").String())) + if cont.Exists("LOOPBACK0_IP_RANGE") { + d.Set("underlay_routing_loopback_ip_range", stripQuotes(cont.S("LOOPBACK0_IP_RANGE").String())) + } + if cont.Exists("LOOPBACK1_IP_RANGE") { + d.Set("underlay_vtep_loopback_ip_range", stripQuotes(cont.S("LOOPBACK1_IP_RANGE").String())) + } + if cont.Exists("ANYCAST_RP_IP_RANGE") { + d.Set("underlay_rp_loopback_ip_range", stripQuotes(cont.S("ANYCAST_RP_IP_RANGE").String())) + } + if cont.Exists("SUBNET_RANGE") { + d.Set("underlay_subnet_ip_range", stripQuotes(cont.S("SUBNET_RANGE").String())) + } + if cont.Exists("L2_SEGMENT_ID_RANGE") { + d.Set("layer_2_vxlan_vni_range", stripQuotes(cont.S("L2_SEGMENT_ID_RANGE").String())) + } + if cont.Exists("L3_PARTITION_ID_RANGE") { + d.Set("layer_3_vxlan_vni_range", stripQuotes(cont.S("L3_PARTITION_ID_RANGE").String())) + } + if cont.Exists("NETWORK_VLAN_RANGE") { + d.Set("network_vlan_range", stripQuotes(cont.S("NETWORK_VLAN_RANGE").String())) + } + if cont.Exists("VRF_VLAN_RANGE") { + d.Set("vrf_vlan_range", stripQuotes(cont.S("VRF_VLAN_RANGE").String())) + } + if cont.Exists("SUBINTERFACE_RANGE") { + d.Set("subinterface_dot1q_range", stripQuotes(cont.S("SUBINTERFACE_RANGE").String())) + } + if cont.Exists("VRF_LITE_AUTOCONFIG") { + d.Set("vrf_lite_deployment", stripQuotes(cont.S("VRF_LITE_AUTOCONFIG").String())) + } + if cont.Exists("DCI_SUBNET_RANGE") { + d.Set("vrf_lite_subnet_ip_range", stripQuotes(cont.S("DCI_SUBNET_RANGE").String())) + } + if cont.Exists("DCI_SUBNET_TARGET_MASK") && stripQuotes(cont.S("DCI_SUBNET_TARGET_MASK").String()) != "" { + vrfLiteSubnetMask := stripQuotes(cont.S("DCI_SUBNET_TARGET_MASK").String()) + vrfLiteSubnetMaskInt, _ := strconv.Atoi(vrfLiteSubnetMask) + d.Set("vrf_lite_subnet_mask", vrfLiteSubnetMaskInt) + } + if cont.Exists("SERVICE_NETWORK_VLAN_RANGE") { + d.Set("service_network_vlan_range", stripQuotes(cont.S("SERVICE_NETWORK_VLAN_RANGE").String())) + } + if cont.Exists("ROUTE_MAP_SEQUENCE_NUMBER_RANGE") { + d.Set("route_map_sequence_number_range", stripQuotes(cont.S("ROUTE_MAP_SEQUENCE_NUMBER_RANGE").String())) + } + return d } +func resourceDCNMFabricImporter(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { + log.Println("[DEBUG] Begining Importer ", d.Id()) + + dcnmClient := m.(*client.Client) + + fabricName := d.Id() + + cont, err := getRemoteFabric(dcnmClient, fabricName) + if err != nil { + return nil, err + } + + stateImport := setFabricAttributes(d, cont) + + log.Println("[DEBUG] End of Importer ", d.Id()) + return []*schema.ResourceData{stateImport}, nil +} + func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { log.Println("[DEBUG] Begining Create method ") @@ -533,21 +722,22 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { fabric.Template = d.Get("template").(string) configMap := models.FabricConfig{} + configMap.SetConfigDefaults() if asn, ok := d.GetOk("asn"); ok { - configMap.Asn = asn.(string) + configMap.Asn = strconv.Itoa(asn.(int)) } if underlayRoutingNumbering, ok := d.GetOk("underlay_interface_numbering"); ok { configMap.UnderlayInterfaceNumbering = underlayRoutingNumbering.(string) } if underlaySubnetMask, ok := d.GetOk("underlay_subnet_mask"); ok { - configMap.UnderlaySubnetMask = underlaySubnetMask.(string) + configMap.UnderlaySubnetMask = strconv.Itoa(underlaySubnetMask.(int)) } if uderlayRoutingProtocol, ok := d.GetOk("underlay_routing_protocol"); ok { configMap.UnderlayRoutingProcotol = uderlayRoutingProtocol.(string) } if rrCount, ok := d.GetOk("route_reflectors_count"); ok { - configMap.RouteReflectorCount = rrCount.(string) + configMap.RouteReflectorCount = strconv.Itoa(rrCount.(int)) } if anycastMac, ok := d.GetOk("anycast_mac"); ok { configMap.AnycastMac = anycastMac.(string) @@ -559,7 +749,7 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { configMap.MulticastGroupSubnet = multicastGroupSubnet.(string) } if rpCount, ok := d.GetOk("rendevous_point_count"); ok { - configMap.RendevouzPointCount = rpCount.(string) + configMap.RendevouzPointCount = strconv.Itoa(rpCount.(int)) } if rpMode, ok := d.GetOk("rendevous_point_mode"); ok { configMap.RendevouzPointMode = rpMode.(string) @@ -593,6 +783,59 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { if ospfAreaId, ok := d.GetOk("ospf_area_id"); ok { configMap.OspfAreaId = ospfAreaId.(string) } + if ospfBfpEnable, ok := d.GetOk("ospf_bfd"); ok { + if ospfBfpEnable.(bool) { + configMap.BfdOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.BfdOspf = "false" + } + } else { + configMap.BfdOspf = "false" + } + if ibgpOspfEnable, ok := d.GetOk("ibgp_bfd"); ok { + if ibgpOspfEnable.(bool) { + configMap.IbgpOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.IbgpOspf = "false" + } + } else { + configMap.IbgpOspf = "false" + } + if isisBfpEnable, ok := d.GetOk("isis_bfd"); ok { + if isisBfpEnable.(bool) { + configMap.IsisOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.IsisOspf = "false" + } + } else { + configMap.IsisOspf = "false" + } + if pimBfpEnable, ok := d.GetOk("pim_bfd"); ok { + if pimBfpEnable.(bool) { + configMap.PimOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.PimOspf = "false" + } + } else { + configMap.PimOspf = "false" + } + if bfd_authentication_key_id, ok := d.GetOk("bfd_authentication_key_id"); ok { + configMap.BfdAuthKeyId = strconv.Itoa(bfd_authentication_key_id.(int)) + configMap.BfdAuthEnable = "true" + } + if bfd_authentication_key, ok := d.GetOk("bfd_authentication_key"); ok { + configMap.BfdAuthKey = bfd_authentication_key.(string) + } + if ibgpPeerTempConf, ok := d.GetOk("ibgp_peer_template_config"); ok { + configMap.IbgpPeerTemplate = ibgpPeerTempConf.(string) + } + if leafIbgpPeerTempConf, ok := d.GetOk("leaf_ibgp_peer_template_config"); ok { + configMap.IbgpPeerTemplateLeaf = leafIbgpPeerTempConf.(string) + } if vrfTemp, ok := d.GetOk("vrf_template"); ok { configMap.VrfTemplate = vrfTemp.(string) } @@ -605,6 +848,9 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { if netExtTemp, ok := d.GetOk("network_extension_template"); ok { configMap.NetworkExtensionTemplate = netExtTemp.(string) } + if overlayMode, ok := d.GetOk("overlay_mode"); ok { + configMap.OverlayMode = overlayMode.(string) + } if fabMtu, ok := d.GetOk("intra_fabric_interface_mtu"); ok { configMap.IntraFabricInterfaceMtu = strconv.Itoa(fabMtu.(int)) } @@ -617,6 +863,42 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { if coppProf, ok := d.GetOk("copp_profile"); ok { configMap.CoppProfile = coppProf.(string) } + if enableVxlan, ok := d.GetOk("enable_vxlan_oam"); ok { + if enableVxlan.(bool) { + configMap.EnableNgoam = "true" + } else { + configMap.EnableNgoam = "false" + } + } else { + configMap.EnableNgoam = "false" + } + if enableNxApi, ok := d.GetOk("enable_nx_api"); ok { + if enableNxApi.(bool) { + configMap.EnableNxapi = "true" + } else { + configMap.EnableNxapi = "false" + } + } else { + configMap.EnableNxapi = "false" + } + if enableNxApiHttp, ok := d.GetOk("enable_nx_api_on_http"); ok { + if enableNxApiHttp.(bool) { + configMap.EnableNxapiHttp = "true" + } else { + configMap.EnableNxapiHttp = "false" + } + } else { + configMap.EnableNxapiHttp = "false" + } + if enableNdfcAsTrap, ok := d.GetOk("enable_ndfc_as_trap_host"); ok { + if enableNdfcAsTrap.(bool) { + configMap.SnmpServerHostTrap = "true" + } else { + configMap.SnmpServerHostTrap = "false" + } + } else { + configMap.SnmpServerHostTrap = "false" + } if rtLooIpRange, ok := d.GetOk("underlay_routing_loopback_ip_range"); ok { configMap.UnderlayRoutingLoopbackIpRange = rtLooIpRange.(string) } @@ -663,7 +945,6 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { configMap.FabricTemplate = fabric.Template configMap.FabricName = fabric.Name fabric.Config = configMap - fabric.SetConfigDefaults() durl := "/rest/control/fabrics" cont, err := dcnmClient.Save(durl, &fabric) @@ -688,21 +969,22 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { fabric.FabricId = d.Get("fabric_id").(string) configMap := models.FabricConfig{} + configMap.SetConfigDefaults() if asn, ok := d.GetOk("asn"); ok { - configMap.Asn = asn.(string) + configMap.Asn = strconv.Itoa(asn.(int)) } if underlayRoutingNumbering, ok := d.GetOk("underlay_interface_numbering"); ok { configMap.UnderlayInterfaceNumbering = underlayRoutingNumbering.(string) } if underlaySubnetMask, ok := d.GetOk("underlay_subnet_mask"); ok { - configMap.UnderlaySubnetMask = underlaySubnetMask.(string) + configMap.UnderlaySubnetMask = strconv.Itoa(underlaySubnetMask.(int)) } if uderlayRoutingProtocol, ok := d.GetOk("underlay_routing_protocol"); ok { configMap.UnderlayRoutingProcotol = uderlayRoutingProtocol.(string) } if rrCount, ok := d.GetOk("route_reflectors_count"); ok { - configMap.RouteReflectorCount = rrCount.(string) + configMap.RouteReflectorCount = strconv.Itoa(rrCount.(int)) } if anycastMac, ok := d.GetOk("anycast_mac"); ok { configMap.AnycastMac = anycastMac.(string) @@ -714,7 +996,7 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { configMap.MulticastGroupSubnet = multicastGroupSubnet.(string) } if rpCount, ok := d.GetOk("rendevous_point_count"); ok { - configMap.RendevouzPointCount = rpCount.(string) + configMap.RendevouzPointCount = strconv.Itoa(rpCount.(int)) } if rpMode, ok := d.GetOk("rendevous_point_mode"); ok { configMap.RendevouzPointMode = rpMode.(string) @@ -748,6 +1030,60 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { if ospfAreaId, ok := d.GetOk("ospf_area_id"); ok { configMap.OspfAreaId = ospfAreaId.(string) } + + if ospfBfpEnable, ok := d.GetOk("ospf_bfd"); ok { + if ospfBfpEnable.(bool) { + configMap.BfdOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.BfdOspf = "false" + } + } else { + configMap.BfdOspf = "false" + } + if ibgpOspfEnable, ok := d.GetOk("ibgp_bfd"); ok { + if ibgpOspfEnable.(bool) { + configMap.IbgpOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.IbgpOspf = "false" + } + } else { + configMap.IbgpOspf = "false" + } + if isisBfpEnable, ok := d.GetOk("isis_bfd"); ok { + if isisBfpEnable.(bool) { + configMap.IsisOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.IsisOspf = "false" + } + } else { + configMap.IsisOspf = "false" + } + if pimBfpEnable, ok := d.GetOk("pim_bfd"); ok { + if pimBfpEnable.(bool) { + configMap.PimOspf = "true" + configMap.BfdEnable = "true" + } else { + configMap.PimOspf = "false" + } + } else { + configMap.PimOspf = "false" + } + if bfd_authentication_key_id, ok := d.GetOk("bfd_authentication_key_id"); ok { + configMap.BfdAuthKeyId = strconv.Itoa(bfd_authentication_key_id.(int)) + configMap.BfdAuthEnable = "true" + } + if bfd_authentication_key, ok := d.GetOk("bfd_authentication_key"); ok { + configMap.BfdAuthKey = bfd_authentication_key.(string) + } + if ibgpPeerTempConf, ok := d.GetOk("ibgp_peer_template_config"); ok { + configMap.IbgpPeerTemplate = ibgpPeerTempConf.(string) + } + if leafIbgpPeerTempConf, ok := d.GetOk("leaf_ibgp_peer_template_config"); ok { + configMap.IbgpPeerTemplateLeaf = leafIbgpPeerTempConf.(string) + } if vrfTemp, ok := d.GetOk("vrf_template"); ok { configMap.VrfTemplate = vrfTemp.(string) } @@ -760,6 +1096,9 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { if netExtTemp, ok := d.GetOk("network_extension_template"); ok { configMap.NetworkExtensionTemplate = netExtTemp.(string) } + if overlayMode, ok := d.GetOk("overlay_mode"); ok { + configMap.OverlayMode = overlayMode.(string) + } if fabMtu, ok := d.GetOk("intra_fabric_interface_mtu"); ok { configMap.IntraFabricInterfaceMtu = strconv.Itoa(fabMtu.(int)) } @@ -772,6 +1111,42 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { if coppProf, ok := d.GetOk("copp_profile"); ok { configMap.CoppProfile = coppProf.(string) } + if enableVxlan, ok := d.GetOk("enable_vxlan_oam"); ok { + if enableVxlan.(bool) { + configMap.EnableNgoam = "true" + } else { + configMap.EnableNgoam = "false" + } + } else { + configMap.EnableNgoam = "false" + } + if enableNxApi, ok := d.GetOk("enable_nx_api"); ok { + if enableNxApi.(bool) { + configMap.EnableNxapi = "true" + } else { + configMap.EnableNxapi = "false" + } + } else { + configMap.EnableNxapi = "false" + } + if enableNxApiHttp, ok := d.GetOk("enable_nx_api_on_http"); ok { + if enableNxApiHttp.(bool) { + configMap.EnableNxapiHttp = "true" + } else { + configMap.EnableNxapiHttp = "false" + } + } else { + configMap.EnableNxapiHttp = "false" + } + if enableNdfcAsTrap, ok := d.GetOk("enable_ndfc_as_trap_host"); ok { + if enableNdfcAsTrap.(bool) { + configMap.SnmpServerHostTrap = "true" + } else { + configMap.SnmpServerHostTrap = "false" + } + } else { + configMap.SnmpServerHostTrap = "false" + } if rtLooIpRange, ok := d.GetOk("underlay_routing_loopback_ip_range"); ok { configMap.UnderlayRoutingLoopbackIpRange = rtLooIpRange.(string) } @@ -820,7 +1195,6 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { fabric.Config = configMap idInt, _ := strconv.Atoi(d.Id()) fabric.Id = idInt - fabric.SetConfigDefaults() dn := fabric.Name durl := fmt.Sprintf("/rest/control/fabrics/%s", dn) diff --git a/dcnm/utils.go b/dcnm/utils.go index fb56a6a..62f756f 100644 --- a/dcnm/utils.go +++ b/dcnm/utils.go @@ -12,6 +12,7 @@ import ( ) func stripQuotes(word string) string { + if strings.HasPrefix(word, "\"") && strings.HasSuffix(word, "\"") { return strings.TrimSuffix(strings.TrimPrefix(word, "\""), "\"") } diff --git a/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go b/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go index eee2cd2..fc153e4 100644 --- a/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go +++ b/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go @@ -23,6 +23,7 @@ func (c *Client) GetviaURL(endpoint string) (*container.Container, error) { if cont == nil { return nil, errors.New("Empty response body") } + return cont, checkforerrors(cont, resp) } diff --git a/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go b/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go index 497f048..94e56db 100644 --- a/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go +++ b/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go @@ -29,14 +29,29 @@ type FabricConfig struct { UnderlayVtepLoopbackId string `json:"NVE_LB_ID"` UnderlayRoutingProtocolTag string `json:"LINK_STATE_ROUTING_TAG"` OspfAreaId string `json:"OSPF_AREA_ID"` + BfdEnable string `json:"BFD_ENABLE"` + BfdOspf string `json:"BFD_OSPF_ENABLE"` + BfdAuthEnable string `json:"BFD_AUTH_ENABLE"` + BfdAuthKeyId string `json:"BFD_AUTH_KEY_ID"` + BfdAuthKey string `json:"BFD_AUTH_KEY"` + IbgpPeerTemplate string `json:"IBGP_PEER_TEMPLATE"` + IbgpPeerTemplateLeaf string `json:"IBGP_PEER_TEMPLATE_LEAF"` + IbgpOspf string `json:"BFD_IBGP_ENABLE"` + IsisOspf string `json:"BFD_ISIS_ENABLE"` + PimOspf string `json:"BFD_PIM_ENABLE"` VrfTemplate string `json:"default_vrf"` NetworkTemplate string `json:"default_network"` VrfExtensionTemplate string `json:"vrf_extension_template"` NetworkExtensionTemplate string `json:"network_extension_template"` + OverlayModePrev string `json:"OVERLAY_MODE_PREV"` IntraFabricInterfaceMtu string `json:"FABRIC_MTU"` Layer2HostInterfaceMtu string `json:"L2_HOST_INTF_MTU"` PowerSupplyMode string `json:"POWER_REDUNDANCY_MODE"` CoppProfile string `json:"COPP_POLICY"` + EnableNgoam string `json:"ENABLE_NGOAM"` + EnableNxapi string `json:"ENABLE_NXAPI"` + EnableNxapiHttp string `json:"ENABLE_NXAPI_HTTP"` + SnmpServerHostTrap string `json:"SNMP_SERVER_HOST_TRAP"` UnderlayRoutingLoopbackIpRange string `json:"LOOPBACK0_IP_RANGE"` UnderlayVtepLoopbackIpRange string `json:"LOOPBACK1_IP_RANGE"` UnderlayRpLoopbackIpRange string `json:"ANYCAST_RP_IP_RANGE"` @@ -51,12 +66,11 @@ type FabricConfig struct { VrfLiteSubnetMask string `json:"DCI_SUBNET_TARGET_MASK"` ServiceNetworkVlanRange string `json:"SERVICE_NETWORK_VLAN_RANGE"` RouteMapSequenceNumberRange string `json:"ROUTE_MAP_SEQUENCE_NUMBER_RANGE"` - // Properties not exposed in the Terraform Resource + // Parameters not exposed in the Terraform resource MsoSiteId string `json:"MSO_SITE_ID"` PhantomRpLbId1 string `json:"PHANTOM_RP_LB_ID1"` PhantomRpLbId2 string `json:"PHANTOM_RP_LB_ID2"` PhantomRpLbId3 string `json:"PHANTOM_RP_LB_ID3"` - IbgpPeerTemplate string `json:"IBGP_PEER_TEMPLATE"` PhantomRpLbId4 string `json:"PHANTOM_RP_LB_ID4"` AbstractOspf string `json:"abstract_ospf"` FeaturePtp string `json:"FEATURE_PTP"` @@ -64,13 +78,11 @@ type FabricConfig struct { SspineCount string `json:"SSPINE_COUNT"` AdvertisePipBgp string `json:"ADVERTISE_PIP_BGP"` FabricVpcQosPolicyName string `json:"FABRIC_VPC_QOS_POLICY_NAME"` - BfdPimEnable bool `json:"BFD_PIM_ENABLE"` DhcpEnd string `json:"DHCP_END"` UnderlayIsV6 string `json:"UNDERLAY_IS_V6"` FabricVpcDomainId string `json:"FABRIC_VPC_DOMAIN_ID"` SeedSwitchCoreInterfaces string `json:"SEED_SWITCH_CORE_INTERFACES"` FabricMtuPrev string `json:"FABRIC_MTU_PREV"` - BfdIsisEnable bool `json:"BFD_ISIS_ENABLE"` HdTime string `json:"HD_TIME"` OspfAuthEnable string `json:"OSPF_AUTH_ENABLE"` Loopback1Ipv6Range string `json:"LOOPBACK1_IPV6_RANGE"` @@ -100,16 +112,13 @@ type FabricConfig struct { TempVpcPeerLink string `json:"temp_vpc_peer_link"` BrownfieldNetworkNameFormat string `json:"BROWNFIELD_NETWORK_NAME_FORMAT"` EnableFabricVpcDomainId string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID"` - IbgpPeerTemplateLeaf string `json:"IBGP_PEER_TEMPLATE_LEAF"` MgmtGwInternal string `json:"MGMT_GW_INTERNAL"` - EnableNxapi string `json:"ENABLE_NXAPI"` GrfieldDebugFlag string `json:"GRFIELD_DEBUG_FLAG"` IsisAuthKeychainName string `json:"ISIS_AUTH_KEYCHAIN_NAME"` AbstractBgpNeighbor string `json:"abstract_bgp_neighbor"` OspfAuthKeyId string `json:"OSPF_AUTH_KEY_ID"` PimHelloAuthEnable string `json:"PIM_HELLO_AUTH_ENABLE"` AbstractFeatureLeaf string `json:"abstract_feature_leaf"` - BfdAuthEnable bool `json:"BFD_AUTH_ENABLE"` ExtraConfTor string `json:"EXTRA_CONF_TOR"` AaaServerConf string `json:"AAA_SERVER_CONF"` Enablerealtimebackup string `json:"enableRealTimeBackup"` @@ -121,7 +130,6 @@ type FabricConfig struct { PmEnablePrev string `json:"PM_ENABLE_PREV"` Enablescheduledbackup string `json:"enableScheduledBackup"` AbstractOspfInterface string `json:"abstract_ospf_interface"` - BfdOspfEnable bool `json:"BFD_OSPF_ENABLE"` MacsecFallbackAlgorithm string `json:"MACSEC_FALLBACK_ALGORITHM"` UnnumDhcpEnd string `json:"UNNUM_DHCP_END"` EnableAaa bool `json:"ENABLE_AAA"` @@ -140,7 +148,6 @@ type FabricConfig struct { MplsLoopbackIpRange string `json:"MPLS_LOOPBACK_IP_RANGE"` LinkStateRoutingTagPrev string `json:"LINK_STATE_ROUTING_TAG_PREV"` DhcpEnable bool `json:"DHCP_ENABLE"` - BfdAuthKeyId string `json:"BFD_AUTH_KEY_ID"` MsoSiteGroupName string `json:"MSO_SITE_GROUP_NAME"` MgmtPrefixInternal string `json:"MGMT_PREFIX_INTERNAL"` DhcpIpv6EnableInternal string `json:"DHCP_IPV6_ENABLE_INTERNAL"` @@ -149,7 +156,6 @@ type FabricConfig struct { BrfieldDebugFlag string `json:"BRFIELD_DEBUG_FLAG"` BootstrapMultisubnet string `json:"BOOTSTRAP_MULTISUBNET"` IsisP2PEnable bool `json:"ISIS_P2P_ENABLE"` - EnableNgoam string `json:"ENABLE_NGOAM"` CdpEnable string `json:"CDP_ENABLE"` PtpLbId string `json:"PTP_LB_ID"` DhcpIpv6Enable string `json:"DHCP_IPV6_ENABLE"` @@ -160,7 +166,6 @@ type FabricConfig struct { DhcpStart string `json:"DHCP_START"` EnableTrm string `json:"ENABLE_TRM"` FeaturePtpInternal string `json:"FEATURE_PTP_INTERNAL"` - EnableNxapiHttp string `json:"ENABLE_NXAPI_HTTP"` AbstractIsis string `json:"abstract_isis"` MplsLbId string `json:"MPLS_LB_ID"` FabricVpcDomainIdPrev string `json:"FABRIC_VPC_DOMAIN_ID_PREV"` @@ -173,7 +178,6 @@ type FabricConfig struct { StpVlanRange string `json:"STP_VLAN_RANGE"` AnycastLbId string `json:"ANYCAST_LB_ID"` MsoControlerId string `json:"MSO_CONTROLER_ID"` - BfdEnable string `json:"BFD_ENABLE"` AbstractExtraConfigLeaf string `json:"abstract_extra_config_leaf"` AbstractDhcp string `json:"abstract_dhcp"` ExtraConfSpine string `json:"EXTRA_CONF_SPINE"` @@ -186,18 +190,15 @@ type FabricConfig struct { DnsServerVrf string `json:"DNS_SERVER_VRF"` EnableEvpn string `json:"ENABLE_EVPN"` AbstractMulticast string `json:"abstract_multicast"` - BfdAuthKey string `json:"BFD_AUTH_KEY"` AgentIntf string `json:"AGENT_INTF"` L3VniMcastGroup string `json:"L3VNI_MCAST_GROUP"` UnnumBootstrapLbId string `json:"UNNUM_BOOTSTRAP_LB_ID"` VpcDomainIdRange string `json:"VPC_DOMAIN_ID_RANGE"` HostIntfAdminState string `json:"HOST_INTF_ADMIN_STATE"` - BfdIbgpEnable bool `json:"BFD_IBGP_ENABLE"` SyslogSev string `json:"SYSLOG_SEV"` AbstractLoopbackInterface string `json:"abstract_loopback_interface"` SyslogServerVrf string `json:"SYSLOG_SERVER_VRF"` ExtraConfIntraLinks string `json:"EXTRA_CONF_INTRA_LINKS"` - SnmpServerHostTrap string `json:"SNMP_SERVER_HOST_TRAP"` AbstractExtraConfigSpine string `json:"abstract_extra_config_spine"` PimHelloAuthKey string `json:"PIM_HELLO_AUTH_KEY"` TempVpcDomainMgmt string `json:"temp_vpc_domain_mgmt"` @@ -216,7 +217,6 @@ type FabricConfig struct { AbstractPimInterface string `json:"abstract_pim_interface"` PmEnable string `json:"PM_ENABLE"` Loopback0Ipv6Range string `json:"LOOPBACK0_IPV6_RANGE"` - OverlayModePrev string `json:"OVERLAY_MODE_PREV"` EnableVpcPeerLinkNativeVlan string `json:"ENABLE_VPC_PEER_LINK_NATIVE_VLAN"` AbstractRouteMap string `json:"abstract_route_map"` InbandMgmtPrev string `json:"INBAND_MGMT_PREV"` @@ -239,10 +239,10 @@ type FabricConfig struct { DeafultQueuingPolicyCloudscale string `json:"DEAFULT_QUEUING_POLICY_CLOUDSCALE"` FabricVpcQos string `json:"FABRIC_VPC_QOS"` AaaRemoteIpEnabled string `json:"AAA_REMOTE_IP_ENABLED"` + FabricTemplate string `json:"FF"` + FabricType string `json:"FABRIC_TYPE"` SpineAddDelBedugFlag string `json:"SSPINE_ADD_DEL_DEBUG_FLAG"` ActiveMigration string `json:"ACTIVE_MIGRATION"` - FabricTemplate string `json:"FF"` //TODO: Check variable name - FabricType string `json:"FABRIC_TYPE"` SiteId string `json:"SITE_ID"` } @@ -259,198 +259,193 @@ func (fabric *Fabric) ToMap() (map[string]interface{}, error) { return fabricAttributeMap, nil } -func (fabric *Fabric) SetConfigDefaults() { - fabric.Config.MsoSiteId = "" - fabric.Config.PhantomRpLbId1 = "" - fabric.Config.PhantomRpLbId2 = "" - fabric.Config.PhantomRpLbId3 = "" - fabric.Config.IbgpPeerTemplate = "" - fabric.Config.PhantomRpLbId4 = "" - fabric.Config.AbstractOspf = "base_ospf" - fabric.Config.FeaturePtp = "false" - fabric.Config.DhcpStartInternal = "" - fabric.Config.SspineCount = "0" - fabric.Config.AdvertisePipBgp = "false" - fabric.Config.FabricVpcQosPolicyName = "" - fabric.Config.BfdPimEnable = false - fabric.Config.DhcpEnd = "" - fabric.Config.UnderlayIsV6 = "false" - fabric.Config.FabricVpcDomainId = "" - fabric.Config.SeedSwitchCoreInterfaces = "" - fabric.Config.FabricMtuPrev = "9216" - fabric.Config.BfdIsisEnable = false - fabric.Config.HdTime = "180" - fabric.Config.OspfAuthEnable = "false" - fabric.Config.Loopback1Ipv6Range = "" - fabric.Config.RouterIdRange = "" - fabric.Config.MsoConnectivityDeployed = "" - fabric.Config.EnableMacsec = "false" - fabric.Config.DeafultQueuingPolicyOther = "" - fabric.Config.UnnumDhcpStartInternal = "" - fabric.Config.MacsecReportTimer = "" - fabric.Config.PremsoParentFabric = "" - fabric.Config.UnnumDhcpEndInternal = "" - fabric.Config.PtpDomainId = "" - fabric.Config.AutoSymmetricVrfLite = false - fabric.Config.UseLinkLocal = false - fabric.Config.BgpAsPrev = "" - fabric.Config.EnablePbr = "false" - fabric.Config.VpcPeerLinkPo = "500" - fabric.Config.VpcDelayRestoretime = "60" - fabric.Config.IsisAuthEnable = false - fabric.Config.VpcEnableIpv6NdSync = "true" - fabric.Config.AbstractIsisInterface = "isis_interface" - fabric.Config.TcamAllocation = "true" - fabric.Config.MacsecAlgorithm = "" - fabric.Config.IsisLevel = "" - fabric.Config.AbstractAnycastRp = "anycast_rp" - fabric.Config.EnableNetflow = "false" - fabric.Config.DeafultQueuingPolicyRSeries = "" - fabric.Config.TempVpcPeerLink = "int_vpc_peer_link_po" - fabric.Config.BrownfieldNetworkNameFormat = "Auto_Net_VNI$$VNI$$_VLAN$$VLAN_ID$$" - fabric.Config.EnableFabricVpcDomainId = "false" - fabric.Config.IbgpPeerTemplateLeaf = "" - fabric.Config.MgmtGwInternal = "" - fabric.Config.EnableNxapi = "true" - fabric.Config.GrfieldDebugFlag = "Disable" - fabric.Config.IsisAuthKeychainName = "" - fabric.Config.AbstractBgpNeighbor = "evpn_bgp_rr_neighbor" - fabric.Config.OspfAuthKeyId = "" - fabric.Config.PimHelloAuthEnable = "false" - fabric.Config.AbstractFeatureLeaf = "base_feature_leaf_upg" - fabric.Config.BfdAuthEnable = false - fabric.Config.ExtraConfTor = "" - fabric.Config.AaaServerConf = "" - fabric.Config.Enablerealtimebackup = "" - fabric.Config.StrictCcMode = "false" - fabric.Config.V6SubnetTargetMask = "" - fabric.Config.AbstractTrunkHost = "int_trunk_host" - fabric.Config.MstInstanceRange = "" - fabric.Config.BgpAuthEnable = "false" - fabric.Config.PmEnablePrev = "false" - fabric.Config.Enablescheduledbackup = "" - fabric.Config.AbstractOspfInterface = "ospf_interface_11_1" - fabric.Config.BfdOspfEnable = false - fabric.Config.MacsecFallbackAlgorithm = "" - fabric.Config.UnnumDhcpEnd = "" - fabric.Config.EnableAaa = false - fabric.Config.DeploymentFreeze = "false" - fabric.Config.L2HostIntfMtuPrev = "9216" - fabric.Config.NetflowMonitorList = "" - fabric.Config.EnableAgent = "false" - fabric.Config.NtpServerIpList = "" - fabric.Config.OverlayMode = "config-profile" - fabric.Config.MacsecFallbackKeyString = "" - fabric.Config.StpRootOption = "unmanaged" - fabric.Config.FabricType = "Switch_Fabric" - fabric.Config.IsisOverloadEnable = false - fabric.Config.NetflowRecordList = "" - fabric.Config.SpineCount = "0" - fabric.Config.AbstractExtraConfigBootstrap = "extra_config_bootstrap_11_1" - fabric.Config.MplsLoopbackIpRange = "" - fabric.Config.LinkStateRoutingTagPrev = "" - fabric.Config.DhcpEnable = false - fabric.Config.BfdAuthKeyId = "" - fabric.Config.MsoSiteGroupName = "" - fabric.Config.MgmtPrefixInternal = "" - fabric.Config.DhcpIpv6EnableInternal = "" - fabric.Config.BgpAuthKeyType = "" - fabric.Config.SiteId = "" - fabric.Config.TempAnycastGateway = "anycast_gateway" - fabric.Config.BrfieldDebugFlag = "Disable" - fabric.Config.BootstrapMultisubnet = "" - fabric.Config.IsisP2PEnable = false - fabric.Config.EnableNgoam = "true" - fabric.Config.CdpEnable = "false" - fabric.Config.PtpLbId = "" - fabric.Config.DhcpIpv6Enable = "" - fabric.Config.MacsecKeyString = "" - fabric.Config.OspfAuthKey = "" - fabric.Config.EnableFabricVpcDomainIdPrev = "" - fabric.Config.ExtraConfLeaf = "" - fabric.Config.DhcpStart = "" - fabric.Config.EnableTrm = "false" - fabric.Config.FeaturePtpInternal = "false" - fabric.Config.EnableNxapiHttp = "true" - fabric.Config.AbstractIsis = "base_isis_level2" - fabric.Config.MplsLbId = "" - fabric.Config.FabricVpcDomainIdPrev = "" - fabric.Config.StaticUnderlayIpAlloc = "false" - fabric.Config.MgmtV6PrefixInternal = "" - fabric.Config.MplsHandoff = "false" - fabric.Config.StpBridgePriority = "" - fabric.Config.Scheduledtime = "" - fabric.Config.MacsecCipherSuite = "" - fabric.Config.StpVlanRange = "" - fabric.Config.AnycastLbId = "" - fabric.Config.MsoControlerId = "" - fabric.Config.BfdEnable = "false" - fabric.Config.AbstractExtraConfigLeaf = "extra_config_leaf" - fabric.Config.AbstractDhcp = "base_dhcp" - fabric.Config.ExtraConfSpine = "" - fabric.Config.NtpServerVrf = "" - fabric.Config.SpineSwitchCoreInterfaces = "" - fabric.Config.IsisOverloadElapseTime = "" - fabric.Config.BootstrapConf = "" - fabric.Config.IsisAuthKey = "" - fabric.Config.DnsServerIpList = "" - fabric.Config.DnsServerVrf = "" - fabric.Config.EnableEvpn = "true" - fabric.Config.AbstractMulticast = "base_multicast_11_1" - fabric.Config.BfdAuthKey = "" - fabric.Config.AgentIntf = "eth0" - fabric.Config.L3VniMcastGroup = "" - fabric.Config.UnnumBootstrapLbId = "" - fabric.Config.VpcDomainIdRange = "1-1000" - fabric.Config.HostIntfAdminState = "true" - fabric.Config.BfdIbgpEnable = false - fabric.Config.SyslogSev = "" - fabric.Config.AbstractLoopbackInterface = "int_fabric_loopback_11_1" - fabric.Config.SyslogServerVrf = "" - fabric.Config.ExtraConfIntraLinks = "" - fabric.Config.SnmpServerHostTrap = "true" - fabric.Config.AbstractExtraConfigSpine = "extra_config_spine" - fabric.Config.PimHelloAuthKey = "" - fabric.Config.TempVpcDomainMgmt = "vpc_domain_mgmt" - fabric.Config.V6SubnetRange = "" - fabric.Config.AbstractRoutedHost = "int_routed_host" - fabric.Config.BgpAuthKey = "" - fabric.Config.InbandDhcpServers = "" - fabric.Config.IsisAuthKeychainKeyId = "" - fabric.Config.MgmtV6Prefix = "64" - fabric.Config.AbstractFeatureSpine = "base_feature_spine_upg" - fabric.Config.EnableDefaultQueuingPolicy = "false" - fabric.Config.AnycastBgwAdvertisePip = "false" - fabric.Config.NetflowExporterList = "" - fabric.Config.AbstractVlanInterface = "int_fabric_vlan_11_1" - fabric.Config.AbstractPimInterface = "pim_interface" - fabric.Config.PmEnable = "false" - fabric.Config.Loopback0Ipv6Range = "" - fabric.Config.OverlayModePrev = "" - fabric.Config.EnableVpcPeerLinkNativeVlan = "false" - fabric.Config.AbstractRouteMap = "route_map" - fabric.Config.InbandMgmtPrev = "false" - fabric.Config.AbstractVpcDomain = "base_vpc_domain_11_1" - fabric.Config.ActiveMigration = "false" - fabric.Config.DhcpEndInternal = "" - fabric.Config.BootstrapEnable = "false" - fabric.Config.AbstractExtraConfigTor = "extra_config_tor" - fabric.Config.SyslogServerIpList = "" - fabric.Config.BootstrapEnablePrev = "false" - fabric.Config.EnableTenantDhcp = "true" - fabric.Config.AnycastRpIpRangeInternal = "" - fabric.Config.BootstrapMultisubnetInternal = "" - fabric.Config.MgmtGw = "" - fabric.Config.UnnumDhcpStart = "" - fabric.Config.MgmtPrefix = "" - fabric.Config.AbstractBgpRr = "evpn_bgp_rr" - fabric.Config.InbandMgmt = "false" - fabric.Config.AbstractBgp = "base_bgp" - fabric.Config.EnableNetflowPrev = "" - fabric.Config.DeafultQueuingPolicyCloudscale = "" - fabric.Config.FabricVpcQos = "false" - fabric.Config.AaaRemoteIpEnabled = "false" - fabric.Config.SpineAddDelBedugFlag = "Disable" - fabric.Config.ActiveMigration = "false" - fabric.Config.FabricType = "Switch_Fabric" +func (config *FabricConfig) SetConfigDefaults() { + config.MsoSiteId = "" + config.PhantomRpLbId1 = "" + config.PhantomRpLbId2 = "" + config.PhantomRpLbId3 = "" + config.IbgpPeerTemplate = "" + config.PhantomRpLbId4 = "" + config.AbstractOspf = "base_ospf" + config.FeaturePtp = "false" + config.DhcpStartInternal = "" + config.SspineCount = "0" + config.AdvertisePipBgp = "false" + config.FabricVpcQosPolicyName = "" + config.DhcpEnd = "" + config.UnderlayIsV6 = "false" + config.FabricVpcDomainId = "" + config.SeedSwitchCoreInterfaces = "" + config.FabricMtuPrev = "9216" + config.HdTime = "180" + config.OspfAuthEnable = "false" + config.Loopback1Ipv6Range = "" + config.RouterIdRange = "" + config.MsoConnectivityDeployed = "" + config.EnableMacsec = "false" + config.DeafultQueuingPolicyOther = "" + config.UnnumDhcpStartInternal = "" + config.MacsecReportTimer = "" + config.PremsoParentFabric = "" + config.UnnumDhcpEndInternal = "" + config.PtpDomainId = "" + config.AutoSymmetricVrfLite = false + config.UseLinkLocal = false + config.BgpAsPrev = "" + config.EnablePbr = "false" + config.VpcPeerLinkPo = "500" + config.VpcDelayRestoretime = "60" + config.IsisAuthEnable = false + config.VpcEnableIpv6NdSync = "true" + config.AbstractIsisInterface = "isis_interface" + config.TcamAllocation = "true" + config.MacsecAlgorithm = "" + config.IsisLevel = "" + config.AbstractAnycastRp = "anycast_rp" + config.EnableNetflow = "false" + config.DeafultQueuingPolicyRSeries = "" + config.TempVpcPeerLink = "int_vpc_peer_link_po" + config.BrownfieldNetworkNameFormat = "Auto_Net_VNI$$VNI$$_VLAN$$VLAN_ID$$" + config.EnableFabricVpcDomainId = "false" + config.IbgpPeerTemplateLeaf = "" + config.MgmtGwInternal = "" + config.EnableNxapi = "true" + config.GrfieldDebugFlag = "Disable" + config.IsisAuthKeychainName = "" + config.AbstractBgpNeighbor = "evpn_bgp_rr_neighbor" + config.OspfAuthKeyId = "" + config.PimHelloAuthEnable = "false" + config.AbstractFeatureLeaf = "base_feature_leaf_upg" + config.BfdAuthEnable = "false" + config.ExtraConfTor = "" + config.AaaServerConf = "" + config.Enablerealtimebackup = "" + config.StrictCcMode = "false" + config.V6SubnetTargetMask = "" + config.AbstractTrunkHost = "int_trunk_host" + config.MstInstanceRange = "" + config.BgpAuthEnable = "false" + config.PmEnablePrev = "false" + config.Enablescheduledbackup = "" + config.AbstractOspfInterface = "ospf_interface_11_1" + config.MacsecFallbackAlgorithm = "" + config.UnnumDhcpEnd = "" + config.EnableAaa = false + config.DeploymentFreeze = "false" + config.L2HostIntfMtuPrev = "9216" + config.NetflowMonitorList = "" + config.EnableAgent = "false" + config.NtpServerIpList = "" + config.OverlayMode = "config-profile" + config.MacsecFallbackKeyString = "" + config.StpRootOption = "unmanaged" + config.FabricType = "Switch_Fabric" + config.IsisOverloadEnable = false + config.NetflowRecordList = "" + config.SpineCount = "0" + config.AbstractExtraConfigBootstrap = "extra_config_bootstrap_11_1" + config.MplsLoopbackIpRange = "" + config.LinkStateRoutingTagPrev = "" + config.DhcpEnable = false + config.MsoSiteGroupName = "" + config.MgmtPrefixInternal = "" + config.DhcpIpv6EnableInternal = "" + config.BgpAuthKeyType = "" + config.SiteId = "" + config.TempAnycastGateway = "anycast_gateway" + config.BrfieldDebugFlag = "Disable" + config.BootstrapMultisubnet = "" + config.IsisP2PEnable = false + config.EnableNgoam = "true" + config.CdpEnable = "false" + config.PtpLbId = "" + config.DhcpIpv6Enable = "" + config.MacsecKeyString = "" + config.OspfAuthKey = "" + config.EnableFabricVpcDomainIdPrev = "" + config.ExtraConfLeaf = "" + config.DhcpStart = "" + config.EnableTrm = "false" + config.FeaturePtpInternal = "false" + config.EnableNxapiHttp = "true" + config.AbstractIsis = "base_isis_level2" + config.MplsLbId = "" + config.FabricVpcDomainIdPrev = "" + config.StaticUnderlayIpAlloc = "false" + config.MgmtV6PrefixInternal = "" + config.MplsHandoff = "false" + config.StpBridgePriority = "" + config.Scheduledtime = "" + config.MacsecCipherSuite = "" + config.StpVlanRange = "" + config.AnycastLbId = "" + config.MsoControlerId = "" + config.AbstractExtraConfigLeaf = "extra_config_leaf" + config.AbstractDhcp = "base_dhcp" + config.ExtraConfSpine = "" + config.NtpServerVrf = "" + config.SpineSwitchCoreInterfaces = "" + config.IsisOverloadElapseTime = "" + config.BootstrapConf = "" + config.IsisAuthKey = "" + config.DnsServerIpList = "" + config.DnsServerVrf = "" + config.EnableEvpn = "true" + config.AbstractMulticast = "base_multicast_11_1" + config.AgentIntf = "eth0" + config.L3VniMcastGroup = "" + config.UnnumBootstrapLbId = "" + config.VpcDomainIdRange = "1-1000" + config.HostIntfAdminState = "true" + config.SyslogSev = "" + config.AbstractLoopbackInterface = "int_fabric_loopback_11_1" + config.SyslogServerVrf = "" + config.ExtraConfIntraLinks = "" + config.SnmpServerHostTrap = "true" + config.AbstractExtraConfigSpine = "extra_config_spine" + config.PimHelloAuthKey = "" + config.TempVpcDomainMgmt = "vpc_domain_mgmt" + config.V6SubnetRange = "" + config.AbstractRoutedHost = "int_routed_host" + config.BgpAuthKey = "" + config.InbandDhcpServers = "" + config.IsisAuthKeychainKeyId = "" + config.MgmtV6Prefix = "64" + config.AbstractFeatureSpine = "base_feature_spine_upg" + config.EnableDefaultQueuingPolicy = "false" + config.AnycastBgwAdvertisePip = "false" + config.NetflowExporterList = "" + config.AbstractVlanInterface = "int_fabric_vlan_11_1" + config.AbstractPimInterface = "pim_interface" + config.PmEnable = "false" + config.Loopback0Ipv6Range = "" + config.OverlayModePrev = "" + config.EnableVpcPeerLinkNativeVlan = "false" + config.AbstractRouteMap = "route_map" + config.InbandMgmtPrev = "false" + config.AbstractVpcDomain = "base_vpc_domain_11_1" + config.ActiveMigration = "false" + config.DhcpEndInternal = "" + config.BootstrapEnable = "false" + config.AbstractExtraConfigTor = "extra_config_tor" + config.SyslogServerIpList = "" + config.BootstrapEnablePrev = "false" + config.EnableTenantDhcp = "true" + config.AnycastRpIpRangeInternal = "" + config.BootstrapMultisubnetInternal = "" + config.MgmtGw = "" + config.UnnumDhcpStart = "" + config.MgmtPrefix = "" + config.AbstractBgpRr = "evpn_bgp_rr" + config.InbandMgmt = "false" + config.AbstractBgp = "base_bgp" + config.EnableNetflowPrev = "" + config.DeafultQueuingPolicyCloudscale = "" + config.FabricVpcQos = "false" + config.AaaRemoteIpEnabled = "false" + config.FabricType = "Switch_Fabric" + config.SpineAddDelBedugFlag = "Disable" + config.ActiveMigration = "false" + config.BfdEnable = "false" + } From 50deca685ef2bc1cbcd6ff98870f6ad601de3468 Mon Sep 17 00:00:00 2001 From: jgomezve Date: Thu, 9 Feb 2023 15:21:48 -0500 Subject: [PATCH 3/3] Add support to Non-Easy_fabric templates --- dcnm/data_source_dcnm_fabric.go | 12 +- dcnm/resource_dcnm_fabric.go | 333 ++++----------- dcnm/utils.go | 1 - examples/fabric/main.tf | 48 +++ .../dcnm-go-client/client/service_manager.go | 1 - .../dcnm-go-client/models/fabric.go | 393 +++++++++--------- 6 files changed, 352 insertions(+), 436 deletions(-) create mode 100644 examples/fabric/main.tf diff --git a/dcnm/data_source_dcnm_fabric.go b/dcnm/data_source_dcnm_fabric.go index 08beef4..909002f 100644 --- a/dcnm/data_source_dcnm_fabric.go +++ b/dcnm/data_source_dcnm_fabric.go @@ -352,6 +352,12 @@ func datasourceDCNMFabric() *schema.Resource { Optional: true, Computed: true, }, + + "template_props": { + Type: schema.TypeMap, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, }, } } @@ -368,7 +374,11 @@ func datasourceDCNMFabricRead(d *schema.ResourceData, m interface{}) error { return err } - setFabricAttributes(d, cont) + if stripQuotes(cont.S("templateName").String()) != "Easy_Fabric" { + setFabricCustomTemplateAttributes(d, cont) + } else { + setFabricAttributes(d, cont) + } return nil } diff --git a/dcnm/resource_dcnm_fabric.go b/dcnm/resource_dcnm_fabric.go index 9232918..cb999c6 100644 --- a/dcnm/resource_dcnm_fabric.go +++ b/dcnm/resource_dcnm_fabric.go @@ -1,6 +1,7 @@ package dcnm import ( + "encoding/json" "fmt" "log" "strconv" @@ -426,6 +427,11 @@ func resourceDCNMFabric() *schema.Resource { Optional: true, Default: "1-65534", }, + "template_props": { + Type: schema.TypeMap, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, }, } } @@ -694,32 +700,44 @@ func setFabricAttributes(d *schema.ResourceData, cont *container.Container) *sch return d } -func resourceDCNMFabricImporter(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { - log.Println("[DEBUG] Begining Importer ", d.Id()) - - dcnmClient := m.(*client.Client) - - fabricName := d.Id() +func setFabricCustomTemplateAttributes(d *schema.ResourceData, cont *container.Container) *schema.ResourceData { + d.Set("name", stripQuotes(cont.S("fabricName").String())) + d.Set("fabric_id", stripQuotes(cont.S("fabricId").String())) + d.Set("template", stripQuotes(cont.S("templateName").String())) + d.SetId(stripQuotes(cont.S("id").String())) - cont, err := getRemoteFabric(dcnmClient, fabricName) - if err != nil { - return nil, err + if cont.Exists("serviceVrfTemplate") && stripQuotes(cont.S("serviceVrfTemplate").String()) != "null" { + d.Set("service_template", stripQuotes(cont.S("serviceVrfTemplate").String())) + } + if cont.Exists("source") && stripQuotes(cont.S("source").String()) != "null" { + d.Set("source", stripQuotes(cont.S("source").String())) } - stateImport := setFabricAttributes(d, cont) + var strByte []byte + if cont.Exists("nvPairs") { + strJson := models.G(cont, "nvPairs") + // strJson = strings.ReplaceAll(strJson, "\\", "") + strByte = []byte(strJson) + var fabricTemplateConfig map[string]string + json.Unmarshal(strByte, &fabricTemplateConfig) + props, ok := d.GetOk("template_props") - log.Println("[DEBUG] End of Importer ", d.Id()) - return []*schema.ResourceData{stateImport}, nil -} + map2 := make(map[string]interface{}) + for k := range props.(map[string]interface{}) { + map2[k] = fabricTemplateConfig[k] + } + if !ok { + d.Set("template_props", fabricTemplateConfig) + } else { -func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { - log.Println("[DEBUG] Begining Create method ") + d.Set("template_props", map2) + } + } - dcnmClient := m.(*client.Client) + return d +} - fabric := models.Fabric{} - fabric.Name = d.Get("name").(string) - fabric.Template = d.Get("template").(string) +func buildFabricPayload(d *schema.ResourceData, fabric models.Fabric) models.FabricConfig { configMap := models.FabricConfig{} configMap.SetConfigDefaults() @@ -944,7 +962,49 @@ func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { configMap.FabricTemplate = fabric.Template configMap.FabricName = fabric.Name - fabric.Config = configMap + + return configMap +} + +func resourceDCNMFabricImporter(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { + log.Println("[DEBUG] Begining Importer ", d.Id()) + + dcnmClient := m.(*client.Client) + + fabricName := d.Id() + + cont, err := getRemoteFabric(dcnmClient, fabricName) + if err != nil { + return nil, err + } + + var stateImport *schema.ResourceData + if stripQuotes(cont.S("templateName").String()) != "Easy_Fabric" { + stateImport = setFabricCustomTemplateAttributes(d, cont) + } else { + stateImport = setFabricAttributes(d, cont) + } + + log.Println("[DEBUG] End of Importer ", d.Id()) + return []*schema.ResourceData{stateImport}, nil +} + +func resourceDCNMFabricCreate(d *schema.ResourceData, m interface{}) error { + log.Println("[DEBUG] Begining Create method ") + + dcnmClient := m.(*client.Client) + + fabric := models.Fabric{} + fabric.Name = d.Get("name").(string) + fabric.Template = d.Get("template").(string) + + if templateConfig, ok := d.GetOk("template_props"); ok { + templateConfigMap := templateConfig.(map[string]interface{}) + fabric.Config = templateConfigMap + } else { + configMap := buildFabricPayload(d, fabric) + fabric.Config = configMap + } durl := "/rest/control/fabrics" cont, err := dcnmClient.Save(durl, &fabric) @@ -968,231 +1028,14 @@ func resourceDCNMFabricUpdate(d *schema.ResourceData, m interface{}) error { fabric.Template = d.Get("template").(string) fabric.FabricId = d.Get("fabric_id").(string) - configMap := models.FabricConfig{} - configMap.SetConfigDefaults() - - if asn, ok := d.GetOk("asn"); ok { - configMap.Asn = strconv.Itoa(asn.(int)) - } - if underlayRoutingNumbering, ok := d.GetOk("underlay_interface_numbering"); ok { - configMap.UnderlayInterfaceNumbering = underlayRoutingNumbering.(string) - } - if underlaySubnetMask, ok := d.GetOk("underlay_subnet_mask"); ok { - configMap.UnderlaySubnetMask = strconv.Itoa(underlaySubnetMask.(int)) - } - if uderlayRoutingProtocol, ok := d.GetOk("underlay_routing_protocol"); ok { - configMap.UnderlayRoutingProcotol = uderlayRoutingProtocol.(string) - } - if rrCount, ok := d.GetOk("route_reflectors_count"); ok { - configMap.RouteReflectorCount = strconv.Itoa(rrCount.(int)) - } - if anycastMac, ok := d.GetOk("anycast_mac"); ok { - configMap.AnycastMac = anycastMac.(string) - } - if replicationMode, ok := d.GetOk("replication_mode"); ok { - configMap.ReplicationMode = replicationMode.(string) - } - if multicastGroupSubnet, ok := d.GetOk("multicast_group_subnet"); ok { - configMap.MulticastGroupSubnet = multicastGroupSubnet.(string) - } - if rpCount, ok := d.GetOk("rendevous_point_count"); ok { - configMap.RendevouzPointCount = strconv.Itoa(rpCount.(int)) - } - if rpMode, ok := d.GetOk("rendevous_point_mode"); ok { - configMap.RendevouzPointMode = rpMode.(string) - } - if rpId, ok := d.GetOk("rendevous_loopback_id"); ok { - configMap.RendevouzPointLoopbackId = strconv.Itoa(rpId.(int)) - } - if vpcPlVlan, ok := d.GetOk("vpc_peer_link_vlan"); ok { - configMap.VpcPeerLinkVlan = strconv.Itoa(vpcPlVlan.(int)) - } - if vpcPkaOption, ok := d.GetOk("vpc_peer_keep_alive_option"); ok { - configMap.VpcPeerKeepAliveOption = vpcPkaOption.(string) - } - if vpcAutoRectime, ok := d.GetOk("vpc_auto_recovery_time"); ok { - configMap.VpcAutoRecoveryTime = strconv.Itoa(vpcAutoRectime.(int)) - } - if vpcDelayResTime, ok := d.GetOk("vpc_delay_restore_time"); ok { - configMap.VpcDelayRestore = strconv.Itoa(vpcDelayResTime.(int)) - } - if rtLooId, ok := d.GetOk("underlay_routing_loopback_id"); ok { - configMap.UnderlayRoutingLoopbackId = strconv.Itoa(rtLooId.(int)) + if templateConfig, ok := d.GetOk("template_props"); ok { + templateConfigMap := templateConfig.(map[string]interface{}) + fabric.Config = templateConfigMap } else { - configMap.UnderlayRoutingLoopbackId = "0" - } - if vtepLooId, ok := d.GetOk("underlay_vtep_loopback_id"); ok { - configMap.UnderlayVtepLoopbackId = strconv.Itoa(vtepLooId.(int)) - } - if rtProtoTag, ok := d.GetOk("underlay_routing_protocol_tag"); ok { - configMap.UnderlayRoutingProtocolTag = rtProtoTag.(string) - } - if ospfAreaId, ok := d.GetOk("ospf_area_id"); ok { - configMap.OspfAreaId = ospfAreaId.(string) + configMap := buildFabricPayload(d, fabric) + fabric.Config = configMap } - if ospfBfpEnable, ok := d.GetOk("ospf_bfd"); ok { - if ospfBfpEnable.(bool) { - configMap.BfdOspf = "true" - configMap.BfdEnable = "true" - } else { - configMap.BfdOspf = "false" - } - } else { - configMap.BfdOspf = "false" - } - if ibgpOspfEnable, ok := d.GetOk("ibgp_bfd"); ok { - if ibgpOspfEnable.(bool) { - configMap.IbgpOspf = "true" - configMap.BfdEnable = "true" - } else { - configMap.IbgpOspf = "false" - } - } else { - configMap.IbgpOspf = "false" - } - if isisBfpEnable, ok := d.GetOk("isis_bfd"); ok { - if isisBfpEnable.(bool) { - configMap.IsisOspf = "true" - configMap.BfdEnable = "true" - } else { - configMap.IsisOspf = "false" - } - } else { - configMap.IsisOspf = "false" - } - if pimBfpEnable, ok := d.GetOk("pim_bfd"); ok { - if pimBfpEnable.(bool) { - configMap.PimOspf = "true" - configMap.BfdEnable = "true" - } else { - configMap.PimOspf = "false" - } - } else { - configMap.PimOspf = "false" - } - if bfd_authentication_key_id, ok := d.GetOk("bfd_authentication_key_id"); ok { - configMap.BfdAuthKeyId = strconv.Itoa(bfd_authentication_key_id.(int)) - configMap.BfdAuthEnable = "true" - } - if bfd_authentication_key, ok := d.GetOk("bfd_authentication_key"); ok { - configMap.BfdAuthKey = bfd_authentication_key.(string) - } - if ibgpPeerTempConf, ok := d.GetOk("ibgp_peer_template_config"); ok { - configMap.IbgpPeerTemplate = ibgpPeerTempConf.(string) - } - if leafIbgpPeerTempConf, ok := d.GetOk("leaf_ibgp_peer_template_config"); ok { - configMap.IbgpPeerTemplateLeaf = leafIbgpPeerTempConf.(string) - } - if vrfTemp, ok := d.GetOk("vrf_template"); ok { - configMap.VrfTemplate = vrfTemp.(string) - } - if netTemp, ok := d.GetOk("network_template"); ok { - configMap.NetworkTemplate = netTemp.(string) - } - if vrfExtTemp, ok := d.GetOk("vrf_extension_template"); ok { - configMap.VrfExtensionTemplate = vrfExtTemp.(string) - } - if netExtTemp, ok := d.GetOk("network_extension_template"); ok { - configMap.NetworkExtensionTemplate = netExtTemp.(string) - } - if overlayMode, ok := d.GetOk("overlay_mode"); ok { - configMap.OverlayMode = overlayMode.(string) - } - if fabMtu, ok := d.GetOk("intra_fabric_interface_mtu"); ok { - configMap.IntraFabricInterfaceMtu = strconv.Itoa(fabMtu.(int)) - } - if hostMtu, ok := d.GetOk("layer_2_host_interface_mtu"); ok { - configMap.Layer2HostInterfaceMtu = strconv.Itoa(hostMtu.(int)) - } - if psMode, ok := d.GetOk("power_supply_mode"); ok { - configMap.PowerSupplyMode = psMode.(string) - } - if coppProf, ok := d.GetOk("copp_profile"); ok { - configMap.CoppProfile = coppProf.(string) - } - if enableVxlan, ok := d.GetOk("enable_vxlan_oam"); ok { - if enableVxlan.(bool) { - configMap.EnableNgoam = "true" - } else { - configMap.EnableNgoam = "false" - } - } else { - configMap.EnableNgoam = "false" - } - if enableNxApi, ok := d.GetOk("enable_nx_api"); ok { - if enableNxApi.(bool) { - configMap.EnableNxapi = "true" - } else { - configMap.EnableNxapi = "false" - } - } else { - configMap.EnableNxapi = "false" - } - if enableNxApiHttp, ok := d.GetOk("enable_nx_api_on_http"); ok { - if enableNxApiHttp.(bool) { - configMap.EnableNxapiHttp = "true" - } else { - configMap.EnableNxapiHttp = "false" - } - } else { - configMap.EnableNxapiHttp = "false" - } - if enableNdfcAsTrap, ok := d.GetOk("enable_ndfc_as_trap_host"); ok { - if enableNdfcAsTrap.(bool) { - configMap.SnmpServerHostTrap = "true" - } else { - configMap.SnmpServerHostTrap = "false" - } - } else { - configMap.SnmpServerHostTrap = "false" - } - if rtLooIpRange, ok := d.GetOk("underlay_routing_loopback_ip_range"); ok { - configMap.UnderlayRoutingLoopbackIpRange = rtLooIpRange.(string) - } - if vtepLooIpRange, ok := d.GetOk("underlay_vtep_loopback_ip_range"); ok { - configMap.UnderlayVtepLoopbackIpRange = vtepLooIpRange.(string) - } - if rpLooIpRange, ok := d.GetOk("underlay_rp_loopback_ip_range"); ok { - configMap.UnderlayRpLoopbackIpRange = rpLooIpRange.(string) - } - if subIpRange, ok := d.GetOk("underlay_subnet_ip_range"); ok { - configMap.UnderlaySubnetIpRange = subIpRange.(string) - } - if l2VniRange, ok := d.GetOk("layer_2_vxlan_vni_range"); ok { - configMap.Layer2VxlanVniRange = l2VniRange.(string) - } - if l3VniRange, ok := d.GetOk("layer_3_vxlan_vni_range"); ok { - configMap.Layer3VxlanVniRange = l3VniRange.(string) - } - if netVlanRange, ok := d.GetOk("network_vlan_range"); ok { - configMap.NetworkVlanRange = netVlanRange.(string) - } - if vrfVlanRange, ok := d.GetOk("vrf_vlan_range"); ok { - configMap.VrfVlanRange = vrfVlanRange.(string) - } - if subIfDot1qRange, ok := d.GetOk("subinterface_dot1q_range"); ok { - configMap.SubinterfaceDot1qRange = subIfDot1qRange.(string) - } - if vrfLiteDeployment, ok := d.GetOk("vrf_lite_deployment"); ok { - configMap.VrfLiteDeployment = vrfLiteDeployment.(string) - } - if vrfLifeSubnetIpRange, ok := d.GetOk("vrf_lite_subnet_ip_range"); ok { - configMap.VrfLiteSubnetIpRange = vrfLifeSubnetIpRange.(string) - } - if vrfLiteSubnetMask, ok := d.GetOk("vrf_lite_subnet_mask"); ok { - configMap.VrfLiteSubnetMask = strconv.Itoa(vrfLiteSubnetMask.(int)) - } - if svcNetVlanRange, ok := d.GetOk("service_network_vlan_range"); ok { - configMap.ServiceNetworkVlanRange = svcNetVlanRange.(string) - } - if rmSeqRange, ok := d.GetOk("route_map_sequence_number_range"); ok { - configMap.RouteMapSequenceNumberRange = rmSeqRange.(string) - } - - configMap.FabricTemplate = fabric.Template - configMap.FabricName = fabric.Name - fabric.Config = configMap idInt, _ := strconv.Atoi(d.Id()) fabric.Id = idInt @@ -1220,7 +1063,11 @@ func resourceDCNMFabricRead(d *schema.ResourceData, m interface{}) error { return err } - setFabricAttributes(d, cont) + if _, ok := d.GetOk("template_props"); ok { + setFabricCustomTemplateAttributes(d, cont) + } else { + setFabricAttributes(d, cont) + } log.Println("[DEBUG] End of Read method ", d.Id()) return nil diff --git a/dcnm/utils.go b/dcnm/utils.go index 62f756f..fb56a6a 100644 --- a/dcnm/utils.go +++ b/dcnm/utils.go @@ -12,7 +12,6 @@ import ( ) func stripQuotes(word string) string { - if strings.HasPrefix(word, "\"") && strings.HasSuffix(word, "\"") { return strings.TrimSuffix(strings.TrimPrefix(word, "\""), "\"") } diff --git a/examples/fabric/main.tf b/examples/fabric/main.tf new file mode 100644 index 0000000..0195b9c --- /dev/null +++ b/examples/fabric/main.tf @@ -0,0 +1,48 @@ +terraform { + required_providers { + dcnm = { + source = "CiscoDevNet/dcnm" + } + } +} + +provider "dcnm" { + username = "" + password = "" + url = "" + platform = "" +} + +resource "dcnm_fabric" "easy_default" { + name = "FAB1" + asn = 65003 +} + +resource "dcnm_fabric" "easy_default_custom" { + name = "FAB2" + asn = 65003 + overlay_mode = "cli" + underlay_routing_loopback_ip_range = "192.168.0.0/20" + underlay_vtep_loopback_ip_range = "192.168.1.0/20" + underlay_subnet_ip_range = "10.0.0.0/16" + ospf_bfd = true + pim_bfd = true + enable_vxlan_oam = false + enable_nx_api = false + enable_nx_api_on_http = false + enable_ndfc_as_trap_host = false + +} + +resource "dcnm_fabric" "custom" { + name = "FAB3" + asn = 65001 + template = "LAN_Monitor" + template_props = { + "FABRIC_NAME" : "FAB3", + "FABRIC_TECHNOLOGY" : "LANMonitor", + "FABRIC_TYPE" : "LANMonitor", + "FF" : "LANMonitor", + "IS_READ_ONLY" : "true" + } +} diff --git a/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go b/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go index fc153e4..eee2cd2 100644 --- a/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go +++ b/vendor/github.com/ciscoecosystem/dcnm-go-client/client/service_manager.go @@ -23,7 +23,6 @@ func (c *Client) GetviaURL(endpoint string) (*container.Container, error) { if cont == nil { return nil, errors.New("Empty response body") } - return cont, checkforerrors(cont, resp) } diff --git a/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go b/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go index 94e56db..e78a2dd 100644 --- a/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go +++ b/vendor/github.com/ciscoecosystem/dcnm-go-client/models/fabric.go @@ -1,11 +1,11 @@ package models type Fabric struct { - Id int `json:",omitempty"` - Name string `json:",omitempty"` - FabricId string `json:",omitempty"` - Template string `json:",omitempty"` - Config FabricConfig `json:",omitempty"` + Id int `json:",omitempty"` + Name string `json:",omitempty"` + FabricId string `json:",omitempty"` + Template string `json:",omitempty"` + Config interface{} `json:",omitempty"` } type FabricConfig struct { @@ -67,183 +67,190 @@ type FabricConfig struct { ServiceNetworkVlanRange string `json:"SERVICE_NETWORK_VLAN_RANGE"` RouteMapSequenceNumberRange string `json:"ROUTE_MAP_SEQUENCE_NUMBER_RANGE"` // Parameters not exposed in the Terraform resource - MsoSiteId string `json:"MSO_SITE_ID"` - PhantomRpLbId1 string `json:"PHANTOM_RP_LB_ID1"` - PhantomRpLbId2 string `json:"PHANTOM_RP_LB_ID2"` - PhantomRpLbId3 string `json:"PHANTOM_RP_LB_ID3"` - PhantomRpLbId4 string `json:"PHANTOM_RP_LB_ID4"` - AbstractOspf string `json:"abstract_ospf"` - FeaturePtp string `json:"FEATURE_PTP"` - DhcpStartInternal string `json:"DHCP_START_INTERNAL"` - SspineCount string `json:"SSPINE_COUNT"` - AdvertisePipBgp string `json:"ADVERTISE_PIP_BGP"` - FabricVpcQosPolicyName string `json:"FABRIC_VPC_QOS_POLICY_NAME"` - DhcpEnd string `json:"DHCP_END"` - UnderlayIsV6 string `json:"UNDERLAY_IS_V6"` - FabricVpcDomainId string `json:"FABRIC_VPC_DOMAIN_ID"` - SeedSwitchCoreInterfaces string `json:"SEED_SWITCH_CORE_INTERFACES"` - FabricMtuPrev string `json:"FABRIC_MTU_PREV"` - HdTime string `json:"HD_TIME"` - OspfAuthEnable string `json:"OSPF_AUTH_ENABLE"` - Loopback1Ipv6Range string `json:"LOOPBACK1_IPV6_RANGE"` - RouterIdRange string `json:"ROUTER_ID_RANGE"` - MsoConnectivityDeployed string `json:"MSO_CONNECTIVITY_DEPLOYED"` - EnableMacsec string `json:"ENABLE_MACSEC"` - DeafultQueuingPolicyOther string `json:"DEAFULT_QUEUING_POLICY_OTHER"` - UnnumDhcpStartInternal string `json:"UNNUM_DHCP_START_INTERNAL"` - MacsecReportTimer string `json:"MACSEC_REPORT_TIMER"` - PremsoParentFabric string `json:"PREMSO_PARENT_FABRIC"` - UnnumDhcpEndInternal string `json:"UNNUM_DHCP_END_INTERNAL"` - PtpDomainId string `json:"PTP_DOMAIN_ID"` - AutoSymmetricVrfLite bool `json:"AUTO_SYMMETRIC_VRF_LITE"` - UseLinkLocal bool `json:"USE_LINK_LOCAL"` - BgpAsPrev string `json:"BGP_AS_PREV"` - EnablePbr string `json:"ENABLE_PBR"` - VpcPeerLinkPo string `json:"VPC_PEER_LINK_PO"` - IsisAuthEnable bool `json:"ISIS_AUTH_ENABLE"` - VpcEnableIpv6NdSync string `json:"VPC_ENABLE_IPv6_ND_SYNC"` - AbstractIsisInterface string `json:"abstract_isis_interface"` - TcamAllocation string `json:"TCAM_ALLOCATION"` - MacsecAlgorithm string `json:"MACSEC_ALGORITHM"` - IsisLevel string `json:"ISIS_LEVEL"` - AbstractAnycastRp string `json:"abstract_anycast_rp"` - EnableNetflow string `json:"ENABLE_NETFLOW"` - DeafultQueuingPolicyRSeries string `json:"DEAFULT_QUEUING_POLICY_R_SERIES"` - TempVpcPeerLink string `json:"temp_vpc_peer_link"` - BrownfieldNetworkNameFormat string `json:"BROWNFIELD_NETWORK_NAME_FORMAT"` - EnableFabricVpcDomainId string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID"` - MgmtGwInternal string `json:"MGMT_GW_INTERNAL"` - GrfieldDebugFlag string `json:"GRFIELD_DEBUG_FLAG"` - IsisAuthKeychainName string `json:"ISIS_AUTH_KEYCHAIN_NAME"` - AbstractBgpNeighbor string `json:"abstract_bgp_neighbor"` - OspfAuthKeyId string `json:"OSPF_AUTH_KEY_ID"` - PimHelloAuthEnable string `json:"PIM_HELLO_AUTH_ENABLE"` - AbstractFeatureLeaf string `json:"abstract_feature_leaf"` - ExtraConfTor string `json:"EXTRA_CONF_TOR"` - AaaServerConf string `json:"AAA_SERVER_CONF"` - Enablerealtimebackup string `json:"enableRealTimeBackup"` - StrictCcMode string `json:"STRICT_CC_MODE"` - V6SubnetTargetMask string `json:"V6_SUBNET_TARGET_MASK"` - AbstractTrunkHost string `json:"abstract_trunk_host"` - MstInstanceRange string `json:"MST_INSTANCE_RANGE"` - BgpAuthEnable string `json:"BGP_AUTH_ENABLE"` - PmEnablePrev string `json:"PM_ENABLE_PREV"` - Enablescheduledbackup string `json:"enableScheduledBackup"` - AbstractOspfInterface string `json:"abstract_ospf_interface"` - MacsecFallbackAlgorithm string `json:"MACSEC_FALLBACK_ALGORITHM"` - UnnumDhcpEnd string `json:"UNNUM_DHCP_END"` - EnableAaa bool `json:"ENABLE_AAA"` - DeploymentFreeze string `json:"DEPLOYMENT_FREEZE"` - L2HostIntfMtuPrev string `json:"L2_HOST_INTF_MTU_PREV"` - NetflowMonitorList string `json:"NETFLOW_MONITOR_LIST"` - EnableAgent string `json:"ENABLE_AGENT"` - NtpServerIpList string `json:"NTP_SERVER_IP_LIST"` - OverlayMode string `json:"OVERLAY_MODE"` - MacsecFallbackKeyString string `json:"MACSEC_FALLBACK_KEY_STRING"` - StpRootOption string `json:"STP_ROOT_OPTION"` - IsisOverloadEnable bool `json:"ISIS_OVERLOAD_ENABLE"` - NetflowRecordList string `json:"NETFLOW_RECORD_LIST"` - SpineCount string `json:"SPINE_COUNT"` - AbstractExtraConfigBootstrap string `json:"abstract_extra_config_bootstrap"` - MplsLoopbackIpRange string `json:"MPLS_LOOPBACK_IP_RANGE"` - LinkStateRoutingTagPrev string `json:"LINK_STATE_ROUTING_TAG_PREV"` - DhcpEnable bool `json:"DHCP_ENABLE"` - MsoSiteGroupName string `json:"MSO_SITE_GROUP_NAME"` - MgmtPrefixInternal string `json:"MGMT_PREFIX_INTERNAL"` - DhcpIpv6EnableInternal string `json:"DHCP_IPV6_ENABLE_INTERNAL"` - BgpAuthKeyType string `json:"BGP_AUTH_KEY_TYPE"` - TempAnycastGateway string `json:"temp_anycast_gateway"` - BrfieldDebugFlag string `json:"BRFIELD_DEBUG_FLAG"` - BootstrapMultisubnet string `json:"BOOTSTRAP_MULTISUBNET"` - IsisP2PEnable bool `json:"ISIS_P2P_ENABLE"` - CdpEnable string `json:"CDP_ENABLE"` - PtpLbId string `json:"PTP_LB_ID"` - DhcpIpv6Enable string `json:"DHCP_IPV6_ENABLE"` - MacsecKeyString string `json:"MACSEC_KEY_STRING"` - OspfAuthKey string `json:"OSPF_AUTH_KEY"` - EnableFabricVpcDomainIdPrev string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID_PREV"` - ExtraConfLeaf string `json:"EXTRA_CONF_LEAF"` - DhcpStart string `json:"DHCP_START"` - EnableTrm string `json:"ENABLE_TRM"` - FeaturePtpInternal string `json:"FEATURE_PTP_INTERNAL"` - AbstractIsis string `json:"abstract_isis"` - MplsLbId string `json:"MPLS_LB_ID"` - FabricVpcDomainIdPrev string `json:"FABRIC_VPC_DOMAIN_ID_PREV"` - StaticUnderlayIpAlloc string `json:"STATIC_UNDERLAY_IP_ALLOC"` - MgmtV6PrefixInternal string `json:"MGMT_V6PREFIX_INTERNAL"` - MplsHandoff string `json:"MPLS_HANDOFF"` - StpBridgePriority string `json:"STP_BRIDGE_PRIORITY"` - Scheduledtime string `json:"scheduledTime"` - MacsecCipherSuite string `json:"MACSEC_CIPHER_SUITE"` - StpVlanRange string `json:"STP_VLAN_RANGE"` - AnycastLbId string `json:"ANYCAST_LB_ID"` - MsoControlerId string `json:"MSO_CONTROLER_ID"` - AbstractExtraConfigLeaf string `json:"abstract_extra_config_leaf"` - AbstractDhcp string `json:"abstract_dhcp"` - ExtraConfSpine string `json:"EXTRA_CONF_SPINE"` - NtpServerVrf string `json:"NTP_SERVER_VRF"` - SpineSwitchCoreInterfaces string `json:"SPINE_SWITCH_CORE_INTERFACES"` - IsisOverloadElapseTime string `json:"ISIS_OVERLOAD_ELAPSE_TIME"` - BootstrapConf string `json:"BOOTSTRAP_CONF"` - IsisAuthKey string `json:"ISIS_AUTH_KEY"` - DnsServerIpList string `json:"DNS_SERVER_IP_LIST"` - DnsServerVrf string `json:"DNS_SERVER_VRF"` - EnableEvpn string `json:"ENABLE_EVPN"` - AbstractMulticast string `json:"abstract_multicast"` - AgentIntf string `json:"AGENT_INTF"` - L3VniMcastGroup string `json:"L3VNI_MCAST_GROUP"` - UnnumBootstrapLbId string `json:"UNNUM_BOOTSTRAP_LB_ID"` - VpcDomainIdRange string `json:"VPC_DOMAIN_ID_RANGE"` - HostIntfAdminState string `json:"HOST_INTF_ADMIN_STATE"` - SyslogSev string `json:"SYSLOG_SEV"` - AbstractLoopbackInterface string `json:"abstract_loopback_interface"` - SyslogServerVrf string `json:"SYSLOG_SERVER_VRF"` - ExtraConfIntraLinks string `json:"EXTRA_CONF_INTRA_LINKS"` - AbstractExtraConfigSpine string `json:"abstract_extra_config_spine"` - PimHelloAuthKey string `json:"PIM_HELLO_AUTH_KEY"` - TempVpcDomainMgmt string `json:"temp_vpc_domain_mgmt"` - V6SubnetRange string `json:"V6_SUBNET_RANGE"` - AbstractRoutedHost string `json:"abstract_routed_host"` - BgpAuthKey string `json:"BGP_AUTH_KEY"` - InbandDhcpServers string `json:"INBAND_DHCP_SERVERS"` - IsisAuthKeychainKeyId string `json:"ISIS_AUTH_KEYCHAIN_KEY_ID"` - MgmtV6Prefix string `json:"MGMT_V6PREFIX"` - AbstractFeatureSpine string `json:"abstract_feature_spine"` - EnableDefaultQueuingPolicy string `json:"ENABLE_DEFAULT_QUEUING_POLICY"` - AnycastBgwAdvertisePip string `json:"ANYCAST_BGW_ADVERTISE_PIP"` - NetflowExporterList string `json:"NETFLOW_EXPORTER_LIST"` - AbstractVlanInterface string `json:"abstract_vlan_interface"` - FabricName string `json:"FABRIC_NAME"` - AbstractPimInterface string `json:"abstract_pim_interface"` - PmEnable string `json:"PM_ENABLE"` - Loopback0Ipv6Range string `json:"LOOPBACK0_IPV6_RANGE"` - EnableVpcPeerLinkNativeVlan string `json:"ENABLE_VPC_PEER_LINK_NATIVE_VLAN"` - AbstractRouteMap string `json:"abstract_route_map"` - InbandMgmtPrev string `json:"INBAND_MGMT_PREV"` - AbstractVpcDomain string `json:"abstract_vpc_domain"` - DhcpEndInternal string `json:"DHCP_END_INTERNAL"` - BootstrapEnable string `json:"BOOTSTRAP_ENABLE"` - AbstractExtraConfigTor string `json:"abstract_extra_config_tor"` - SyslogServerIpList string `json:"SYSLOG_SERVER_IP_LIST"` - BootstrapEnablePrev string `json:"BOOTSTRAP_ENABLE_PREV"` - EnableTenantDhcp string `json:"ENABLE_TENANT_DHCP"` - AnycastRpIpRangeInternal string `json:"ANYCAST_RP_IP_RANGE_INTERNAL"` - BootstrapMultisubnetInternal string `json:"BOOTSTRAP_MULTISUBNET_INTERNAL"` - MgmtGw string `json:"MGMT_GW"` - UnnumDhcpStart string `json:"UNNUM_DHCP_START"` - MgmtPrefix string `json:"MGMT_PREFIX"` - AbstractBgpRr string `json:"abstract_bgp_rr"` - InbandMgmt string `json:"INBAND_MGMT"` - AbstractBgp string `json:"abstract_bgp"` - EnableNetflowPrev string `json:"ENABLE_NETFLOW_PREV"` - DeafultQueuingPolicyCloudscale string `json:"DEAFULT_QUEUING_POLICY_CLOUDSCALE"` - FabricVpcQos string `json:"FABRIC_VPC_QOS"` - AaaRemoteIpEnabled string `json:"AAA_REMOTE_IP_ENABLED"` - FabricTemplate string `json:"FF"` - FabricType string `json:"FABRIC_TYPE"` - SpineAddDelBedugFlag string `json:"SSPINE_ADD_DEL_DEBUG_FLAG"` - ActiveMigration string `json:"ACTIVE_MIGRATION"` - SiteId string `json:"SITE_ID"` + MsoSiteId string `json:"MSO_SITE_ID"` + PhantomRpLbId1 string `json:"PHANTOM_RP_LB_ID1"` + PhantomRpLbId2 string `json:"PHANTOM_RP_LB_ID2"` + PhantomRpLbId3 string `json:"PHANTOM_RP_LB_ID3"` + PhantomRpLbId4 string `json:"PHANTOM_RP_LB_ID4"` + AbstractOspf string `json:"abstract_ospf"` + FeaturePtp string `json:"FEATURE_PTP"` + DhcpStartInternal string `json:"DHCP_START_INTERNAL"` + SspineCount string `json:"SSPINE_COUNT"` + AdvertisePipBgp string `json:"ADVERTISE_PIP_BGP"` + FabricVpcQosPolicyName string `json:"FABRIC_VPC_QOS_POLICY_NAME"` + DhcpEnd string `json:"DHCP_END"` + UnderlayIsV6 string `json:"UNDERLAY_IS_V6"` + FabricVpcDomainId string `json:"FABRIC_VPC_DOMAIN_ID"` + SeedSwitchCoreInterfaces string `json:"SEED_SWITCH_CORE_INTERFACES"` + FabricMtuPrev string `json:"FABRIC_MTU_PREV"` + HdTime string `json:"HD_TIME"` + OspfAuthEnable string `json:"OSPF_AUTH_ENABLE"` + Loopback1Ipv6Range string `json:"LOOPBACK1_IPV6_RANGE"` + RouterIdRange string `json:"ROUTER_ID_RANGE"` + MsoConnectivityDeployed string `json:"MSO_CONNECTIVITY_DEPLOYED"` + EnableMacsec string `json:"ENABLE_MACSEC"` + DeafultQueuingPolicyOther string `json:"DEAFULT_QUEUING_POLICY_OTHER"` + UnnumDhcpStartInternal string `json:"UNNUM_DHCP_START_INTERNAL"` + MacsecReportTimer string `json:"MACSEC_REPORT_TIMER"` + PremsoParentFabric string `json:"PREMSO_PARENT_FABRIC"` + UnnumDhcpEndInternal string `json:"UNNUM_DHCP_END_INTERNAL"` + PtpDomainId string `json:"PTP_DOMAIN_ID"` + AutoSymmetricVrfLite string `json:"AUTO_SYMMETRIC_VRF_LITE"` + UseLinkLocal string `json:"USE_LINK_LOCAL"` + BgpAsPrev string `json:"BGP_AS_PREV"` + EnablePbr string `json:"ENABLE_PBR"` + VpcPeerLinkPo string `json:"VPC_PEER_LINK_PO"` + IsisAuthEnable string `json:"ISIS_AUTH_ENABLE"` + VpcEnableIpv6NdSync string `json:"VPC_ENABLE_IPv6_ND_SYNC"` + AbstractIsisInterface string `json:"abstract_isis_interface"` + TcamAllocation string `json:"TCAM_ALLOCATION"` + MacsecAlgorithm string `json:"MACSEC_ALGORITHM"` + IsisLevel string `json:"ISIS_LEVEL"` + AbstractAnycastRp string `json:"abstract_anycast_rp"` + EnableNetflow string `json:"ENABLE_NETFLOW"` + DeafultQueuingPolicyRSeries string `json:"DEAFULT_QUEUING_POLICY_R_SERIES"` + TempVpcPeerLink string `json:"temp_vpc_peer_link"` + BrownfieldNetworkNameFormat string `json:"BROWNFIELD_NETWORK_NAME_FORMAT"` + EnableFabricVpcDomainId string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID"` + MgmtGwInternal string `json:"MGMT_GW_INTERNAL"` + GrfieldDebugFlag string `json:"GRFIELD_DEBUG_FLAG"` + IsisAuthKeychainName string `json:"ISIS_AUTH_KEYCHAIN_NAME"` + AbstractBgpNeighbor string `json:"abstract_bgp_neighbor"` + OspfAuthKeyId string `json:"OSPF_AUTH_KEY_ID"` + PimHelloAuthEnable string `json:"PIM_HELLO_AUTH_ENABLE"` + AbstractFeatureLeaf string `json:"abstract_feature_leaf"` + ExtraConfTor string `json:"EXTRA_CONF_TOR"` + AaaServerConf string `json:"AAA_SERVER_CONF"` + Enablerealtimebackup string `json:"enableRealTimeBackup"` + StrictCcMode string `json:"STRICT_CC_MODE"` + V6SubnetTargetMask string `json:"V6_SUBNET_TARGET_MASK"` + AbstractTrunkHost string `json:"abstract_trunk_host"` + MstInstanceRange string `json:"MST_INSTANCE_RANGE"` + BgpAuthEnable string `json:"BGP_AUTH_ENABLE"` + PmEnablePrev string `json:"PM_ENABLE_PREV"` + Enablescheduledbackup string `json:"enableScheduledBackup"` + AbstractOspfInterface string `json:"abstract_ospf_interface"` + MacsecFallbackAlgorithm string `json:"MACSEC_FALLBACK_ALGORITHM"` + UnnumDhcpEnd string `json:"UNNUM_DHCP_END"` + EnableAaa string `json:"ENABLE_AAA"` + DeploymentFreeze string `json:"DEPLOYMENT_FREEZE"` + L2HostIntfMtuPrev string `json:"L2_HOST_INTF_MTU_PREV"` + NetflowMonitorList string `json:"NETFLOW_MONITOR_LIST"` + EnableAgent string `json:"ENABLE_AGENT"` + NtpServerIpList string `json:"NTP_SERVER_IP_LIST"` + OverlayMode string `json:"OVERLAY_MODE"` + MacsecFallbackKeyString string `json:"MACSEC_FALLBACK_KEY_STRING"` + StpRootOption string `json:"STP_ROOT_OPTION"` + IsisOverloadEnable string `json:"ISIS_OVERLOAD_ENABLE"` + NetflowRecordList string `json:"NETFLOW_RECORD_LIST"` + SpineCount string `json:"SPINE_COUNT"` + AbstractExtraConfigBootstrap string `json:"abstract_extra_config_bootstrap"` + MplsLoopbackIpRange string `json:"MPLS_LOOPBACK_IP_RANGE"` + LinkStateRoutingTagPrev string `json:"LINK_STATE_ROUTING_TAG_PREV"` + DhcpEnable string `json:"DHCP_ENABLE"` + MsoSiteGroupName string `json:"MSO_SITE_GROUP_NAME"` + MgmtPrefixInternal string `json:"MGMT_PREFIX_INTERNAL"` + DhcpIpv6EnableInternal string `json:"DHCP_IPV6_ENABLE_INTERNAL"` + BgpAuthKeyType string `json:"BGP_AUTH_KEY_TYPE"` + TempAnycastGateway string `json:"temp_anycast_gateway"` + BrfieldDebugFlag string `json:"BRFIELD_DEBUG_FLAG"` + BootstrapMultisubnet string `json:"BOOTSTRAP_MULTISUBNET"` + IsisP2PEnable string `json:"ISIS_P2P_ENABLE"` + CdpEnable string `json:"CDP_ENABLE"` + PtpLbId string `json:"PTP_LB_ID"` + DhcpIpv6Enable string `json:"DHCP_IPV6_ENABLE"` + MacsecKeyString string `json:"MACSEC_KEY_STRING"` + OspfAuthKey string `json:"OSPF_AUTH_KEY"` + EnableFabricVpcDomainIdPrev string `json:"ENABLE_FABRIC_VPC_DOMAIN_ID_PREV"` + ExtraConfLeaf string `json:"EXTRA_CONF_LEAF"` + DhcpStart string `json:"DHCP_START"` + EnableTrm string `json:"ENABLE_TRM"` + FeaturePtpInternal string `json:"FEATURE_PTP_INTERNAL"` + AbstractIsis string `json:"abstract_isis"` + MplsLbId string `json:"MPLS_LB_ID"` + FabricVpcDomainIdPrev string `json:"FABRIC_VPC_DOMAIN_ID_PREV"` + StaticUnderlayIpAlloc string `json:"STATIC_UNDERLAY_IP_ALLOC"` + MgmtV6PrefixInternal string `json:"MGMT_V6PREFIX_INTERNAL"` + MplsHandoff string `json:"MPLS_HANDOFF"` + StpBridgePriority string `json:"STP_BRIDGE_PRIORITY"` + Scheduledtime string `json:"scheduledTime"` + MacsecCipherSuite string `json:"MACSEC_CIPHER_SUITE"` + StpVlanRange string `json:"STP_VLAN_RANGE"` + AnycastLbId string `json:"ANYCAST_LB_ID"` + MsoControlerId string `json:"MSO_CONTROLER_ID"` + AbstractExtraConfigLeaf string `json:"abstract_extra_config_leaf"` + AbstractDhcp string `json:"abstract_dhcp"` + ExtraConfSpine string `json:"EXTRA_CONF_SPINE"` + NtpServerVrf string `json:"NTP_SERVER_VRF"` + SpineSwitchCoreInterfaces string `json:"SPINE_SWITCH_CORE_INTERFACES"` + IsisOverloadElapseTime string `json:"ISIS_OVERLOAD_ELAPSE_TIME"` + BootstrapConf string `json:"BOOTSTRAP_CONF"` + IsisAuthKey string `json:"ISIS_AUTH_KEY"` + DnsServerIpList string `json:"DNS_SERVER_IP_LIST"` + DnsServerVrf string `json:"DNS_SERVER_VRF"` + EnableEvpn string `json:"ENABLE_EVPN"` + AbstractMulticast string `json:"abstract_multicast"` + AgentIntf string `json:"AGENT_INTF"` + L3VniMcastGroup string `json:"L3VNI_MCAST_GROUP"` + UnnumBootstrapLbId string `json:"UNNUM_BOOTSTRAP_LB_ID"` + VpcDomainIdRange string `json:"VPC_DOMAIN_ID_RANGE"` + HostIntfAdminState string `json:"HOST_INTF_ADMIN_STATE"` + SyslogSev string `json:"SYSLOG_SEV"` + AbstractLoopbackInterface string `json:"abstract_loopback_interface"` + SyslogServerVrf string `json:"SYSLOG_SERVER_VRF"` + ExtraConfIntraLinks string `json:"EXTRA_CONF_INTRA_LINKS"` + AbstractExtraConfigSpine string `json:"abstract_extra_config_spine"` + PimHelloAuthKey string `json:"PIM_HELLO_AUTH_KEY"` + TempVpcDomainMgmt string `json:"temp_vpc_domain_mgmt"` + V6SubnetRange string `json:"V6_SUBNET_RANGE"` + AbstractRoutedHost string `json:"abstract_routed_host"` + BgpAuthKey string `json:"BGP_AUTH_KEY"` + InbandDhcpServers string `json:"INBAND_DHCP_SERVERS"` + IsisAuthKeychainKeyId string `json:"ISIS_AUTH_KEYCHAIN_KEY_ID"` + MgmtV6Prefix string `json:"MGMT_V6PREFIX"` + AbstractFeatureSpine string `json:"abstract_feature_spine"` + EnableDefaultQueuingPolicy string `json:"ENABLE_DEFAULT_QUEUING_POLICY"` + AnycastBgwAdvertisePip string `json:"ANYCAST_BGW_ADVERTISE_PIP"` + NetflowExporterList string `json:"NETFLOW_EXPORTER_LIST"` + AbstractVlanInterface string `json:"abstract_vlan_interface"` + FabricName string `json:"FABRIC_NAME"` + AbstractPimInterface string `json:"abstract_pim_interface"` + PmEnable string `json:"PM_ENABLE"` + Loopback0Ipv6Range string `json:"LOOPBACK0_IPV6_RANGE"` + EnableVpcPeerLinkNativeVlan string `json:"ENABLE_VPC_PEER_LINK_NATIVE_VLAN"` + AbstractRouteMap string `json:"abstract_route_map"` + InbandMgmtPrev string `json:"INBAND_MGMT_PREV"` + AbstractVpcDomain string `json:"abstract_vpc_domain"` + DhcpEndInternal string `json:"DHCP_END_INTERNAL"` + BootstrapEnable string `json:"BOOTSTRAP_ENABLE"` + AbstractExtraConfigTor string `json:"abstract_extra_config_tor"` + SyslogServerIpList string `json:"SYSLOG_SERVER_IP_LIST"` + BootstrapEnablePrev string `json:"BOOTSTRAP_ENABLE_PREV"` + EnableTenantDhcp string `json:"ENABLE_TENANT_DHCP"` + AnycastRpIpRangeInternal string `json:"ANYCAST_RP_IP_RANGE_INTERNAL"` + BootstrapMultisubnetInternal string `json:"BOOTSTRAP_MULTISUBNET_INTERNAL"` + MgmtGw string `json:"MGMT_GW"` + UnnumDhcpStart string `json:"UNNUM_DHCP_START"` + MgmtPrefix string `json:"MGMT_PREFIX"` + AbstractBgpRr string `json:"abstract_bgp_rr"` + InbandMgmt string `json:"INBAND_MGMT"` + AbstractBgp string `json:"abstract_bgp"` + EnableNetflowPrev string `json:"ENABLE_NETFLOW_PREV"` + DeafultQueuingPolicyCloudscale string `json:"DEAFULT_QUEUING_POLICY_CLOUDSCALE"` + FabricVpcQos string `json:"FABRIC_VPC_QOS"` + AaaRemoteIpEnabled string `json:"AAA_REMOTE_IP_ENABLED"` + FabricTemplate string `json:"FF"` + FabricType string `json:"FABRIC_TYPE"` + SpineAddDelBedugFlag string `json:"SSPINE_ADD_DEL_DEBUG_FLAG"` + ActiveMigration string `json:"ACTIVE_MIGRATION"` + SiteId string `json:"SITE_ID"` + EnablePVlan string `json:"ENABLE_PVLAN"` + AutoVrfLiteIfcDefaultVrf string `json:"AUTO_VRFLITE_IFC_DEFAULT_VRF"` + AutoAsymetricDefaultVrf string `json:"AUTO_SYMMETRIC_DEFAULT_VRF"` + BrownfieldSkipOverlayNetworkAttachments string `json:"BROWNFIELD_SKIP_OVERLAY_NETWORK_ATTACHMENTS"` + DefaultPvlanSecNetwork string `json:"default_pvlan_sec_network"` + DefaultVrfRedisBgpRmap string `json:"DEFAULT_VRF_REDIS_BGP_RMAP"` + EnablePVlanPrev string `json:"ENABLE_PVLAN_PREV"` } func (fabric *Fabric) ToMap() (map[string]interface{}, error) { @@ -289,13 +296,13 @@ func (config *FabricConfig) SetConfigDefaults() { config.PremsoParentFabric = "" config.UnnumDhcpEndInternal = "" config.PtpDomainId = "" - config.AutoSymmetricVrfLite = false - config.UseLinkLocal = false + config.AutoSymmetricVrfLite = "false" + config.UseLinkLocal = "false" config.BgpAsPrev = "" config.EnablePbr = "false" config.VpcPeerLinkPo = "500" config.VpcDelayRestoretime = "60" - config.IsisAuthEnable = false + config.IsisAuthEnable = "false" config.VpcEnableIpv6NdSync = "true" config.AbstractIsisInterface = "isis_interface" config.TcamAllocation = "true" @@ -330,7 +337,7 @@ func (config *FabricConfig) SetConfigDefaults() { config.AbstractOspfInterface = "ospf_interface_11_1" config.MacsecFallbackAlgorithm = "" config.UnnumDhcpEnd = "" - config.EnableAaa = false + config.EnableAaa = "false" config.DeploymentFreeze = "false" config.L2HostIntfMtuPrev = "9216" config.NetflowMonitorList = "" @@ -340,13 +347,13 @@ func (config *FabricConfig) SetConfigDefaults() { config.MacsecFallbackKeyString = "" config.StpRootOption = "unmanaged" config.FabricType = "Switch_Fabric" - config.IsisOverloadEnable = false + config.IsisOverloadEnable = "false" config.NetflowRecordList = "" config.SpineCount = "0" config.AbstractExtraConfigBootstrap = "extra_config_bootstrap_11_1" config.MplsLoopbackIpRange = "" config.LinkStateRoutingTagPrev = "" - config.DhcpEnable = false + config.DhcpEnable = "false" config.MsoSiteGroupName = "" config.MgmtPrefixInternal = "" config.DhcpIpv6EnableInternal = "" @@ -355,7 +362,7 @@ func (config *FabricConfig) SetConfigDefaults() { config.TempAnycastGateway = "anycast_gateway" config.BrfieldDebugFlag = "Disable" config.BootstrapMultisubnet = "" - config.IsisP2PEnable = false + config.IsisP2PEnable = "false" config.EnableNgoam = "true" config.CdpEnable = "false" config.PtpLbId = "" @@ -447,5 +454,11 @@ func (config *FabricConfig) SetConfigDefaults() { config.SpineAddDelBedugFlag = "Disable" config.ActiveMigration = "false" config.BfdEnable = "false" - + config.EnablePVlan = "false" + config.AutoVrfLiteIfcDefaultVrf = "false" + config.AutoAsymetricDefaultVrf = "false" + config.BrownfieldSkipOverlayNetworkAttachments = "false" + config.DefaultPvlanSecNetwork = "" + config.DefaultVrfRedisBgpRmap = "" + config.EnablePVlanPrev = "false" }