Skip to content

Commit

Permalink
[minor_change] Add l3out_schema_id, l3out_template and l3out_on_apic …
Browse files Browse the repository at this point in the history
…attributes to mso_schema_site_external_epg (#291)
  • Loading branch information
juchowan authored Oct 9, 2024
1 parent 0e3bc1c commit b5699dd
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 8 deletions.
19 changes: 19 additions & 0 deletions examples/schema_site_external_epg/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,22 @@ resource "mso_schema_site_external_epg" "site_extepg1" {
external_epg_name = mso_schema_template_external_epg.extepg1.external_epg_name
l3out_name = mso_schema_template_l3out.template_l3out.l3out_name
}

resource "mso_schema_template_external_epg" "extepg2" {
schema_id = mso_schema.schema_blocks.id
template_name = one(mso_schema.schema_blocks.template).name
external_epg_name = "extepg2"
display_name = "extepg2"
vrf_name = mso_schema_template_vrf.vrf1.name
vrf_schema_id = mso_schema_template_vrf.vrf1.schema_id
vrf_template_name = mso_schema_template_vrf.vrf1.template
}

resource "mso_schema_site_external_epg" "site_extepg2" {
site_id = mso_schema_site.demo_schema_site.id
schema_id = mso_schema.schema_blocks.id
template_name = one(mso_schema.schema_blocks.template).name
external_epg_name = mso_schema_template_external_epg.extepg2.external_epg_name
l3out_name = "L3out2"
l3out_on_apic = true
}
92 changes: 84 additions & 8 deletions mso/resource_mso_schema_site_external_epg.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,25 @@ func resourceMSOSchemaSiteExternalEpg() *schema.Resource {
Computed: true,
ValidateFunc: validation.StringLenBetween(1, 1000),
},
"l3out_template_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Computed: true,
ValidateFunc: validation.StringLenBetween(1, 1000),
ConflictsWith: []string{"l3out_on_apic"},
},
"l3out_schema_id": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Computed: true,
ValidateFunc: validation.StringLenBetween(1, 1000),
ConflictsWith: []string{"l3out_on_apic"},
},
"l3out_on_apic": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ConflictsWith: []string{"l3out_schema_id", "l3out_template_name"},
},
}),
}
}
Expand Down Expand Up @@ -106,15 +125,28 @@ func resourceMSOSchemaSiteExternalEpgImport(d *schema.ResourceData, m interface{
d.Set("site_id", apiSiteId)

l3outRef := models.StripQuotes(externalEpgCont.S("l3outRef").String())
l3outDn := models.StripQuotes(externalEpgCont.S("l3outDn").String())
if l3outRef != "{}" && l3outRef != "" {
reL3out := regexp.MustCompile("/schemas/(.*?)/templates/(.*?)/l3outs/(.*)")
matchL3out := reL3out.FindStringSubmatch(l3outRef)
log.Printf("[TRACE] resourceMSOSchemaSiteExternalEpgRead l3outRef: %s matchL3out: %s", l3outRef, matchL3out)
if len(matchL3out) >= 4 {
d.Set("l3out_name", matchL3out[3])
d.Set("l3out_schema_id", matchL3out[1])
d.Set("l3out_template_name", matchL3out[2])
} else {
return nil, fmt.Errorf("Error in parsing l3outRef to get L3Out name")
}
} else if l3outDn != "{}" && l3outDn != "" {
reL3out := regexp.MustCompile("uni/tn-(.*?)/out-(.*)")
matchL3out := reL3out.FindStringSubmatch(l3outDn)
log.Printf("[TRACE] resourceMSOSchemaSiteExternalEpgRead l3outDn: %s matchL3out: %s", l3outDn, matchL3out)
if len(matchL3out) >= 2 {
d.Set("l3out_name", matchL3out[1])
d.Set("l3out_on_apic", true)
} else {
return nil, fmt.Errorf("Error in parsing l3outDn to get L3Out name")
}
}

found = true
Expand Down Expand Up @@ -147,6 +179,9 @@ func resourceMSOSchemaSiteExternalEpgCreate(d *schema.ResourceData, m interface{
externalEpgName := d.Get("external_epg_name").(string)
templateName := d.Get("template_name").(string)
l3outName := d.Get("l3out_name").(string)
l3outTemplate := d.Get("l3out_template_name").(string)
l3outSchema := d.Get("l3out_schema_id").(string)
l3outOnApic := d.Get("l3out_on_apic").(bool)

siteEpgMap := make(map[string]interface{})

Expand All @@ -159,11 +194,24 @@ func resourceMSOSchemaSiteExternalEpgCreate(d *schema.ResourceData, m interface{

l3outRefMap := make(map[string]interface{})

l3outRefMap["schemaId"] = schemaId
l3outRefMap["templateName"] = templateName
l3outRefMap["l3outName"] = l3outName
if l3outOnApic {
siteEpgMap["l3outRef"] = ""
} else {
if l3outTemplate == "" {
l3outRefMap["templateName"] = templateName
} else {
l3outRefMap["templateName"] = l3outTemplate
}
if l3outSchema == "" {
l3outRefMap["schemaId"] = schemaId
} else {
l3outRefMap["schemaId"] = l3outSchema
}
l3outRefMap["l3outName"] = l3outName

siteEpgMap["l3outRef"] = l3outRefMap
}

siteEpgMap["l3outRef"] = l3outRefMap
siteEpgMap["l3outDn"] = fmt.Sprintf("uni/tn-%s/out-%s", tenantName, l3outName)
} else {
siteEpgMap["l3outDn"] = ""
Expand Down Expand Up @@ -248,15 +296,28 @@ func resourceMSOSchemaSiteExternalEpgRead(d *schema.ResourceData, m interface{})
d.Set("site_id", apiSiteId)

l3outRef := models.StripQuotes(externalEpgCont.S("l3outRef").String())
l3outDn := models.StripQuotes(externalEpgCont.S("l3outDn").String())
if l3outRef != "{}" && l3outRef != "" {
reL3out := regexp.MustCompile("/schemas/(.*?)/templates/(.*?)/l3outs/(.*)")
matchL3out := reL3out.FindStringSubmatch(l3outRef)
log.Printf("[TRACE] resourceMSOSchemaSiteExternalEpgRead l3outRef: %s matchL3out: %s", l3outRef, matchL3out)
if len(matchL3out) >= 4 {
d.Set("l3out_name", matchL3out[3])
d.Set("l3out_schema_id", matchL3out[1])
d.Set("l3out_template_name", matchL3out[2])
} else {
return fmt.Errorf("Error in parsing l3outRef to get L3Out name")
}
} else if l3outDn != "{}" && l3outDn != "" {
reL3out := regexp.MustCompile("uni/tn-(.*?)/out-(.*)")
matchL3out := reL3out.FindStringSubmatch(l3outDn)
log.Printf("[TRACE] resourceMSOSchemaSiteExternalEpgRead l3outDn: %s matchL3out: %s", l3outDn, matchL3out)
if len(matchL3out) >= 2 {
d.Set("l3out_name", matchL3out[2])
d.Set("l3out_on_apic", true)
} else {
return fmt.Errorf("Error in parsing l3outDn to get L3Out name")
}
}

found = true
Expand Down Expand Up @@ -287,6 +348,9 @@ func resourceMSOSchemaSiteExternalEpgUpdate(d *schema.ResourceData, m interface{
templateName := d.Get("template_name").(string)
externalEpgName := d.Get("external_epg_name").(string)
l3outName := d.Get("l3out_name").(string)
l3outTemplate := d.Get("l3out_template_name").(string)
l3outSchema := d.Get("l3out_schema_id").(string)
l3outOnApic := d.Get("l3out_on_apic").(bool)

siteEpgMap := make(map[string]interface{})

Expand All @@ -299,11 +363,23 @@ func resourceMSOSchemaSiteExternalEpgUpdate(d *schema.ResourceData, m interface{

l3outRefMap := make(map[string]interface{})

l3outRefMap["schemaId"] = schemaId
l3outRefMap["templateName"] = templateName
l3outRefMap["l3outName"] = l3outName
if l3outOnApic {
siteEpgMap["l3outRef"] = ""
} else {
if l3outTemplate == "" {
l3outRefMap["templateName"] = templateName
} else {
l3outRefMap["templateName"] = l3outTemplate
}
if l3outSchema == "" {
l3outRefMap["schemaId"] = schemaId
} else {
l3outRefMap["schemaId"] = l3outSchema
}
l3outRefMap["l3outName"] = l3outName

siteEpgMap["l3outRef"] = l3outRefMap
siteEpgMap["l3outRef"] = l3outRefMap
}
siteEpgMap["l3outDn"] = fmt.Sprintf("uni/tn-%s/out-%s", tenantName, l3outName)
} else {
siteEpgMap["l3outDn"] = ""
Expand Down
3 changes: 3 additions & 0 deletions website/docs/r/schema_site_external_epg.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ resource "mso_schema_site_external_epg" "external_epg_1" {
## Attribute Reference ##

* `l3out_name` - (Optional) Name of the L3Out.
* `l3out_schema_id` - (Optional) ID of the schema that defines the referenced L3Out. If this attribute is unspecified, it defaults to the current schema. This is mutually exclusive with `l3out_on_apic`.
* `l3out_template_name` - (Optional) The template that defines the referenced L3Out. If this parameter is unspecified, it defaults to the current template. This is mutually exclusive with `l3out_on_apic`.
* `l3out_on_apic` - (Optional) Indicates that L3Out is created only localy on APIC. This is mutually exclusive with `l3out_schema_id` and `l3out_template_name`.

## Importing ##

Expand Down

0 comments on commit b5699dd

Please sign in to comment.