From c366ebd751bda45dc091255619d8552ce4e20bd9 Mon Sep 17 00:00:00 2001 From: Shreyas <ssrish@cisco.com> Date: Fri, 23 Apr 2021 17:38:00 -0700 Subject: [PATCH] fvEPSelector files (#105) --- client/fvEPSelector_service.go | 46 ++++++++++++++++ models/fv_ep_selector.go | 96 ++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 client/fvEPSelector_service.go create mode 100644 models/fv_ep_selector.go diff --git a/client/fvEPSelector_service.go b/client/fvEPSelector_service.go new file mode 100644 index 00000000..66234710 --- /dev/null +++ b/client/fvEPSelector_service.go @@ -0,0 +1,46 @@ +package client + +import ( + "fmt" + + "github.com/ciscoecosystem/aci-go-client/models" +) + +func (sm *ServiceManager) CreateEndpointSecurityGroupSelector(matchExpression string, endpoint_security_group string, application_profile string, tenant string, description string, nameAlias string, fvEPSelectorAttr models.EndpointSecurityGroupSelectorAttributes) (*models.EndpointSecurityGroupSelector, error) { + rn := fmt.Sprintf(models.RnfvEPSelector, matchExpression) + parentDn := fmt.Sprintf(models.ParentDnfvEPSelector, tenant, application_profile, endpoint_security_group) + fvEPSelector := models.NewEndpointSecurityGroupSelector(rn, parentDn, description, nameAlias, fvEPSelectorAttr) + err := sm.Save(fvEPSelector) + return fvEPSelector, err +} + +func (sm *ServiceManager) ReadEndpointSecurityGroupSelector(matchExpression string, endpoint_security_group string, application_profile string, tenant string) (*models.EndpointSecurityGroupSelector, error) { + dn := fmt.Sprintf(models.DnfvEPSelector, tenant, application_profile, endpoint_security_group, matchExpression) + cont, err := sm.Get(dn) + if err != nil { + return nil, err + } + fvEPSelector := models.EndpointSecurityGroupSelectorFromContainer(cont) + return fvEPSelector, nil +} + +func (sm *ServiceManager) DeleteEndpointSecurityGroupSelector(matchExpression string, endpoint_security_group string, application_profile string, tenant string) error { + dn := fmt.Sprintf(models.DnfvEPSelector, tenant, application_profile, endpoint_security_group, matchExpression) + return sm.DeleteByDn(dn, models.FvepselectorClassName) +} + +func (sm *ServiceManager) UpdateEndpointSecurityGroupSelector(matchExpression string, endpoint_security_group string, application_profile string, tenant string, description string, nameAlias string, fvEPSelectorAttr models.EndpointSecurityGroupSelectorAttributes) (*models.EndpointSecurityGroupSelector, error) { + rn := fmt.Sprintf(models.RnfvEPSelector, matchExpression) + parentDn := fmt.Sprintf(models.ParentDnfvEPSelector, tenant, application_profile, endpoint_security_group) + fvEPSelector := models.NewEndpointSecurityGroupSelector(rn, parentDn, description, nameAlias, fvEPSelectorAttr) + fvEPSelector.Status = "modified" + err := sm.Save(fvEPSelector) + return fvEPSelector, err +} + +func (sm *ServiceManager) ListEndpointSecurityGroupSelector(endpoint_security_group string, application_profile string, tenant string) ([]*models.EndpointSecurityGroupSelector, error) { + dnUrl := fmt.Sprintf("%s/uni/tn-%s/ap-%s/esg-%s/fvEPSelector.json", models.BaseurlStr, tenant, application_profile, endpoint_security_group) + cont, err := sm.GetViaURL(dnUrl) + list := models.EndpointSecurityGroupSelectorListFromContainer(cont) + return list, err +} diff --git a/models/fv_ep_selector.go b/models/fv_ep_selector.go new file mode 100644 index 00000000..a1d5e062 --- /dev/null +++ b/models/fv_ep_selector.go @@ -0,0 +1,96 @@ +package models + +import ( + "fmt" + "strconv" + + "github.com/ciscoecosystem/aci-go-client/container" +) + +const ( + DnfvEPSelector = "uni/tn-%s/ap-%s/esg-%s/epselector-[%s]" + RnfvEPSelector = "epselector-[%s]" + ParentDnfvEPSelector = "uni/tn-%s/ap-%s/esg-%s" + FvepselectorClassName = "fvEPSelector" +) + +type EndpointSecurityGroupSelector struct { + BaseAttributes + NameAliasAttribute + EndpointSecurityGroupSelectorAttributes +} + +type EndpointSecurityGroupSelectorAttributes struct { + Annotation string `json:",omitempty"` + MatchExpression string `json:",omitempty"` + Name string `json:",omitempty"` +} + +func NewEndpointSecurityGroupSelector(fvEPSelectorRn, parentDn, description, nameAlias string, fvEPSelectorAttr EndpointSecurityGroupSelectorAttributes) *EndpointSecurityGroupSelector { + dn := fmt.Sprintf("%s/%s", parentDn, fvEPSelectorRn) + return &EndpointSecurityGroupSelector{ + BaseAttributes: BaseAttributes{ + DistinguishedName: dn, + Description: description, + Status: "created, modified", + ClassName: FvepselectorClassName, + Rn: fvEPSelectorRn, + }, + NameAliasAttribute: NameAliasAttribute{ + NameAlias: nameAlias, + }, + EndpointSecurityGroupSelectorAttributes: fvEPSelectorAttr, + } +} + +func (fvEPSelector *EndpointSecurityGroupSelector) ToMap() (map[string]string, error) { + fvEPSelectorMap, err := fvEPSelector.BaseAttributes.ToMap() + if err != nil { + return nil, err + } + alias, err := fvEPSelector.NameAliasAttribute.ToMap() + if err != nil { + return nil, err + } + for key, value := range alias { + A(fvEPSelectorMap, key, value) + } + A(fvEPSelectorMap, "annotation", fvEPSelector.Annotation) + A(fvEPSelectorMap, "matchExpression", fvEPSelector.MatchExpression) + A(fvEPSelectorMap, "name", fvEPSelector.Name) + return fvEPSelectorMap, err +} + +func EndpointSecurityGroupSelectorFromContainerList(cont *container.Container, index int) *EndpointSecurityGroupSelector { + EndpointSecurityGroupSelectorCont := cont.S("imdata").Index(index).S(FvepselectorClassName, "attributes") + return &EndpointSecurityGroupSelector{ + BaseAttributes{ + DistinguishedName: G(EndpointSecurityGroupSelectorCont, "dn"), + Description: G(EndpointSecurityGroupSelectorCont, "descr"), + Status: G(EndpointSecurityGroupSelectorCont, "status"), + ClassName: FvepselectorClassName, + Rn: G(EndpointSecurityGroupSelectorCont, "rn"), + }, + NameAliasAttribute{ + NameAlias: G(EndpointSecurityGroupSelectorCont, "nameAlias"), + }, + EndpointSecurityGroupSelectorAttributes{ + Annotation: G(EndpointSecurityGroupSelectorCont, "annotation"), + MatchExpression: G(EndpointSecurityGroupSelectorCont, "matchExpression"), + Name: G(EndpointSecurityGroupSelectorCont, "name"), + }, + } +} + +func EndpointSecurityGroupSelectorFromContainer(cont *container.Container) *EndpointSecurityGroupSelector { + return EndpointSecurityGroupSelectorFromContainerList(cont, 0) +} + +func EndpointSecurityGroupSelectorListFromContainer(cont *container.Container) []*EndpointSecurityGroupSelector { + length, _ := strconv.Atoi(G(cont, "totalCount")) + arr := make([]*EndpointSecurityGroupSelector, length) + for i := 0; i < length; i++ { + arr[i] = EndpointSecurityGroupSelectorFromContainerList(cont, i) + } + return arr +}