]> gitweb.factorcode.org Git - factor.git/blob - extra/hetzner/hetzner.factor
functors: inline the parts of interpolate this needs
[factor.git] / extra / hetzner / hetzner.factor
1 ! Copyright (C) 2022 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs assocs.extras formatting http http.client io
4 io.encodings.string io.encodings.utf8 json.reader kernel
5 namespaces sequences sequences.generalizations ;
6 IN: hetzner
7
8 SYMBOL: hetzner-access-token
9
10 CONSTANT: hetzner-api-v1 "https://api.hetzner.cloud/v1/"
11
12 ERROR: hetzner-access-token-required symbol ;
13
14 : get-hetzner-token ( -- token/* )
15     hetzner-access-token get [
16         hetzner-access-token hetzner-access-token-required
17     ] unless* ;
18
19 : set-hetzner-auth-header ( request -- request )
20     "Bearer " get-hetzner-token append "Authorization" set-header ;
21
22 : hetzner-get ( route -- json )
23     hetzner-api-v1 prepend <get-request>
24     set-hetzner-auth-header http-request nip utf8 decode json> ;
25
26 ! Actions
27 : get-hetzner-actions ( -- servers ) "actions" hetzner-get ;
28 : get-hetzner-action ( action-id -- servers ) "actions/%d" sprintf hetzner-get ;
29
30 ! Certificates
31 : get-hetzner-certificates ( -- servers ) "certificates" hetzner-get ;
32
33 ! Datacenters
34 : get-hetzner-datacenters ( -- servers ) "datacenters" hetzner-get ;
35 : get-hetzner-datacenter ( datacenter-id -- servers ) "datacenters/%s" sprintf hetzner-get ;
36
37 ! Firewalls
38 : get-hetzner-firewalls ( -- servers ) "firewalls" hetzner-get ;
39
40 ! Floating IPs
41 : get-hetzner-floating-ips ( -- servers ) "floating_ips" hetzner-get ;
42
43 ! Images
44 : get-hetzner-images ( -- servers ) "images" hetzner-get ;
45
46 ! ISOs
47 : get-hetzner-isos ( -- servers ) "isos" hetzner-get ;
48 : get-hetzner-iso ( iso-id -- servers ) "isos/%d" sprintf hetzner-get ;
49
50 ! Locations
51 : get-hetzner-locations ( -- servers ) "locations" hetzner-get ;
52
53 ! Networks
54 : get-hetzner-networks ( -- servers ) "networks" hetzner-get ;
55
56 ! Pricing
57 : get-hetzner-pricing ( -- servers ) "pricing" hetzner-get ;
58
59 ! Servers
60 : get-hetzner-servers ( -- servers ) "servers" hetzner-get ;
61 : get-hetzner-server-by-id ( id -- servers ) "servers/%d" sprintf hetzner-get ;
62
63 : server-type. ( hash -- )
64     { "description" "cores" "cpu_type" "memory" "disk" } values-of 5 firstn
65     "%s: %d cores %s,  %dGB RAM, %d GB disk" sprintf print ;
66
67 : hetzner-servers. ( -- )
68     get-hetzner-servers "servers" of [ "server_type" of server-type. ] each ;
69
70 ! Server Types
71 : get-hetzner-server-types ( -- servers ) "server_types" hetzner-get ;
72
73 ! SSH Keys
74 : get-hetzner-ssh-keys ( -- servers ) "ssh_keys" hetzner-get ;
75
76 ! Volumes
77 : get-hetzner-volumes ( -- servers ) "volumes" hetzner-get ;
78
79 ! Volume Actions
80 : get-hetzner-volume-actions ( volume-id -- servers ) "volumes/%d/actions" sprintf hetzner-get ;
81 : get-hetzner-volume-action ( volume-id action-id -- servers ) "volumes/%d/actions/%d" sprintf hetzner-get ;