github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/example/example.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "time" 7 8 "github.com/1and1/oneandone-cloudserver-sdk-go" 9 ) 10 11 func main() { 12 //Set an authentication token 13 token := oneandone.SetToken("82ee732b8d47e451be5c6ad5b7b56c81") 14 //Create an API client 15 api := oneandone.New(token, oneandone.BaseUrl) 16 17 // List server appliances 18 saps, err := api.ListServerAppliances() 19 20 // printObject(saps) 21 // time.Sleep(time.Second * 10) 22 23 var sa oneandone.ServerAppliance 24 for _, a := range saps { 25 if a.Type == "IMAGE" { 26 sa = a 27 } 28 } 29 30 // Create a server 31 req := oneandone.ServerRequest{ 32 Name: "Example Server", 33 Description: "Example server description.", 34 ApplianceId: sa.Id, 35 PowerOn: true, 36 ServerType: "cloud", 37 Hardware: oneandone.Hardware{ 38 Vcores: 1, 39 CoresPerProcessor: 1, 40 Ram: 2, 41 Hdds: []oneandone.Hdd{ 42 { 43 Size: sa.MinHddSize, 44 IsMain: true, 45 }, 46 }, 47 }, 48 } 49 server_id, server, err := api.CreateServer(&req) 50 if err == nil { 51 // Wait until server is created and powered on for at most 60 x 10 seconds 52 err = api.WaitForState(server, "POWERED_ON", 10, 60) 53 } 54 55 // Get a server 56 server, err = api.GetServer(server_id) 57 58 // printObject(server) 59 // time.Sleep(time.Second * 10) 60 61 // Create a load balancer 62 lbr := oneandone.LoadBalancerRequest{ 63 Name: "Load Balancer Example", 64 Description: "API created load balancer.", 65 Method: "ROUND_ROBIN", 66 Persistence: oneandone.Bool2Pointer(true), 67 PersistenceTime: oneandone.Int2Pointer(1200), 68 HealthCheckTest: "TCP", 69 HealthCheckInterval: oneandone.Int2Pointer(40), 70 Rules: []oneandone.LoadBalancerRule{ 71 { 72 Protocol: "TCP", 73 PortBalancer: 80, 74 PortServer: 80, 75 Source: "0.0.0.0", 76 }, 77 }, 78 } 79 var lb *oneandone.LoadBalancer 80 var lb_id string 81 lb_id, lb, err = api.CreateLoadBalancer(&lbr) 82 if err != nil { 83 api.WaitForState(lb, "ACTIVE", 10, 30) 84 } 85 86 // Get a load balancer 87 lb, err = api.GetLoadBalancer(lb.Id) 88 89 // printObject(lb) 90 // time.Sleep(time.Second * 10) 91 92 // Assign a load balancer to server's IP 93 server, err = api.AssignServerIpLoadBalancer(server.Id, server.Ips[0].Id, lb_id) 94 95 // printObject(server) 96 // time.Sleep(time.Second * 10) 97 98 // Create a firewall policy 99 fpr := oneandone.FirewallPolicyRequest{ 100 Name: "Firewall Policy Example", 101 Description: "API created firewall policy.", 102 Rules: []oneandone.FirewallPolicyRule{ 103 { 104 Protocol: "TCP", 105 PortFrom: oneandone.Int2Pointer(80), 106 PortTo: oneandone.Int2Pointer(80), 107 }, 108 }, 109 } 110 var fp *oneandone.FirewallPolicy 111 var fp_id string 112 fp_id, fp, err = api.CreateFirewallPolicy(&fpr) 113 if err == nil { 114 api.WaitForState(fp, "ACTIVE", 10, 30) 115 } 116 117 // Get a firewall policy 118 fp, err = api.GetFirewallPolicy(fp_id) 119 120 // Add servers IPs to a firewall policy. 121 ips := []string{server.Ips[0].Id} 122 fp, err = api.AddFirewallPolicyServerIps(fp.Id, ips) 123 if err == nil { 124 api.WaitForState(fp, "ACTIVE", 10, 60) 125 } 126 127 // printObject(fp) 128 // time.Sleep(time.Second * 10) 129 130 //Shutdown a server using 'SOFTWARE' method 131 server, err = api.ShutdownServer(server.Id, false) 132 if err != nil { 133 err = api.WaitForState(server, "POWERED_OFF", 5, 20) 134 } 135 136 // printObject(server) 137 // time.Sleep(time.Second * 10) 138 139 // Delete a load balancer 140 lb, err = api.DeleteLoadBalancer(lb.Id) 141 if err != nil { 142 err = api.WaitUntilDeleted(lb) 143 } 144 145 // printObject(lb) 146 // time.Sleep(time.Second * 10) 147 148 // Delete a firewall policy 149 fp, err = api.DeleteFirewallPolicy(fp.Id) 150 if err != nil { 151 err = api.WaitUntilDeleted(fp) 152 } 153 154 // printObject(fp) 155 // time.Sleep(time.Second * 10) 156 157 // List usages in last 24h 158 var usages *oneandone.Usages 159 usages, err = api.ListUsages("LAST_24H", nil, nil) 160 161 printObject(usages) 162 // time.Sleep(time.Second * 10) 163 164 // List usages in last 5 hours 165 n := time.Now() 166 ed := time.Date(n.Year(), n.Month(), n.Day(), n.Hour(), n.Minute(), n.Second(), 0, time.UTC) 167 sd := ed.Add(-(time.Hour * 5)) 168 usages, err = api.ListUsages("CUSTOM", &sd, &ed) 169 170 // printObject(usages) 171 // time.Sleep(time.Second * 10) 172 173 //Create a shared storage 174 ssr := oneandone.SharedStorageRequest{ 175 Name: "Shared Storage Example", 176 Description: "API alocated 100 GB disk.", 177 Size: oneandone.Int2Pointer(100), 178 } 179 var ss *oneandone.SharedStorage 180 var ss_id string 181 ss_id, ss, err = api.CreateSharedStorage(&ssr) 182 if err != nil { 183 api.WaitForState(ss, "ACTIVE", 10, 30) 184 } 185 186 // printObject(ss) 187 // time.Sleep(time.Second * 10) 188 189 // List shared storages on page 1, 5 results per page and sort by 'name' field. 190 // Include only 'name', 'size' and 'minimum_size_allowed' fields in the result. 191 var shs []oneandone.SharedStorage 192 shs, err = api.ListSharedStorages(1, 5, "name", "", "name,size,minimum_size_allowed") 193 194 printObject(shs) 195 // time.Sleep(time.Second * 10) 196 197 // List all shared storages that contain 'example' string 198 shs, err = api.ListSharedStorages(0, 0, "", "example", "") 199 200 // printObject(shs) 201 // time.Sleep(time.Second * 10) 202 203 // Delete a shared storage 204 ss, err = api.DeleteSharedStorage(ss_id) 205 if err == nil { 206 err = api.WaitUntilDeleted(ss) 207 } 208 209 // printObject(ss) 210 // time.Sleep(time.Second * 10) 211 212 // Delete a server 213 server, err = api.DeleteServer(server.Id, false) 214 if err == nil { 215 err = api.WaitUntilDeleted(server) 216 } 217 218 // printObject(server) 219 220 // The next example illustrates how to create a `TYPO3` application server 221 // of a fixed size with an initial password and a firewall policy that has just been created. 222 223 // Create a new firewall policy 224 fpr = oneandone.FirewallPolicyRequest{ 225 Name: "HTTPS Traffic Policy", 226 Rules: []oneandone.FirewallPolicyRule{ 227 { 228 Protocol: "TCP", 229 PortFrom: oneandone.Int2Pointer(443), 230 PortTo: oneandone.Int2Pointer(443), 231 }, 232 }, 233 } 234 235 _, fp, err = api.CreateFirewallPolicy(&fpr) 236 if fp != nil && err == nil { 237 api.WaitForState(fp, "ACTIVE", 5, 60) 238 239 // Look for the TYPO3 application appliance 240 saps, _ := api.ListServerAppliances(0, 0, "", "typo3", "") 241 242 var sa oneandone.ServerAppliance 243 for _, a := range saps { 244 if a.Type == "APPLICATION" { 245 sa = a 246 break 247 } 248 } 249 250 var fixed_flavours []oneandone.FixedInstanceInfo 251 var fixed_size_id string 252 253 fixed_flavours, err = api.ListFixedInstanceSizes() 254 for _, fl := range fixed_flavours { 255 //look for 'M' size 256 if fl.Name == "M" { 257 fixed_size_id = fl.Id 258 break 259 } 260 } 261 262 req := oneandone.ServerRequest{ 263 Name: "TYPO3 Server", 264 ApplianceId: sa.Id, 265 PowerOn: true, 266 Password: "ucr_kXW8,.2SdMU", 267 Hardware: oneandone.Hardware{ 268 FixedInsSizeId: fixed_size_id, 269 }, 270 FirewallPolicyId: fp.Id, 271 } 272 _, server, _ := api.CreateServer(&req) 273 if server != nil { 274 api.WaitForState(server, "POWERED_ON", 10, 90) 275 } 276 } 277 } 278 279 func printObject(in interface{}) { 280 bytes, _ := json.MarshalIndent(in, "", " ") 281 fmt.Printf("%v\n", string(bytes)) 282 }