github.com/infobloxopen/infoblox-go-client@v1.1.1/object_manager.go (about) 1 package ibclient 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 "regexp" 8 ) 9 10 type IBObjectManager interface { 11 AllocateIP(netview string, cidr string, ipAddr string, macAddress string, name string, ea EA) (*FixedAddress, error) 12 AllocateNetwork(netview string, cidr string, prefixLen uint, name string) (network *Network, err error) 13 CreateARecord(netview string, dnsview string, recordname string, cidr string, ipAddr string, ea EA) (*RecordA, error) 14 CreateZoneAuth(fqdn string, ea EA) (*ZoneAuth, error) 15 CreateCNAMERecord(canonical string, recordname string, dnsview string, ea EA) (*RecordCNAME, error) 16 CreateDefaultNetviews(globalNetview string, localNetview string) (globalNetviewRef string, localNetviewRef string, err error) 17 CreateEADefinition(eadef EADefinition) (*EADefinition, error) 18 CreateHostRecord(enabledns bool, recordName string, netview string, dnsview string, cidr string, ipAddr string, macAddress string, ea EA) (*HostRecord, error) 19 CreateNetwork(netview string, cidr string, name string) (*Network, error) 20 CreateNetworkContainer(netview string, cidr string) (*NetworkContainer, error) 21 CreateNetworkView(name string) (*NetworkView, error) 22 CreatePTRRecord(netview string, dnsview string, recordname string, cidr string, ipAddr string, ea EA) (*RecordPTR, error) 23 DeleteARecord(ref string) (string, error) 24 DeleteZoneAuth(ref string) (string, error) 25 DeleteCNAMERecord(ref string) (string, error) 26 DeleteFixedAddress(ref string) (string, error) 27 DeleteHostRecord(ref string) (string, error) 28 DeleteNetwork(ref string, netview string) (string, error) 29 DeleteNetworkView(ref string) (string, error) 30 DeletePTRRecord(ref string) (string, error) 31 GetARecordByRef(ref string) (*RecordA, error) 32 GetCNAMERecordByRef(ref string) (*RecordA, error) 33 GetEADefinition(name string) (*EADefinition, error) 34 GetFixedAddress(netview string, cidr string, ipAddr string, macAddr string) (*FixedAddress, error) 35 GetFixedAddressByRef(ref string) (*FixedAddress, error) 36 GetHostRecord(recordName string) (*HostRecord, error) 37 GetHostRecordByRef(ref string) (*HostRecord, error) 38 GetIpAddressFromHostRecord(host HostRecord) (string, error) 39 GetNetwork(netview string, cidr string, ea EA) (*Network, error) 40 GetNetworkContainer(netview string, cidr string) (*NetworkContainer, error) 41 GetNetworkView(name string) (*NetworkView, error) 42 GetPTRRecordByRef(ref string) (*RecordPTR, error) 43 GetZoneAuthByRef(ref string) (*ZoneAuth, error) 44 ReleaseIP(netview string, cidr string, ipAddr string, macAddr string) (string, error) 45 UpdateFixedAddress(fixedAddrRef string, matchclient string, macAddress string, vmID string, vmName string) (*FixedAddress, error) 46 UpdateHostRecord(hostRref string, ipAddr string, macAddress string, vmID string, vmName string) (string, error) 47 UpdateNetworkViewEA(ref string, addEA EA, removeEA EA) error 48 UpdateARecord(aRecordRef string, netview string, recordname string, cidr string, ipAddr string, ea EA) (*RecordA, error) 49 UpdateCNAMERecord(cnameRef string, canonical string, recordname string, dnsview string, ea EA) (*RecordCNAME, error) 50 } 51 52 type ObjectManager struct { 53 connector IBConnector 54 cmpType string 55 tenantID string 56 // If OmitCloudAttrs is true no extra attributes for cloud are set 57 OmitCloudAttrs bool 58 } 59 60 func NewObjectManager(connector IBConnector, cmpType string, tenantID string) *ObjectManager { 61 objMgr := new(ObjectManager) 62 63 objMgr.connector = connector 64 objMgr.cmpType = cmpType 65 objMgr.tenantID = tenantID 66 67 return objMgr 68 } 69 70 func (objMgr *ObjectManager) getBasicEA(cloudAPIOwned Bool) EA { 71 ea := make(EA) 72 if !objMgr.OmitCloudAttrs { 73 ea["Cloud API Owned"] = cloudAPIOwned 74 ea["CMP Type"] = objMgr.cmpType 75 ea["Tenant ID"] = objMgr.tenantID 76 } 77 return ea 78 } 79 80 func (objMgr *ObjectManager) extendEA(ea EA) EA { 81 eas := objMgr.getBasicEA(true) 82 for k, v := range ea { 83 eas[k] = v 84 } 85 return eas 86 } 87 88 func (objMgr *ObjectManager) CreateNetworkView(name string) (*NetworkView, error) { 89 networkView := NewNetworkView(NetworkView{ 90 Name: name, 91 Ea: objMgr.getBasicEA(false)}) 92 93 ref, err := objMgr.connector.CreateObject(networkView) 94 networkView.Ref = ref 95 96 return networkView, err 97 } 98 99 func (objMgr *ObjectManager) makeNetworkView(netviewName string) (netviewRef string, err error) { 100 var netviewObj *NetworkView 101 if netviewObj, err = objMgr.GetNetworkView(netviewName); err != nil { 102 return 103 } 104 if netviewObj == nil { 105 if netviewObj, err = objMgr.CreateNetworkView(netviewName); err != nil { 106 return 107 } 108 } 109 110 netviewRef = netviewObj.Ref 111 112 return 113 } 114 115 func (objMgr *ObjectManager) CreateDefaultNetviews(globalNetview string, localNetview string) (globalNetviewRef string, localNetviewRef string, err error) { 116 if globalNetviewRef, err = objMgr.makeNetworkView(globalNetview); err != nil { 117 return 118 } 119 120 if localNetviewRef, err = objMgr.makeNetworkView(localNetview); err != nil { 121 return 122 } 123 124 return 125 } 126 127 func (objMgr *ObjectManager) CreateNetwork(netview string, cidr string, name string) (*Network, error) { 128 network := NewNetwork(Network{ 129 NetviewName: netview, 130 Cidr: cidr, 131 Ea: objMgr.getBasicEA(true)}) 132 133 if name != "" { 134 network.Ea["Network Name"] = name 135 } 136 ref, err := objMgr.connector.CreateObject(network) 137 if err != nil { 138 return nil, err 139 } 140 network.Ref = ref 141 142 return network, err 143 } 144 145 func (objMgr *ObjectManager) CreateNetworkContainer(netview string, cidr string) (*NetworkContainer, error) { 146 container := NewNetworkContainer(NetworkContainer{ 147 NetviewName: netview, 148 Cidr: cidr, 149 Ea: objMgr.getBasicEA(true)}) 150 151 ref, err := objMgr.connector.CreateObject(container) 152 container.Ref = ref 153 154 return container, err 155 } 156 157 func (objMgr *ObjectManager) GetNetworkView(name string) (*NetworkView, error) { 158 var res []NetworkView 159 160 netview := NewNetworkView(NetworkView{Name: name}) 161 162 err := objMgr.connector.GetObject(netview, "", &res) 163 164 if err != nil || res == nil || len(res) == 0 { 165 return nil, err 166 } 167 168 return &res[0], nil 169 } 170 171 func (objMgr *ObjectManager) UpdateNetworkViewEA(ref string, addEA EA, removeEA EA) error { 172 var res NetworkView 173 174 nv := NetworkView{} 175 nv.returnFields = []string{"extattrs"} 176 err := objMgr.connector.GetObject(&nv, ref, &res) 177 178 if err != nil { 179 return err 180 } 181 182 for k, v := range addEA { 183 res.Ea[k] = v 184 } 185 186 for k := range removeEA { 187 _, ok := res.Ea[k] 188 if ok { 189 delete(res.Ea, k) 190 } 191 } 192 193 _, err = objMgr.connector.UpdateObject(&res, ref) 194 return err 195 } 196 197 func BuildNetworkViewFromRef(ref string) *NetworkView { 198 // networkview/ZG5zLm5ldHdvcmtfdmlldyQyMw:global_view/false 199 r := regexp.MustCompile(`networkview/\w+:([^/]+)/\w+`) 200 m := r.FindStringSubmatch(ref) 201 202 if m == nil { 203 return nil 204 } 205 206 return &NetworkView{ 207 Ref: ref, 208 Name: m[1], 209 } 210 } 211 212 func BuildNetworkFromRef(ref string) *Network { 213 // network/ZG5zLm5ldHdvcmskODkuMC4wLjAvMjQvMjU:89.0.0.0/24/global_view 214 r := regexp.MustCompile(`network/\w+:(\d+\.\d+\.\d+\.\d+/\d+)/(.+)`) 215 m := r.FindStringSubmatch(ref) 216 217 if m == nil { 218 return nil 219 } 220 221 return &Network{ 222 Ref: ref, 223 NetviewName: m[2], 224 Cidr: m[1], 225 } 226 } 227 228 func (objMgr *ObjectManager) GetNetwork(netview string, cidr string, ea EA) (*Network, error) { 229 var res []Network 230 231 network := NewNetwork(Network{ 232 NetviewName: netview}) 233 234 if cidr != "" { 235 network.Cidr = cidr 236 } 237 238 if ea != nil && len(ea) > 0 { 239 network.eaSearch = EASearch(ea) 240 } 241 242 err := objMgr.connector.GetObject(network, "", &res) 243 244 if err != nil || res == nil || len(res) == 0 { 245 return nil, err 246 } 247 248 return &res[0], nil 249 } 250 251 func (objMgr *ObjectManager) GetNetworkwithref(ref string) (*Network, error) { 252 network := NewNetwork(Network{}) 253 err := objMgr.connector.GetObject(network, ref, &network) 254 return network, err 255 } 256 257 func (objMgr *ObjectManager) GetNetworkContainer(netview string, cidr string) (*NetworkContainer, error) { 258 var res []NetworkContainer 259 260 nwcontainer := NewNetworkContainer(NetworkContainer{ 261 NetviewName: netview, 262 Cidr: cidr}) 263 264 err := objMgr.connector.GetObject(nwcontainer, "", &res) 265 266 if err != nil || res == nil || len(res) == 0 { 267 return nil, err 268 } 269 270 return &res[0], nil 271 } 272 273 func GetIPAddressFromRef(ref string) string { 274 // fixedaddress/ZG5zLmJpbmRfY25h:12.0.10.1/external 275 r := regexp.MustCompile(`fixedaddress/\w+:(\d+\.\d+\.\d+\.\d+)/.+`) 276 m := r.FindStringSubmatch(ref) 277 278 if m != nil { 279 return m[1] 280 } 281 return "" 282 } 283 284 func (objMgr *ObjectManager) AllocateIP(netview string, cidr string, ipAddr string, macAddress string, name string, ea EA) (*FixedAddress, error) { 285 if len(macAddress) == 0 { 286 macAddress = MACADDR_ZERO 287 } 288 289 eas := objMgr.extendEA(ea) 290 291 fixedAddr := NewFixedAddress(FixedAddress{ 292 NetviewName: netview, 293 Cidr: cidr, 294 Mac: macAddress, 295 Name: name, 296 Ea: eas}) 297 298 if ipAddr == "" { 299 fixedAddr.IPAddress = fmt.Sprintf("func:nextavailableip:%s,%s", cidr, netview) 300 } else { 301 fixedAddr.IPAddress = ipAddr 302 } 303 304 ref, err := objMgr.connector.CreateObject(fixedAddr) 305 fixedAddr.Ref = ref 306 fixedAddr.IPAddress = GetIPAddressFromRef(ref) 307 308 return fixedAddr, err 309 } 310 311 func (objMgr *ObjectManager) AllocateNetwork(netview string, cidr string, prefixLen uint, name string) (network *Network, err error) { 312 network = nil 313 314 networkReq := NewNetwork(Network{ 315 NetviewName: netview, 316 Cidr: fmt.Sprintf("func:nextavailablenetwork:%s,%s,%d", cidr, netview, prefixLen), 317 Ea: objMgr.getBasicEA(true)}) 318 if name != "" { 319 networkReq.Ea["Network Name"] = name 320 } 321 322 ref, err := objMgr.connector.CreateObject(networkReq) 323 if err == nil && len(ref) > 0 { 324 network = BuildNetworkFromRef(ref) 325 } 326 327 return 328 } 329 330 func (objMgr *ObjectManager) GetFixedAddress(netview string, cidr string, ipAddr string, macAddr string) (*FixedAddress, error) { 331 var res []FixedAddress 332 333 fixedAddr := NewFixedAddress(FixedAddress{ 334 NetviewName: netview, 335 Cidr: cidr, 336 IPAddress: ipAddr}) 337 338 if macAddr != "" { 339 fixedAddr.Mac = macAddr 340 } 341 342 err := objMgr.connector.GetObject(fixedAddr, "", &res) 343 344 if err != nil || res == nil || len(res) == 0 { 345 return nil, err 346 } 347 348 return &res[0], nil 349 } 350 351 func (objMgr *ObjectManager) GetFixedAddressByRef(ref string) (*FixedAddress, error) { 352 fixedAddr := NewFixedAddress(FixedAddress{}) 353 err := objMgr.connector.GetObject(fixedAddr, ref, &fixedAddr) 354 return fixedAddr, err 355 } 356 357 func (objMgr *ObjectManager) DeleteFixedAddress(ref string) (string, error) { 358 return objMgr.connector.DeleteObject(ref) 359 } 360 361 // validation for match_client 362 func validateMatchClient(value string) bool { 363 match_client := [5]string{"MAC_ADDRESS", "CLIENT_ID", "RESERVED", "CIRCUIT_ID", "REMOTE_ID"} 364 365 for _, val := range match_client { 366 if val == value { 367 return true 368 } 369 } 370 return false 371 } 372 373 func (objMgr *ObjectManager) UpdateFixedAddress(fixedAddrRef string, matchClient string, macAddress string, vmID string, vmName string) (*FixedAddress, error) { 374 updateFixedAddr := NewFixedAddress(FixedAddress{Ref: fixedAddrRef}) 375 376 if len(macAddress) != 0 { 377 updateFixedAddr.Mac = macAddress 378 } 379 380 ea := objMgr.getBasicEA(true) 381 if vmID != "" { 382 ea["VM ID"] = vmID 383 updateFixedAddr.Ea = ea 384 } 385 if vmName != "" { 386 ea["VM Name"] = vmName 387 updateFixedAddr.Ea = ea 388 } 389 if matchClient != "" { 390 if validateMatchClient(matchClient) { 391 updateFixedAddr.MatchClient = matchClient 392 } else { 393 return nil, fmt.Errorf("wrong value for match_client passed %s \n ", matchClient) 394 } 395 } 396 397 refResp, err := objMgr.connector.UpdateObject(updateFixedAddr, fixedAddrRef) 398 updateFixedAddr.Ref = refResp 399 return updateFixedAddr, err 400 } 401 402 func (objMgr *ObjectManager) ReleaseIP(netview string, cidr string, ipAddr string, macAddr string) (string, error) { 403 fixAddress, _ := objMgr.GetFixedAddress(netview, cidr, ipAddr, macAddr) 404 if fixAddress == nil { 405 return "", nil 406 } 407 return objMgr.connector.DeleteObject(fixAddress.Ref) 408 } 409 410 func (objMgr *ObjectManager) DeleteNetwork(ref string, netview string) (string, error) { 411 network := BuildNetworkFromRef(ref) 412 if network != nil && network.NetviewName == netview { 413 return objMgr.connector.DeleteObject(ref) 414 } 415 416 return "", nil 417 } 418 419 func (objMgr *ObjectManager) DeleteNetworkView(ref string) (string, error) { 420 return objMgr.connector.DeleteObject(ref) 421 } 422 423 func (objMgr *ObjectManager) GetEADefinition(name string) (*EADefinition, error) { 424 var res []EADefinition 425 426 eadef := NewEADefinition(EADefinition{Name: name}) 427 428 err := objMgr.connector.GetObject(eadef, "", &res) 429 430 if err != nil || res == nil || len(res) == 0 { 431 return nil, err 432 } 433 434 return &res[0], nil 435 } 436 437 func (objMgr *ObjectManager) CreateEADefinition(eadef EADefinition) (*EADefinition, error) { 438 newEadef := NewEADefinition(eadef) 439 440 ref, err := objMgr.connector.CreateObject(newEadef) 441 newEadef.Ref = ref 442 443 return newEadef, err 444 } 445 446 func (objMgr *ObjectManager) CreateHostRecord(enabledns bool, recordName string, netview string, dnsview string, cidr string, ipAddr string, macAddress string, ea EA) (*HostRecord, error) { 447 448 eas := objMgr.extendEA(ea) 449 450 recordHostIpAddr := NewHostRecordIpv4Addr(HostRecordIpv4Addr{Mac: macAddress}) 451 452 if ipAddr == "" { 453 recordHostIpAddr.Ipv4Addr = fmt.Sprintf("func:nextavailableip:%s,%s", cidr, netview) 454 } else { 455 recordHostIpAddr.Ipv4Addr = ipAddr 456 } 457 enableDNS := new(bool) 458 *enableDNS = enabledns 459 recordHostIpAddrSlice := []HostRecordIpv4Addr{*recordHostIpAddr} 460 recordHost := NewHostRecord(HostRecord{ 461 Name: recordName, 462 EnableDns: enableDNS, 463 NetworkView: netview, 464 View: dnsview, 465 Ipv4Addrs: recordHostIpAddrSlice, 466 Ea: eas}) 467 468 ref, err := objMgr.connector.CreateObject(recordHost) 469 if err != nil { 470 return nil, err 471 } 472 recordHost.Ref = ref 473 err = objMgr.connector.GetObject(recordHost, ref, &recordHost) 474 return recordHost, err 475 } 476 477 func (objMgr *ObjectManager) GetHostRecordByRef(ref string) (*HostRecord, error) { 478 recordHost := NewHostRecord(HostRecord{}) 479 err := objMgr.connector.GetObject(recordHost, ref, &recordHost) 480 return recordHost, err 481 } 482 483 func (objMgr *ObjectManager) GetHostRecord(recordName string) (*HostRecord, error) { 484 var res []HostRecord 485 486 recordHost := NewHostRecord(HostRecord{}) 487 if recordName != "" { 488 recordHost.Name = recordName 489 } 490 491 err := objMgr.connector.GetObject(recordHost, "", &res) 492 493 if err != nil || res == nil || len(res) == 0 { 494 return nil, err 495 } 496 return &res[0], err 497 498 } 499 500 func (objMgr *ObjectManager) GetIpAddressFromHostRecord(host HostRecord) (string, error) { 501 err := objMgr.connector.GetObject(&host, host.Ref, &host) 502 return host.Ipv4Addrs[0].Ipv4Addr, err 503 } 504 505 func (objMgr *ObjectManager) UpdateHostRecord(hostRref string, ipAddr string, macAddress string, vmID string, vmName string) (string, error) { 506 507 recordHostIpAddr := NewHostRecordIpv4Addr(HostRecordIpv4Addr{Mac: macAddress, Ipv4Addr: ipAddr}) 508 recordHostIpAddrSlice := []HostRecordIpv4Addr{*recordHostIpAddr} 509 updateHostRecord := NewHostRecord(HostRecord{Ipv4Addrs: recordHostIpAddrSlice}) 510 511 ea := objMgr.getBasicEA(true) 512 if vmID != "" { 513 ea["VM ID"] = vmID 514 updateHostRecord.Ea = ea 515 } 516 517 if vmName != "" { 518 ea["VM Name"] = vmName 519 updateHostRecord.Ea = ea 520 } 521 ref, err := objMgr.connector.UpdateObject(updateHostRecord, hostRref) 522 return ref, err 523 } 524 525 func (objMgr *ObjectManager) DeleteHostRecord(ref string) (string, error) { 526 return objMgr.connector.DeleteObject(ref) 527 } 528 529 func (objMgr *ObjectManager) CreateARecord(netview string, dnsview string, recordname string, cidr string, ipAddr string, ea EA) (*RecordA, error) { 530 531 eas := objMgr.extendEA(ea) 532 533 recordA := NewRecordA(RecordA{ 534 View: dnsview, 535 Name: recordname, 536 Ea: eas}) 537 538 if ipAddr == "" { 539 recordA.Ipv4Addr = fmt.Sprintf("func:nextavailableip:%s,%s", cidr, netview) 540 } else { 541 recordA.Ipv4Addr = ipAddr 542 } 543 ref, err := objMgr.connector.CreateObject(recordA) 544 recordA.Ref = ref 545 return recordA, err 546 } 547 548 func (objMgr *ObjectManager) GetARecordByRef(ref string) (*RecordA, error) { 549 recordA := NewRecordA(RecordA{}) 550 err := objMgr.connector.GetObject(recordA, ref, &recordA) 551 return recordA, err 552 } 553 554 func (objMgr *ObjectManager) UpdateARecord(aRecordRef string, netview string, recordname string, cidr string, ipAddr string, ea EA) (*RecordA, error) { 555 updateRecordA := NewRecordA(RecordA{Ref: aRecordRef}) 556 updateRecordA.Name = recordname 557 if ipAddr != "" { 558 updateRecordA.Ipv4Addr = ipAddr 559 } else { 560 updateRecordA.Ipv4Addr = fmt.Sprintf("func:nextavailableip:%s,%s", cidr, netview) 561 } 562 updateRecordA.Ea = ea 563 refResp, err := objMgr.connector.UpdateObject(updateRecordA, aRecordRef) 564 updateRecordA.Ref = refResp 565 return updateRecordA, err 566 } 567 568 func (objMgr *ObjectManager) DeleteARecord(ref string) (string, error) { 569 return objMgr.connector.DeleteObject(ref) 570 } 571 572 func (objMgr *ObjectManager) CreateCNAMERecord(canonical string, recordname string, dnsview string, ea EA) (*RecordCNAME, error) { 573 574 eas := objMgr.extendEA(ea) 575 576 recordCNAME := NewRecordCNAME(RecordCNAME{ 577 View: dnsview, 578 Name: recordname, 579 Canonical: canonical, 580 Ea: eas}) 581 582 ref, err := objMgr.connector.CreateObject(recordCNAME) 583 recordCNAME.Ref = ref 584 return recordCNAME, err 585 } 586 587 func (objMgr *ObjectManager) GetCNAMERecordByRef(ref string) (*RecordCNAME, error) { 588 recordCNAME := NewRecordCNAME(RecordCNAME{}) 589 err := objMgr.connector.GetObject(recordCNAME, ref, &recordCNAME) 590 return recordCNAME, err 591 } 592 593 func (objMgr *ObjectManager) UpdateCNAMERecord(cnameRef string, canonical string, recordname string, dnsview string, ea EA) (*RecordCNAME, error) { 594 updateRecordCNAME := NewRecordCNAME(RecordCNAME{Ref: cnameRef}) 595 updateRecordCNAME.Canonical = canonical 596 updateRecordCNAME.Name = recordname 597 updateRecordCNAME.Ea = ea 598 refResp, err := objMgr.connector.UpdateObject(updateRecordCNAME, cnameRef) 599 updateRecordCNAME.Ref = refResp 600 return updateRecordCNAME, err 601 } 602 603 func (objMgr *ObjectManager) DeleteCNAMERecord(ref string) (string, error) { 604 return objMgr.connector.DeleteObject(ref) 605 } 606 607 // Creates TXT Record. Use TTL of 0 to inherit TTL from the Zone 608 func (objMgr *ObjectManager) CreateTXTRecord(recordname string, text string, ttl uint, dnsview string) (*RecordTXT, error) { 609 610 recordTXT := NewRecordTXT(RecordTXT{ 611 View: dnsview, 612 Name: recordname, 613 Text: text, 614 Ttl: ttl, 615 }) 616 617 ref, err := objMgr.connector.CreateObject(recordTXT) 618 recordTXT.Ref = ref 619 return recordTXT, err 620 } 621 622 func (objMgr *ObjectManager) GetTXTRecordByRef(ref string) (*RecordTXT, error) { 623 recordTXT := NewRecordTXT(RecordTXT{}) 624 err := objMgr.connector.GetObject(recordTXT, ref, &recordTXT) 625 return recordTXT, err 626 } 627 628 func (objMgr *ObjectManager) GetTXTRecord(name string) (*RecordTXT, error) { 629 if name == "" { 630 return nil, fmt.Errorf("name can not be empty") 631 } 632 var res []RecordTXT 633 634 recordTXT := NewRecordTXT(RecordTXT{Name: name}) 635 636 err := objMgr.connector.GetObject(recordTXT, "", &res) 637 638 if err != nil || res == nil || len(res) == 0 { 639 return nil, err 640 } 641 642 return &res[0], nil 643 } 644 645 func (objMgr *ObjectManager) UpdateTXTRecord(recordname string, text string) (*RecordTXT, error) { 646 var res []RecordTXT 647 648 recordTXT := NewRecordTXT(RecordTXT{Name: recordname}) 649 650 err := objMgr.connector.GetObject(recordTXT, "", &res) 651 652 if len(res) == 0 { 653 return nil, nil 654 } 655 656 res[0].Text = text 657 658 res[0].Zone = "" // set the Zone value to "" as its a non writable field 659 660 _, err = objMgr.connector.UpdateObject(&res[0], res[0].Ref) 661 662 if err != nil || res == nil || len(res) == 0 { 663 return nil, err 664 } 665 666 return &res[0], nil 667 } 668 669 func (objMgr *ObjectManager) DeleteTXTRecord(ref string) (string, error) { 670 return objMgr.connector.DeleteObject(ref) 671 } 672 673 func (objMgr *ObjectManager) CreatePTRRecord(netview string, dnsview string, recordname string, cidr string, ipAddr string, ea EA) (*RecordPTR, error) { 674 675 eas := objMgr.extendEA(ea) 676 677 recordPTR := NewRecordPTR(RecordPTR{ 678 View: dnsview, 679 PtrdName: recordname, 680 Ea: eas}) 681 682 if ipAddr == "" { 683 recordPTR.Ipv4Addr = fmt.Sprintf("func:nextavailableip:%s,%s", cidr, netview) 684 } else { 685 recordPTR.Ipv4Addr = ipAddr 686 } 687 ref, err := objMgr.connector.CreateObject(recordPTR) 688 recordPTR.Ref = ref 689 return recordPTR, err 690 } 691 692 func (objMgr *ObjectManager) GetPTRRecordByRef(ref string) (*RecordPTR, error) { 693 recordPTR := NewRecordPTR(RecordPTR{}) 694 err := objMgr.connector.GetObject(recordPTR, ref, &recordPTR) 695 return recordPTR, err 696 } 697 698 func (objMgr *ObjectManager) DeletePTRRecord(ref string) (string, error) { 699 return objMgr.connector.DeleteObject(ref) 700 } 701 702 // CreateMultiObject unmarshals the result into slice of maps 703 func (objMgr *ObjectManager) CreateMultiObject(req *MultiRequest) ([]map[string]interface{}, error) { 704 705 conn := objMgr.connector.(*Connector) 706 queryParams := QueryParams{forceProxy: false} 707 res, err := conn.makeRequest(CREATE, req, "", queryParams) 708 709 if err != nil { 710 return nil, err 711 } 712 713 var result []map[string]interface{} 714 err = json.Unmarshal(res, &result) 715 716 if err != nil { 717 return nil, err 718 } 719 720 return result, nil 721 } 722 723 // GetUpgradeStatus returns the grid upgrade information 724 func (objMgr *ObjectManager) GetUpgradeStatus(statusType string) ([]UpgradeStatus, error) { 725 var res []UpgradeStatus 726 727 if statusType == "" { 728 // TODO option may vary according to the WAPI version, need to 729 // throw relevant error. 730 msg := fmt.Sprintf("Status type can not be nil") 731 return res, errors.New(msg) 732 } 733 upgradestatus := NewUpgradeStatus(UpgradeStatus{Type: statusType}) 734 err := objMgr.connector.GetObject(upgradestatus, "", &res) 735 736 return res, err 737 } 738 739 // GetAllMembers returns all members information 740 func (objMgr *ObjectManager) GetAllMembers() ([]Member, error) { 741 var res []Member 742 743 memberObj := NewMember(Member{}) 744 err := objMgr.connector.GetObject(memberObj, "", &res) 745 return res, err 746 } 747 748 // GetCapacityReport returns all capacity for members 749 func (objMgr *ObjectManager) GetCapacityReport(name string) ([]CapacityReport, error) { 750 var res []CapacityReport 751 752 capacityObj := CapacityReport{Name: name} 753 capacityReport := NewCapcityReport(capacityObj) 754 err := objMgr.connector.GetObject(capacityReport, "", &res) 755 return res, err 756 } 757 758 // GetLicense returns the license details for member 759 func (objMgr *ObjectManager) GetLicense() ([]License, error) { 760 var res []License 761 762 licenseObj := NewLicense(License{}) 763 err := objMgr.connector.GetObject(licenseObj, "", &res) 764 return res, err 765 } 766 767 // GetLicense returns the license details for grid 768 func (objMgr *ObjectManager) GetGridLicense() ([]License, error) { 769 var res []License 770 771 licenseObj := NewGridLicense(License{}) 772 err := objMgr.connector.GetObject(licenseObj, "", &res) 773 return res, err 774 } 775 776 // GetGridInfo returns the details for grid 777 func (objMgr *ObjectManager) GetGridInfo() ([]Grid, error) { 778 var res []Grid 779 780 gridObj := NewGrid(Grid{}) 781 err := objMgr.connector.GetObject(gridObj, "", &res) 782 return res, err 783 } 784 785 // CreateZoneAuth creates zones and subs by passing fqdn 786 func (objMgr *ObjectManager) CreateZoneAuth(fqdn string, ea EA) (*ZoneAuth, error) { 787 788 eas := objMgr.extendEA(ea) 789 790 zoneAuth := NewZoneAuth(ZoneAuth{ 791 Fqdn: fqdn, 792 Ea: eas}) 793 794 ref, err := objMgr.connector.CreateObject(zoneAuth) 795 zoneAuth.Ref = ref 796 return zoneAuth, err 797 } 798 799 // Retreive a authortative zone by ref 800 func (objMgr *ObjectManager) GetZoneAuthByRef(ref string) (ZoneAuth, error) { 801 var res ZoneAuth 802 803 if ref == "" { 804 return res, nil 805 } 806 zoneAuth := NewZoneAuth(ZoneAuth{}) 807 808 err := objMgr.connector.GetObject(zoneAuth, ref, &res) 809 return res, err 810 } 811 812 // DeleteZoneAuth deletes an auth zone 813 func (objMgr *ObjectManager) DeleteZoneAuth(ref string) (string, error) { 814 return objMgr.connector.DeleteObject(ref) 815 } 816 817 // GetZoneAuth returns the authoritatives zones 818 func (objMgr *ObjectManager) GetZoneAuth() ([]ZoneAuth, error) { 819 var res []ZoneAuth 820 821 zoneAuth := NewZoneAuth(ZoneAuth{}) 822 err := objMgr.connector.GetObject(zoneAuth, "", &res) 823 824 return res, err 825 } 826 827 // GetZoneDelegated returns the delegated zone 828 func (objMgr *ObjectManager) GetZoneDelegated(fqdn string) (*ZoneDelegated, error) { 829 if len(fqdn) == 0 { 830 return nil, nil 831 } 832 var res []ZoneDelegated 833 834 zoneDelegated := NewZoneDelegated(ZoneDelegated{Fqdn: fqdn}) 835 836 err := objMgr.connector.GetObject(zoneDelegated, "", &res) 837 838 if err != nil || res == nil || len(res) == 0 { 839 return nil, err 840 } 841 842 return &res[0], nil 843 } 844 845 // CreateZoneDelegated creates delegated zone 846 func (objMgr *ObjectManager) CreateZoneDelegated(fqdn string, delegate_to []NameServer) (*ZoneDelegated, error) { 847 zoneDelegated := NewZoneDelegated(ZoneDelegated{ 848 Fqdn: fqdn, 849 DelegateTo: delegate_to}) 850 851 ref, err := objMgr.connector.CreateObject(zoneDelegated) 852 zoneDelegated.Ref = ref 853 854 return zoneDelegated, err 855 } 856 857 // UpdateZoneDelegated updates delegated zone 858 func (objMgr *ObjectManager) UpdateZoneDelegated(ref string, delegate_to []NameServer) (*ZoneDelegated, error) { 859 zoneDelegated := NewZoneDelegated(ZoneDelegated{ 860 Ref: ref, 861 DelegateTo: delegate_to}) 862 863 refResp, err := objMgr.connector.UpdateObject(zoneDelegated, ref) 864 zoneDelegated.Ref = refResp 865 return zoneDelegated, err 866 } 867 868 // DeleteZoneDelegated deletes delegated zone 869 func (objMgr *ObjectManager) DeleteZoneDelegated(ref string) (string, error) { 870 return objMgr.connector.DeleteObject(ref) 871 }