package openstack import ( "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/firewalls" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/policies" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/rules" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers" "github.com/gophercloud/gophercloud/openstack/networking/v2/networks" "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" "github.com/gophercloud/gophercloud/openstack/networking/v2/subnets" ) // FirewallCreateOpts represents the attributes used when creating a new firewall. type FirewallCreateOpts struct { firewalls.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToFirewallCreateMap casts a CreateOpts struct to a map. // It overrides firewalls.ToFirewallCreateMap to add the ValueSpecs field. func (opts FirewallCreateOpts) ToFirewallCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "firewall") } // FloatingIPCreateOpts represents the attributes used when creating a new floating ip. type FloatingIPCreateOpts struct { floatingips.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToFloatingIPCreateMap casts a CreateOpts struct to a map. // It overrides floatingips.ToFloatingIPCreateMap to add the ValueSpecs field. func (opts FloatingIPCreateOpts) ToFloatingIPCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "floatingip") } // KeyPairCreateOpts represents the attributes used when creating a new keypair. type KeyPairCreateOpts struct { keypairs.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToKeyPairCreateMap casts a CreateOpts struct to a map. // It overrides keypairs.ToKeyPairCreateMap to add the ValueSpecs field. func (opts KeyPairCreateOpts) ToKeyPairCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "keypair") } // NetworkCreateOpts represents the attributes used when creating a new network. type NetworkCreateOpts struct { networks.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToNetworkCreateMap casts a CreateOpts struct to a map. // It overrides networks.ToNetworkCreateMap to add the ValueSpecs field. func (opts NetworkCreateOpts) ToNetworkCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "network") } // PolicyCreateOpts represents the attributes used when creating a new firewall policy. type PolicyCreateOpts struct { policies.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToPolicyCreateMap casts a CreateOpts struct to a map. // It overrides policies.ToFirewallPolicyCreateMap to add the ValueSpecs field. func (opts PolicyCreateOpts) ToFirewallPolicyCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "firewall_policy") } // PortCreateOpts represents the attributes used when creating a new port. type PortCreateOpts struct { ports.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToPortCreateMap casts a CreateOpts struct to a map. // It overrides ports.ToPortCreateMap to add the ValueSpecs field. func (opts PortCreateOpts) ToPortCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "port") } // RouterCreateOpts represents the attributes used when creating a new router. type RouterCreateOpts struct { routers.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToRouterCreateMap casts a CreateOpts struct to a map. // It overrides routers.ToRouterCreateMap to add the ValueSpecs field. func (opts RouterCreateOpts) ToRouterCreateMap() (map[string]interface{}, error) { return BuildRequest(opts, "router") } // RuleCreateOpts represents the attributes used when creating a new firewall rule. type RuleCreateOpts struct { rules.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToRuleCreateMap casts a CreateOpts struct to a map. // It overrides rules.ToRuleCreateMap to add the ValueSpecs field. func (opts RuleCreateOpts) ToRuleCreateMap() (map[string]interface{}, error) { b, err := BuildRequest(opts, "firewall_rule") if err != nil { return nil, err } if m := b["firewall_rule"].(map[string]interface{}); m["protocol"] == "any" { m["protocol"] = nil } return b, nil } // SubnetCreateOpts represents the attributes used when creating a new subnet. type SubnetCreateOpts struct { subnets.CreateOpts ValueSpecs map[string]string `json:"value_specs,omitempty"` } // ToSubnetCreateMap casts a CreateOpts struct to a map. // It overrides subnets.ToSubnetCreateMap to add the ValueSpecs field. func (opts SubnetCreateOpts) ToSubnetCreateMap() (map[string]interface{}, error) { b, err := BuildRequest(opts, "subnet") if err != nil { return nil, err } if m := b["subnet"].(map[string]interface{}); m["gateway_ip"] == "" { m["gateway_ip"] = nil } return b, nil }