/
neutron-create-port.go
105 lines (90 loc) · 2.27 KB
/
neutron-create-port.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/networks"
"github.com/rackspace/gophercloud/openstack/networking/v2/ports"
"github.com/rackspace/gophercloud/pagination"
)
func main() {
auth_opts := gophercloud.AuthOptions{
IdentityEndpoint: "http://192.168.0.3:5000/v2.0",
Username: "admin",
TenantName: "admin",
Password: "admin",
AllowReauth: true,
}
provider, err := openstack.AuthenticatedClient(auth_opts)
if err != nil {
fmt.Println("Authentication error: ", err)
os.Exit(1)
}
client, err := openstack.NewNetworkV2(provider, gophercloud.EndpointOpts{
Region: "RegionOne",
})
if err != nil {
fmt.Println("Get neutron client error:", err)
os.Exit(1)
}
networkID := ""
opts := networks.ListOpts{}
pager := networks.List(client, opts)
err = pager.EachPage(func(page pagination.Page) (bool, error) {
networkList, e := networks.ExtractNetworks(page)
for _, n := range networkList {
if n.Name != "br-ex" {
networkID = n.ID
break
}
}
return true, e
})
if err != nil {
fmt.Println("Error ", err)
os.Exit(1)
}
ip := "172.172.172.127"
ipList := []map[string]string{{"ip_address": ip}}
data, err := json.Marshal(ipList)
if err != nil {
fmt.Printf("Encode ipList %s failed: %v\n", ipList, err)
os.Exit(1)
}
copts := ports.CreateOpts{
NetworkID: networkID,
FixedIPs: string(data),
AdminStateUp: ports.Up,
}
port, err := ports.Create(client, copts).Extract()
if err != nil {
fmt.Println("Port create failed: ", err)
os.Exit(1)
}
fmt.Println("Port created: ", port)
var results []ports.Port
listOpts := ports.ListOpts{
NetworkID: networkID,
}
portPager := ports.List(client, listOpts)
err = portPager.EachPage(func(page pagination.Page) (bool, error) {
portList, err := ports.ExtractPorts(page)
if err != nil {
fmt.Println("Get openstack ports error: %v", err)
return false, err
}
for _, port := range portList {
results = append(results, port)
}
return true, err
})
if err != nil {
fmt.Printf("Get ports error: %s", err)
os.Exit(1)
}
for _, p := range results {
fmt.Println(p.ID, p.FixedIPs[0].IPAddress)
}
}