@@ -23,13 +23,29 @@ import (
23
23
"net/url"
24
24
"regexp"
25
25
26
+ "github.com/google/uuid"
26
27
"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips"
27
28
)
28
29
29
30
type floatingIPListResponse struct {
30
31
FloatingIPs []floatingips.FloatingIP `json:"floatingips"`
31
32
}
32
33
34
+ type floatingIPType struct {
35
+ ID string `json:"id"`
36
+ FloatingIP string `json:"floatingip"`
37
+ TenantID string `json:"tenant_id"`
38
+ ProjectID string `json:"project_id"`
39
+ }
40
+
41
+ type floatingIPCreateRequest struct {
42
+ FloatingIP floatingIPType `json:"floatingip"`
43
+ }
44
+
45
+ type floatingIPGetResponse struct {
46
+ FloatingIP floatingips.FloatingIP `json:"floatingip"`
47
+ }
48
+
33
49
func (m * MockClient ) mockFloatingIPs () {
34
50
re := regexp .MustCompile (`/floatingips/?` )
35
51
@@ -46,6 +62,8 @@ func (m *MockClient) mockFloatingIPs() {
46
62
r .ParseForm ()
47
63
m .listFloatingIPs (w , r .Form )
48
64
}
65
+ case http .MethodPost :
66
+ m .createFloatingIp (w , r )
49
67
default :
50
68
w .WriteHeader (http .StatusBadRequest )
51
69
}
@@ -73,3 +91,39 @@ func (m *MockClient) listFloatingIPs(w http.ResponseWriter, vals url.Values) {
73
91
panic ("failed to write body" )
74
92
}
75
93
}
94
+
95
+ func (m * MockClient ) createFloatingIp (w http.ResponseWriter , r * http.Request ) {
96
+ var create floatingIPCreateRequest
97
+ err := json .NewDecoder (r .Body ).Decode (& create )
98
+ if err != nil {
99
+ panic ("error decoding create floating ip request" )
100
+ }
101
+
102
+ w .WriteHeader (http .StatusAccepted )
103
+
104
+ f := floatingips.FloatingIP {
105
+ ID : uuid .New ().String (),
106
+ FloatingIP : create .FloatingIP .FloatingIP ,
107
+ TenantID : create .FloatingIP .TenantID ,
108
+ //UpdatedAt: time.Now(),
109
+ //CreatedAt: time.Now(),
110
+ ProjectID : create .FloatingIP .ProjectID ,
111
+ Status : "ACTIVE" ,
112
+ RouterID : "router" ,
113
+ Tags : nil ,
114
+ RevisionNumber : 0 ,
115
+ }
116
+ m .floatingips [f .ID ] = f
117
+
118
+ resp := floatingIPGetResponse {
119
+ FloatingIP : f ,
120
+ }
121
+ respB , err := json .Marshal (resp )
122
+ if err != nil {
123
+ panic (fmt .Sprintf ("failed to marshal %+v" , resp ))
124
+ }
125
+ _ , err = w .Write (respB )
126
+ if err != nil {
127
+ panic ("failed to write body" )
128
+ }
129
+ }
0 commit comments