Merge "app/gerrit: fix advertised address"
diff --git a/WORKSPACE b/WORKSPACE
index 58dc8e5..6450987 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -53,7 +53,7 @@
git_repository(
name = "com_apt_itude_rules_pip",
- commit = "e5ed5e72bf5a7521244e1d2119821628bbf17263",
+ commit = "ce667087818553cdc4b1a2258fc53df917c4f87c",
remote = "https://github.com/apt-itude/rules_pip.git",
)
diff --git a/bgpwtf/cccampix/BUILD b/bgpwtf/cccampix/BUILD
new file mode 100644
index 0000000..0d9fd06
--- /dev/null
+++ b/bgpwtf/cccampix/BUILD
@@ -0,0 +1,9 @@
+py_binary(
+ name = "sync",
+ srcs = [
+ "sync.py",
+ ],
+ deps = [
+ "@pip36//requests",
+ ],
+)
diff --git a/go/svc/cmc-proxy/BUILD.bazel b/bgpwtf/cccampix/peeringdb/BUILD.bazel
similarity index 64%
copy from go/svc/cmc-proxy/BUILD.bazel
copy to bgpwtf/cccampix/peeringdb/BUILD.bazel
index 56f3495..22c90e3 100644
--- a/go/svc/cmc-proxy/BUILD.bazel
+++ b/bgpwtf/cccampix/peeringdb/BUILD.bazel
@@ -2,16 +2,13 @@
go_library(
name = "go_default_library",
- srcs = [
- "client.go",
- "main.go",
- ],
- importpath = "code.hackerspace.pl/hscloud/go/svc/cmc-proxy",
+ srcs = ["main.go"],
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/cccampix/peeringdb",
visibility = ["//visibility:private"],
deps = [
+ "//bgpwtf/cccampix/peeringdb/schema:go_default_library",
+ "//bgpwtf/cccampix/proto:go_default_library",
"//go/mirko:go_default_library",
- "//go/svc/cmc-proxy/proto:go_default_library",
- "@com_github_cenkalti_backoff//:go_default_library",
"@com_github_golang_glog//:go_default_library",
"@org_golang_google_grpc//codes:go_default_library",
"@org_golang_google_grpc//status:go_default_library",
@@ -19,7 +16,7 @@
)
go_binary(
- name = "cmc-proxy",
+ name = "peeringdb",
embed = [":go_default_library"],
visibility = ["//visibility:public"],
)
diff --git a/bgpwtf/cccampix/peeringdb/README.md b/bgpwtf/cccampix/peeringdb/README.md
new file mode 100644
index 0000000..502760e
--- /dev/null
+++ b/bgpwtf/cccampix/peeringdb/README.md
@@ -0,0 +1,41 @@
+PeeringDBProxy
+==============
+
+Exposes PeeringDB data as gRPC.
+
+API defined in [ix.proto](../proto/ix.proto).
+
+Usage
+-----
+
+ $ bazel run //bgpwtf/cccampix/peeringdb:peeringdb -- -hspki_disable
+ $ grpcurl -plaintext -d '{"id": 2325}' 127.0.0.1:4200 ix.PeeringDBProxy.GetIXMembers
+ {
+ "members": [
+ {
+ "asn": 206924,
+ "ipv4": "185.230.223.195",
+ "name": "BENJOJONET"
+ },
+ {
+ "asn": 207080,
+ "ipv4": "185.230.223.194",
+ "ipv6": "fe80::8651:4050:1715:bc4f",
+ "name": "Basil Fillan"
+ },
+ {
+ "asn": 39192,
+ "ipv4": "185.230.223.198",
+ "ipv6": "fe80::3:9192:1",
+ "name": "JackNet"
+ },
+ {
+ "asn": 205271,
+ "ipv4": "185.230.223.199",
+ "ipv6": "fe80::20:5271:1",
+ "name": "Harry Reeder"
+ }
+ ]
+ }
+
+
diff --git a/bgpwtf/cccampix/peeringdb/main.go b/bgpwtf/cccampix/peeringdb/main.go
new file mode 100644
index 0000000..fa11651
--- /dev/null
+++ b/bgpwtf/cccampix/peeringdb/main.go
@@ -0,0 +1,97 @@
+package main
+
+import (
+ "context"
+ "flag"
+
+ "github.com/golang/glog"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+
+ "code.hackerspace.pl/hscloud/bgpwtf/cccampix/peeringdb/schema"
+ pb "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto"
+ "code.hackerspace.pl/hscloud/go/mirko"
+)
+
+type service struct {
+}
+
+func (s *service) GetIXMembers(ctx context.Context, req *pb.GetIXMembersRequest) (*pb.GetIXMembersResponse, error) {
+ if req.Id == 0 {
+ return nil, status.Error(codes.InvalidArgument, "IX id must be given")
+ }
+
+ // First, get netixlans (membership info) for the given IX.
+ js := struct {
+ Data []schema.NetIXLan `json:"Data"`
+ }{}
+ err := schema.Get(ctx, &js, schema.NetIXLanInIXURL(req.Id))
+ if err != nil {
+ return nil, status.Errorf(codes.Unavailable, "PeeringDB query error: %v", err)
+ }
+
+ // Build set of seen Nets/ASs.
+ netids := make(map[int64]bool)
+ for _, netixlan := range js.Data {
+ netids[netixlan.NetID] = true
+ }
+
+ // Convert set to unique list.
+ nets := make([]int64, len(netids))
+ i := 0
+ for id, _ := range netids {
+ nets[i] = id
+ i += 1
+ }
+
+ // Request information about nets/ASNs:
+ js2 := struct {
+ Data []schema.Net `json:"Data"`
+ }{}
+ err = schema.Get(ctx, &js2, schema.NetURLMulti(nets))
+ if err != nil {
+ return nil, status.Errorf(codes.Unavailable, "PeeringDB query error: %v", err)
+ }
+
+ // Make map net id -> Net
+ netidsNet := make(map[int64]*schema.Net)
+ for _, net := range js2.Data {
+ net := net
+ netidsNet[net.ID] = &net
+ }
+
+ // Build joined response.
+
+ res := &pb.GetIXMembersResponse{
+ Members: make([]*pb.GetIXMembersResponse_Member, len(js.Data)),
+ }
+
+ for i, netixlan := range js.Data {
+ res.Members[i] = &pb.GetIXMembersResponse_Member{
+ Asn: netixlan.ASN,
+ Ipv4: netixlan.IPv4,
+ Ipv6: netixlan.IPv6,
+ Name: netidsNet[netixlan.NetID].Name,
+ }
+ }
+
+ return res, nil
+}
+
+func main() {
+ flag.Parse()
+ mi := mirko.New()
+
+ if err := mi.Listen(); err != nil {
+ glog.Exitf("Listen failed: %v", err)
+ }
+
+ s := &service{}
+ pb.RegisterPeeringDBProxyServer(mi.GRPC(), s)
+
+ if err := mi.Serve(); err != nil {
+ glog.Exitf("Serve failed: %v", err)
+ }
+
+ <-mi.Done()
+}
diff --git a/bgpwtf/cccampix/peeringdb/schema/BUILD.bazel b/bgpwtf/cccampix/peeringdb/schema/BUILD.bazel
new file mode 100644
index 0000000..8eded08
--- /dev/null
+++ b/bgpwtf/cccampix/peeringdb/schema/BUILD.bazel
@@ -0,0 +1,11 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+go_library(
+ name = "go_default_library",
+ srcs = [
+ "schema.go",
+ "urls.go",
+ ],
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/cccampix/peeringdb/schema",
+ visibility = ["//visibility:public"],
+)
diff --git a/bgpwtf/cccampix/peeringdb/schema/schema.go b/bgpwtf/cccampix/peeringdb/schema/schema.go
new file mode 100644
index 0000000..0d48aed
--- /dev/null
+++ b/bgpwtf/cccampix/peeringdb/schema/schema.go
@@ -0,0 +1,34 @@
+package schema
+
+// Partial definition from https://www.peeringdb.com/apidocs/
+
+type IX struct {
+ ID int64 `json:"id"`
+ OrgID int64 `json:"org_id"`
+ Name string `json:"name"`
+ IXLanSet []IXLan `json:"ixlan_set"`
+}
+
+type IXLan struct {
+ ID int64 `json:"id"`
+ Name string `json:"name"`
+ NetSet []Net `json:"net_set"`
+}
+
+type Net struct {
+ ID int64 `json:"id"`
+ OrgID int64 `json:"org_id"`
+ Name string `json:"name"`
+ ASN int64 `json:"asn"`
+}
+
+type NetIXLan struct {
+ ID int64 `json:"id"`
+ NetID int64 `json:"net_id"`
+ IXID int64 `json:"ix_id"`
+ Name string `json:"name"`
+ Speed int64 `json:"speed"`
+ ASN int64 `json:"asn"`
+ IPv4 string `json:"ipaddr4"`
+ IPv6 string `json:"ipaddr6"`
+}
diff --git a/bgpwtf/cccampix/peeringdb/schema/urls.go b/bgpwtf/cccampix/peeringdb/schema/urls.go
new file mode 100644
index 0000000..abe5f56
--- /dev/null
+++ b/bgpwtf/cccampix/peeringdb/schema/urls.go
@@ -0,0 +1,61 @@
+package schema
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "strings"
+)
+
+func IXURL(id int64) string {
+ return fmt.Sprintf("https://peeringdb.com/api/ix/%d.json?depth=4", id)
+}
+
+func NetIXLanInIXURL(id int64) string {
+ return fmt.Sprintf("https://peeringdb.com/api/netixlan?ix_id__in=%d", id)
+}
+
+func NetURLMulti(ids []int64) string {
+ sid := make([]string, len(ids))
+ for i, id := range ids {
+ sid[i] = fmt.Sprintf("%d", id)
+ }
+ return fmt.Sprintf("https://peeringdb.com/api/net?id__in=%s", strings.Join(sid, ","))
+}
+
+func Get(ctx context.Context, obj interface{}, url string) error {
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return fmt.Errorf("http.NewRequest(GET, %q): %v", url, err)
+ }
+
+ req.Header.Add("User-Agent", "bgpwtf-cccampix-peeringdbproxy/1.0 (https://code.hackerspace.pl/hscloud/bgpwtf/cccampix/peeringdb)")
+
+ req = req.WithContext(ctx)
+
+ client := http.DefaultClient
+ res, err := client.Do(req)
+ if err != nil {
+ return fmt.Errorf("client.Do(%v): %v", req, err)
+ }
+
+ defer res.Body.Close()
+
+ if res.StatusCode != 200 {
+ return fmt.Errorf("got status code %d", res.StatusCode)
+ }
+
+ data, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ return fmt.Errorf("could not read response: %v", err)
+ }
+
+ err = json.Unmarshal(data, &obj)
+ if err != nil {
+ return fmt.Errorf("could not parse response JSON: %v", err)
+ }
+
+ return nil
+}
diff --git a/bgpwtf/cccampix/proto/BUILD.bazel b/bgpwtf/cccampix/proto/BUILD.bazel
new file mode 100644
index 0000000..023cd8d
--- /dev/null
+++ b/bgpwtf/cccampix/proto/BUILD.bazel
@@ -0,0 +1,23 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+proto_library(
+ name = "ix_proto",
+ srcs = ["ix.proto"],
+ visibility = ["//visibility:public"],
+)
+
+go_proto_library(
+ name = "ix_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto",
+ proto = ":ix_proto",
+ visibility = ["//visibility:public"],
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":ix_go_proto"],
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto",
+ visibility = ["//visibility:public"],
+)
diff --git a/bgpwtf/cccampix/proto/ix.proto b/bgpwtf/cccampix/proto/ix.proto
new file mode 100644
index 0000000..73bc4d1
--- /dev/null
+++ b/bgpwtf/cccampix/proto/ix.proto
@@ -0,0 +1,26 @@
+syntax = "proto3";
+package ix;
+
+message GetIXMembersRequest {
+ // IX ID from PeeringDB
+ int64 id = 1;
+}
+
+message GetIXMembersResponse {
+ message Member {
+ int64 asn = 1;
+ // Per PeeringDB, at least one of the following two address families
+ // will be set.
+ string ipv4 = 2;
+ string ipv6 = 3;
+ // AS/network name.
+ string name = 4;
+ };
+
+ repeated Member members = 1;
+}
+
+service PeeringDBProxy {
+ // GetIXMembers returns information about membership of a given PeeringDB IX.
+ rpc GetIXMembers(GetIXMembersRequest) returns (GetIXMembersResponse);
+}
diff --git a/bgpwtf/cccampix/sync.py b/bgpwtf/cccampix/sync.py
new file mode 100644
index 0000000..31c2d2e
--- /dev/null
+++ b/bgpwtf/cccampix/sync.py
@@ -0,0 +1,216 @@
+"""
+Updates IRR objects in RIPE for the CCCamp IX.
+
+This, given a mntner password and a list of ASNs taking part in the IXP will
+ensure the right IRR objects are present:
+
+ - an aut-num containing import/export RPSL rules
+ - an as-set containing all member ASs.
+
+
+"""
+
+import difflib
+import string
+import sys
+import time
+
+import requests
+
+
+class IRRObject:
+ """An IRR object from RIPE."""
+ TYPE = None
+ def __init__(self, fields=None):
+ self.fields = fields or []
+
+ def add(self, k, v):
+ self.fields.append((k, v))
+
+ def render(self):
+ """Render to IRR format."""
+ return '\n'.join('{:16s}{}'.format(k+":", v) for k, v in self.fields) + "\n"
+
+ @classmethod
+ def from_ripe(cls, v):
+ """Download this object from the RIPE REST API."""
+ if cls.TYPE is None:
+ raise Exception('cannot fetch untyped IRRObject')
+
+ r = requests.get('https://rest.db.ripe.net/ripe/{}/{}.json'.format(cls.TYPE, v))
+ d = r.json()
+
+ obj = d['objects']['object'][0]
+ assert obj['type'] == cls.TYPE
+ assert obj['primary-key']['attribute'][0]['value'] == v
+
+ attrs = obj['attributes']['attribute']
+
+ fields = []
+ for attr in attrs:
+ # Skip metadata.
+ if attr['name'] in ('created', 'last-modified'):
+ continue
+ fields.append((attr['name'], attr['value']))
+
+ return cls(fields)
+
+ def send_to_ripe(self, password):
+ """Update this object (or create new) in RIPE using the SyncUpdates API."""
+ res = self.render()
+ res += 'password: {}\n'.format(password)
+
+ data = {
+ 'DATA': res,
+ }
+ r = requests.post('http://syncupdates.db.ripe.net/', files=data)
+ res = r.text
+ if 'Modify SUCCEEDED' not in res:
+ print(res)
+ raise Exception("Unexpected result from RIPE syncupdates")
+
+
+banner = [
+ ('remarks', r".--------------------------------------."),
+ ('remarks', r"| _ _ __ |"),
+ ('remarks', r"| | |__ __ _ _ ____ _| |_ / _| |"),
+ ('remarks', r"| | '_ \ / _` | '_ \ \ /\ / / __| |_ |"),
+ ('remarks', r"| | |_) | (_| | |_) \ V V /| |_| _| |"),
+ ('remarks', r"| |_.__/ \__, | .__(_)_/\_/ \__|_| |"),
+ ('remarks', r"| |___/|_| |"),
+ ('remarks', r"|--------------------------------------|"),
+ ('remarks', r"| CCCamp2019 Internet Exchange Point |"),
+ ('remarks', r"'--------------------------------------'"),
+ ('remarks', r''),
+ ('remarks', r'// 21. - 25. August 2019'),
+ ('remarks', r'// Ziegeleipark Mildenberg, Zehdenick, Germany, Earth, Milky Way'),
+ ('remarks', r'// Join us: https://bgp.wtf/cccamp19'),
+ ('remarks', r''),
+]
+
+
+class IXPAutNum(IRRObject):
+ """An aut-num (AS) object."""
+ TYPE = 'aut-num'
+ @classmethod
+ def make_for_members(cls, members):
+ fields = [
+ ('aut-num', 'AS208521'),
+ ('as-name', 'BGPWTF-CCCAMP19-IX'),
+ ] + banner + [
+ ('remarks', '// Current members:'),
+ ]
+
+ for member in sorted(list(members)):
+ fields.append(('import', 'from {} accept {}'.format(member, member)))
+ fields.append(('export', 'to {} announce AS-CCCAMP19-IX'.format(member)))
+
+ fields += [
+ ('remarks', ''),
+ ('remarks', '// Abuse: noc@hackerspace.pl'),
+ ('org', 'ORG-SH103-RIPE'),
+ ('admin-c', 'HACK2-RIPE'),
+ ('tech-c', 'HACK2-RIPE'),
+ ('status', 'ASSIGNED'),
+ ('mnt-by', 'RIPE-NCC-END-MNT'),
+ ('mnt-by', 'BGPWTF-AUTOMATION'),
+ ('mnt-by', 'pl-hs-1-mnt'),
+ ('source', 'RIPE'),
+ ]
+
+ return cls(fields)
+
+
+class ASSet(IRRObject):
+ """An as-set object."""
+ TYPE = 'as-set'
+ @classmethod
+ def make_for_members(cls, members):
+ fields = [
+ ('as-set', 'AS-CCCAMP19-IX'),
+ ('admin-c', 'HACK2-RIPE'),
+ ] + banner + [
+ ('remarks', '// Current members:'),
+ ]
+
+ for member in sorted(list(members)):
+ fields.append(('members', member))
+
+ fields += [
+ ('remarks', ''),
+ ('remarks', '// Abuse: noc@hackerspace.pl'),
+ ('tech-c', 'HACK2-RIPE'),
+ ('mnt-by', 'BGPWTF-AUTOMATION'),
+ ('mnt-by', 'pl-hs-1-mnt'),
+ ('source', 'RIPE'),
+ ]
+
+ return cls(fields)
+
+
+def sync(want, got, password, force):
+ """Sync an object if there is a diff to its current state."""
+ wantr = want.render().split('\n')
+ gotr = got.render().split('\n')
+
+ d = list(difflib.unified_diff(gotr, wantr, fromfile='got', tofile='want'))
+ fields_diff = set()
+ for dd in d:
+ if dd.startswith('---'):
+ continue
+ if dd.startswith('+++'):
+ continue
+ if not dd.startswith('+') and not dd.startswith('-'):
+ continue
+
+ field = dd[1:].split(':')[0]
+ fields_diff.add(field)
+
+ # We ignore remarks field changes, because the RIPE API returns us them always
+ # mangled (with spaces missing in the ASCII art).
+ if list(fields_diff) == ['remarks'] and not force:
+ print('No changes.')
+ return
+
+ if force:
+ print('Forcing update')
+ else:
+ print('Diff:')
+ print('\n'.join(d))
+ want.send_to_ripe(password)
+ print('Updated.')
+
+
+def sync_autnum(members, password, force=False):
+ print('Syncing aut-num...')
+ want = IXPAutNum.make_for_members(members)
+ got = IXPAutNum.from_ripe('AS208521')
+ sync(want, got, password, force)
+
+
+
+def sync_asset(members, password, force=False):
+ print('Syncing as-set...')
+ want = ASSet.make_for_members(members)
+ got = ASSet.from_ripe('AS-CCCAMP19-IX')
+ sync(want, got, password, force)
+
+
+
+if __name__ == '__main__':
+ if len(sys.argv) != 3:
+ print("Usage: {} password AS1,AS2,AS3,...".format(sys.argv[0]))
+ sys.exit(1)
+
+ password = sys.argv[1]
+ members = [m.strip().upper() for m in sys.argv[2].split(',')]
+
+ for member in members:
+ if not member.startswith('AS'):
+ raise Exception('{} is not a valid ASN'.format(member))
+
+ if not all(c in string.digits for c in member[2:]):
+ raise Exception('{} is not a valid ASN'.format(member))
+
+ sync_autnum(members, password)
+ sync_asset(members, password)
diff --git a/go/svc/invoice/BUILD.bazel b/bgpwtf/invoice/BUILD.bazel
similarity index 88%
rename from go/svc/invoice/BUILD.bazel
rename to bgpwtf/invoice/BUILD.bazel
index 05fcd23..b2e2ee8 100644
--- a/go/svc/invoice/BUILD.bazel
+++ b/bgpwtf/invoice/BUILD.bazel
@@ -9,12 +9,12 @@
"render.go",
"statusz.go",
],
- importpath = "code.hackerspace.pl/hscloud/go/svc/invoice",
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/invoice",
visibility = ["//visibility:private"],
deps = [
"//go/mirko:go_default_library",
"//go/statusz:go_default_library",
- "//go/svc/invoice/templates:go_default_library",
+ "//bgpwtf/invoice/templates:go_default_library",
"//proto/invoice:go_default_library",
"@com_github_golang_glog//:go_default_library",
"@com_github_golang_protobuf//proto:go_default_library",
diff --git a/go/svc/invoice/calc.go b/bgpwtf/invoice/calc.go
similarity index 100%
rename from go/svc/invoice/calc.go
rename to bgpwtf/invoice/calc.go
diff --git a/go/svc/invoice/main.go b/bgpwtf/invoice/main.go
similarity index 100%
rename from go/svc/invoice/main.go
rename to bgpwtf/invoice/main.go
diff --git a/go/svc/invoice/model.go b/bgpwtf/invoice/model.go
similarity index 100%
rename from go/svc/invoice/model.go
rename to bgpwtf/invoice/model.go
diff --git a/go/svc/invoice/proto/BUILD.bazel b/bgpwtf/invoice/proto/BUILD.bazel
similarity index 73%
rename from go/svc/invoice/proto/BUILD.bazel
rename to bgpwtf/invoice/proto/BUILD.bazel
index 6c78fa3..511bf26 100644
--- a/go/svc/invoice/proto/BUILD.bazel
+++ b/bgpwtf/invoice/proto/BUILD.bazel
@@ -3,6 +3,6 @@
go_library(
name = "go_default_library",
srcs = ["generate.go"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/invoice/proto",
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/invoice/proto",
visibility = ["//visibility:public"],
)
diff --git a/go/svc/invoice/proto/generate.go b/bgpwtf/invoice/proto/generate.go
similarity index 100%
rename from go/svc/invoice/proto/generate.go
rename to bgpwtf/invoice/proto/generate.go
diff --git a/go/svc/invoice/render.go b/bgpwtf/invoice/render.go
similarity index 98%
rename from go/svc/invoice/render.go
rename to bgpwtf/invoice/render.go
index 03dcd77..2353014 100644
--- a/go/svc/invoice/render.go
+++ b/bgpwtf/invoice/render.go
@@ -8,7 +8,7 @@
wkhtml "github.com/sebastiaanklippert/go-wkhtmltopdf"
- "code.hackerspace.pl/hscloud/go/svc/invoice/templates"
+ "code.hackerspace.pl/hscloud/bgpwtf/invoice/templates"
pb "code.hackerspace.pl/hscloud/proto/invoice"
)
diff --git a/go/svc/invoice/statusz.go b/bgpwtf/invoice/statusz.go
similarity index 100%
rename from go/svc/invoice/statusz.go
rename to bgpwtf/invoice/statusz.go
diff --git a/go/svc/invoice/templates/BUILD.bazel b/bgpwtf/invoice/templates/BUILD.bazel
similarity index 74%
rename from go/svc/invoice/templates/BUILD.bazel
rename to bgpwtf/invoice/templates/BUILD.bazel
index 7874687..4756da4 100644
--- a/go/svc/invoice/templates/BUILD.bazel
+++ b/bgpwtf/invoice/templates/BUILD.bazel
@@ -13,6 +13,6 @@
srcs = [
":templates_bindata", # keep
],
- importpath = "code.hackerspace.pl/hscloud/go/svc/invoice/templates", # keep
- visibility = ["//go/svc/invoice:__subpackages__"],
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/invoice/templates", # keep
+ visibility = ["//bgpwtf/invoice:__subpackages__"],
)
diff --git a/go/svc/invoice/templates/invoice_en.html b/bgpwtf/invoice/templates/invoice_en.html
similarity index 100%
rename from go/svc/invoice/templates/invoice_en.html
rename to bgpwtf/invoice/templates/invoice_en.html
diff --git a/go/svc/invoice/templates/invoice_pl.html b/bgpwtf/invoice/templates/invoice_pl.html
similarity index 100%
rename from go/svc/invoice/templates/invoice_pl.html
rename to bgpwtf/invoice/templates/invoice_pl.html
diff --git a/go/svc/speedtest/.gitignore b/bgpwtf/speedtest/.gitignore
similarity index 100%
rename from go/svc/speedtest/.gitignore
rename to bgpwtf/speedtest/.gitignore
diff --git a/go/svc/speedtest/BUILD b/bgpwtf/speedtest/BUILD.bazel
similarity index 79%
rename from go/svc/speedtest/BUILD
rename to bgpwtf/speedtest/BUILD.bazel
index 3425af9..cc431d0 100644
--- a/go/svc/speedtest/BUILD
+++ b/bgpwtf/speedtest/BUILD.bazel
@@ -12,14 +12,14 @@
go_library(
name = "static_go",
srcs = [":static"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/speedtest/static",
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/speedtest/static",
visibility = ["//visibility:public"],
)
container_image(
name="latest",
base="@prodimage-bionic//image",
- files = ["//go/svc/speedtest/backend:backend"],
+ files = ["//bgpwtf/speedtest/backend:backend"],
directory = "/hscloud",
entrypoint = ["/hscloud/backend"],
)
@@ -30,9 +30,9 @@
outs = ["version.sh"],
executable = True,
cmd = """
- local=bazel/go/svc/speedtest:latest
+ local=bazel/bgpwtf/speedtest:latest
tag=$$(date +%s)
- remote=registry.k0.hswaw.net/go/svc/speedtest:$$tag
+ remote=registry.k0.hswaw.net/bgpwtf/speedtest:$$tag
docker tag $$local $$remote
docker push $$remote
diff --git a/go/svc/speedtest/LICENSE b/bgpwtf/speedtest/LICENSE
similarity index 100%
rename from go/svc/speedtest/LICENSE
rename to bgpwtf/speedtest/LICENSE
diff --git a/go/svc/speedtest/README.md b/bgpwtf/speedtest/README.md
similarity index 100%
rename from go/svc/speedtest/README.md
rename to bgpwtf/speedtest/README.md
diff --git a/go/svc/speedtest/backend/BUILD.bazel b/bgpwtf/speedtest/backend/BUILD.bazel
similarity index 81%
rename from go/svc/speedtest/backend/BUILD.bazel
rename to bgpwtf/speedtest/backend/BUILD.bazel
index 28ecc88..54ea2f6 100644
--- a/go/svc/speedtest/backend/BUILD.bazel
+++ b/bgpwtf/speedtest/backend/BUILD.bazel
@@ -3,11 +3,11 @@
go_library(
name = "go_default_library",
srcs = ["main.go"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/speedtest/backend",
+ importpath = "code.hackerspace.pl/hscloud/bgpwtf/speedtest/backend",
visibility = ["//visibility:private"],
deps = [
"@com_github_golang_glog//:go_default_library",
- "//go/svc/speedtest:static_go", # keep
+ "//bgpwtf/speedtest:static_go", # keep
],
)
diff --git a/go/svc/speedtest/backend/main.go b/bgpwtf/speedtest/backend/main.go
similarity index 94%
rename from go/svc/speedtest/backend/main.go
rename to bgpwtf/speedtest/backend/main.go
index 80c1c8c..7d4aece 100644
--- a/go/svc/speedtest/backend/main.go
+++ b/bgpwtf/speedtest/backend/main.go
@@ -27,7 +27,7 @@
"github.com/golang/glog"
- "code.hackerspace.pl/hscloud/go/svc/speedtest/static"
+ "code.hackerspace.pl/hscloud/bgpwtf/speedtest/static"
)
var (
@@ -131,13 +131,13 @@
json.NewEncoder(w).Encode(res)
})
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- w.Write(static.Data["go/svc/speedtest/index.html"])
+ w.Write(static.Data["bgpwtf/speedtest/index.html"])
})
http.HandleFunc("/speedtest.js", func(w http.ResponseWriter, r *http.Request) {
- w.Write(static.Data["go/svc/speedtest/speedtest.js"])
+ w.Write(static.Data["bgpwtf/speedtest/speedtest.js"])
})
http.HandleFunc("/speedtest_worker.js", func(w http.ResponseWriter, r *http.Request) {
- w.Write(static.Data["go/svc/speedtest/speedtest_worker.js"])
+ w.Write(static.Data["bgpwtf/speedtest/speedtest_worker.js"])
})
glog.Infof("Starting up at %v", flagBind)
diff --git a/go/svc/speedtest/backend/main_test.go b/bgpwtf/speedtest/backend/main_test.go
similarity index 100%
rename from go/svc/speedtest/backend/main_test.go
rename to bgpwtf/speedtest/backend/main_test.go
diff --git a/go/svc/speedtest/index.html b/bgpwtf/speedtest/index.html
similarity index 100%
rename from go/svc/speedtest/index.html
rename to bgpwtf/speedtest/index.html
diff --git a/go/svc/speedtest/kube/prod.jsonnet b/bgpwtf/speedtest/kube/prod.jsonnet
similarity index 97%
rename from go/svc/speedtest/kube/prod.jsonnet
rename to bgpwtf/speedtest/kube/prod.jsonnet
index e53fd45..fc6e083 100644
--- a/go/svc/speedtest/kube/prod.jsonnet
+++ b/bgpwtf/speedtest/kube/prod.jsonnet
@@ -9,7 +9,7 @@
domain: "speedtest.hackerspace.pl",
tag: "1563032542",
- image: "registry.k0.hswaw.net/go/svc/speedtest:" + cfg.tag,
+ image: "registry.k0.hswaw.net/bgpwtf/speedtest:" + cfg.tag,
resources: {
requests: {
diff --git a/go/svc/speedtest/speedtest.js b/bgpwtf/speedtest/speedtest.js
similarity index 100%
rename from go/svc/speedtest/speedtest.js
rename to bgpwtf/speedtest/speedtest.js
diff --git a/go/svc/speedtest/speedtest_worker.js b/bgpwtf/speedtest/speedtest_worker.js
similarity index 100%
rename from go/svc/speedtest/speedtest_worker.js
rename to bgpwtf/speedtest/speedtest_worker.js
diff --git a/dc/README.md b/dc/README.md
new file mode 100644
index 0000000..6ee4c21
--- /dev/null
+++ b/dc/README.md
@@ -0,0 +1,4 @@
+hscloud/dc
+==========
+
+Software and systems related to DC operations and provisioning.
diff --git a/go/svc/arista-proxy/BUILD.bazel b/dc/arista-proxy/BUILD.bazel
similarity index 83%
rename from go/svc/arista-proxy/BUILD.bazel
rename to dc/arista-proxy/BUILD.bazel
index 5699607..fb7ec6a 100644
--- a/go/svc/arista-proxy/BUILD.bazel
+++ b/dc/arista-proxy/BUILD.bazel
@@ -6,11 +6,11 @@
"main.go",
"service.go",
],
- importpath = "code.hackerspace.pl/hscloud/go/svc/arista-proxy",
+ importpath = "code.hackerspace.pl/hscloud/dc/arista-proxy",
visibility = ["//visibility:private"],
deps = [
+ "//dc/arista-proxy/proto:go_default_library",
"//go/mirko:go_default_library",
- "//go/svc/arista-proxy/proto:go_default_library",
"@com_github_golang_glog//:go_default_library",
"@com_github_ybbus_jsonrpc//:go_default_library",
"@org_golang_google_grpc//codes:go_default_library",
diff --git a/go/svc/arista-proxy/README.md b/dc/arista-proxy/README.md
similarity index 100%
rename from go/svc/arista-proxy/README.md
rename to dc/arista-proxy/README.md
diff --git a/go/svc/arista-proxy/main.go b/dc/arista-proxy/main.go
similarity index 94%
rename from go/svc/arista-proxy/main.go
rename to dc/arista-proxy/main.go
index 1227cb1..ccd1046 100644
--- a/go/svc/arista-proxy/main.go
+++ b/dc/arista-proxy/main.go
@@ -8,7 +8,7 @@
"github.com/golang/glog"
"github.com/ybbus/jsonrpc"
- pb "code.hackerspace.pl/hscloud/go/svc/arista-proxy/proto"
+ pb "code.hackerspace.pl/hscloud/dc/arista-proxy/proto"
)
var (
diff --git a/go/svc/arista-proxy/proto/.gitignore b/dc/arista-proxy/proto/.gitignore
similarity index 100%
rename from go/svc/arista-proxy/proto/.gitignore
rename to dc/arista-proxy/proto/.gitignore
diff --git a/go/svc/arista-proxy/proto/BUILD.bazel b/dc/arista-proxy/proto/BUILD.bazel
similarity index 78%
rename from go/svc/arista-proxy/proto/BUILD.bazel
rename to dc/arista-proxy/proto/BUILD.bazel
index af116e3..2df4f58 100644
--- a/go/svc/arista-proxy/proto/BUILD.bazel
+++ b/dc/arista-proxy/proto/BUILD.bazel
@@ -10,7 +10,7 @@
go_proto_library(
name = "proto_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/arista-proxy/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/arista-proxy/proto",
proto = ":proto_proto",
visibility = ["//visibility:public"],
)
@@ -18,6 +18,6 @@
go_library(
name = "go_default_library",
embed = [":proto_go_proto"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/arista-proxy/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/arista-proxy/proto",
visibility = ["//visibility:public"],
)
diff --git a/go/svc/arista-proxy/proto/arista.proto b/dc/arista-proxy/proto/arista.proto
similarity index 90%
rename from go/svc/arista-proxy/proto/arista.proto
rename to dc/arista-proxy/proto/arista.proto
index d306b43..2874f70 100644
--- a/go/svc/arista-proxy/proto/arista.proto
+++ b/dc/arista-proxy/proto/arista.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
package proto;
-option go_package = "code.hackerspace.pl/hscloud/go/svc/arista-proxy/proto";
+option go_package = "code.hackerspace.pl/hscloud/dc/arista-proxy/proto";
message ShowVersionRequest {
};
diff --git a/go/svc/arista-proxy/service.go b/dc/arista-proxy/service.go
similarity index 97%
rename from go/svc/arista-proxy/service.go
rename to dc/arista-proxy/service.go
index d7e2a29..3144ff7 100644
--- a/go/svc/arista-proxy/service.go
+++ b/dc/arista-proxy/service.go
@@ -7,7 +7,7 @@
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
- pb "code.hackerspace.pl/hscloud/go/svc/arista-proxy/proto"
+ pb "code.hackerspace.pl/hscloud/dc/arista-proxy/proto"
)
func (s *server) ShowVersion(ctx context.Context, req *pb.ShowVersionRequest) (*pb.ShowVersionResponse, error) {
diff --git a/go/svc/cmc-proxy/BUILD.bazel b/dc/cmc-proxy/BUILD.bazel
similarity index 83%
rename from go/svc/cmc-proxy/BUILD.bazel
rename to dc/cmc-proxy/BUILD.bazel
index 56f3495..b2f68ca 100644
--- a/go/svc/cmc-proxy/BUILD.bazel
+++ b/dc/cmc-proxy/BUILD.bazel
@@ -6,11 +6,11 @@
"client.go",
"main.go",
],
- importpath = "code.hackerspace.pl/hscloud/go/svc/cmc-proxy",
+ importpath = "code.hackerspace.pl/hscloud/dc/cmc-proxy",
visibility = ["//visibility:private"],
deps = [
+ "//dc/cmc-proxy/proto:go_default_library",
"//go/mirko:go_default_library",
- "//go/svc/cmc-proxy/proto:go_default_library",
"@com_github_cenkalti_backoff//:go_default_library",
"@com_github_golang_glog//:go_default_library",
"@org_golang_google_grpc//codes:go_default_library",
diff --git a/go/svc/cmc-proxy/README.md b/dc/cmc-proxy/README.md
similarity index 100%
rename from go/svc/cmc-proxy/README.md
rename to dc/cmc-proxy/README.md
diff --git a/go/svc/cmc-proxy/client.go b/dc/cmc-proxy/client.go
similarity index 100%
rename from go/svc/cmc-proxy/client.go
rename to dc/cmc-proxy/client.go
diff --git a/go/svc/cmc-proxy/main.go b/dc/cmc-proxy/main.go
similarity index 96%
rename from go/svc/cmc-proxy/main.go
rename to dc/cmc-proxy/main.go
index 5ae09d0..dc0cfb4 100644
--- a/go/svc/cmc-proxy/main.go
+++ b/dc/cmc-proxy/main.go
@@ -9,7 +9,7 @@
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
- pb "code.hackerspace.pl/hscloud/go/svc/cmc-proxy/proto"
+ pb "code.hackerspace.pl/hscloud/dc/cmc-proxy/proto"
)
var (
diff --git a/go/svc/cmc-proxy/proto/.gitignore b/dc/cmc-proxy/proto/.gitignore
similarity index 100%
rename from go/svc/cmc-proxy/proto/.gitignore
rename to dc/cmc-proxy/proto/.gitignore
diff --git a/go/svc/m6220-proxy/proto/BUILD.bazel b/dc/cmc-proxy/proto/BUILD.bazel
similarity index 78%
rename from go/svc/m6220-proxy/proto/BUILD.bazel
rename to dc/cmc-proxy/proto/BUILD.bazel
index 8cbed6b..14b0569 100644
--- a/go/svc/m6220-proxy/proto/BUILD.bazel
+++ b/dc/cmc-proxy/proto/BUILD.bazel
@@ -10,7 +10,7 @@
go_proto_library(
name = "proto_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/m6220-proxy/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/cmc-proxy/proto",
proto = ":proto_proto",
visibility = ["//visibility:public"],
)
@@ -18,6 +18,6 @@
go_library(
name = "go_default_library",
embed = [":proto_go_proto"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/m6220-proxy/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/cmc-proxy/proto",
visibility = ["//visibility:public"],
)
diff --git a/go/svc/cmc-proxy/proto/proxy.proto b/dc/cmc-proxy/proto/proxy.proto
similarity index 76%
rename from go/svc/cmc-proxy/proto/proxy.proto
rename to dc/cmc-proxy/proto/proxy.proto
index a231693..5afe6b9 100644
--- a/go/svc/cmc-proxy/proto/proxy.proto
+++ b/dc/cmc-proxy/proto/proxy.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
package proto;
-option go_package = "code.hackerspace.pl/hscloud/go/svc/cmc-proxy/proto";
+option go_package = "code.hackerspace.pl/hscloud/dc/cmc-proxy/proto";
message GetKVMDataRequest {
int64 blade_num = 1;
diff --git a/go/svc/m6220-proxy/BUILD.bazel b/dc/m6220-proxy/BUILD.bazel
similarity index 85%
rename from go/svc/m6220-proxy/BUILD.bazel
rename to dc/m6220-proxy/BUILD.bazel
index 90bfb1e..50fa692 100644
--- a/go/svc/m6220-proxy/BUILD.bazel
+++ b/dc/m6220-proxy/BUILD.bazel
@@ -6,11 +6,11 @@
"cli.go",
"main.go",
],
- importpath = "code.hackerspace.pl/hscloud/go/svc/m6220-proxy",
+ importpath = "code.hackerspace.pl/hscloud/dc/m6220-proxy",
visibility = ["//visibility:private"],
deps = [
+ "//dc/m6220-proxy/proto:go_default_library",
"//go/mirko:go_default_library",
- "//go/svc/m6220-proxy/proto:go_default_library",
"//proto/infra:go_default_library",
"@com_github_golang_glog//:go_default_library",
"@com_github_ziutek_telnet//:go_default_library",
diff --git a/go/svc/m6220-proxy/cli.go b/dc/m6220-proxy/cli.go
similarity index 100%
rename from go/svc/m6220-proxy/cli.go
rename to dc/m6220-proxy/cli.go
diff --git a/go/svc/m6220-proxy/main.go b/dc/m6220-proxy/main.go
similarity index 98%
rename from go/svc/m6220-proxy/main.go
rename to dc/m6220-proxy/main.go
index a2ca4db..6fd972d 100644
--- a/go/svc/m6220-proxy/main.go
+++ b/dc/m6220-proxy/main.go
@@ -14,7 +14,7 @@
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
- pb "code.hackerspace.pl/hscloud/go/svc/m6220-proxy/proto"
+ pb "code.hackerspace.pl/hscloud/dc/m6220-proxy/proto"
ipb "code.hackerspace.pl/hscloud/proto/infra"
)
diff --git a/go/svc/m6220-proxy/proto/.gitignore b/dc/m6220-proxy/proto/.gitignore
similarity index 100%
rename from go/svc/m6220-proxy/proto/.gitignore
rename to dc/m6220-proxy/proto/.gitignore
diff --git a/go/svc/m6220-proxy/proto/BUILD.bazel b/dc/m6220-proxy/proto/BUILD.bazel
similarity index 78%
copy from go/svc/m6220-proxy/proto/BUILD.bazel
copy to dc/m6220-proxy/proto/BUILD.bazel
index 8cbed6b..4e0ae7e 100644
--- a/go/svc/m6220-proxy/proto/BUILD.bazel
+++ b/dc/m6220-proxy/proto/BUILD.bazel
@@ -10,7 +10,7 @@
go_proto_library(
name = "proto_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/m6220-proxy/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/m6220-proxy/proto",
proto = ":proto_proto",
visibility = ["//visibility:public"],
)
@@ -18,6 +18,6 @@
go_library(
name = "go_default_library",
embed = [":proto_go_proto"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/m6220-proxy/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/m6220-proxy/proto",
visibility = ["//visibility:public"],
)
diff --git a/go/svc/m6220-proxy/proto/proxy.proto b/dc/m6220-proxy/proto/proxy.proto
similarity index 78%
rename from go/svc/m6220-proxy/proto/proxy.proto
rename to dc/m6220-proxy/proto/proxy.proto
index bc840ad..b8444c3 100644
--- a/go/svc/m6220-proxy/proto/proxy.proto
+++ b/dc/m6220-proxy/proto/proxy.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
package proto;
-option go_package = "code.hackerspace.pl/hscloud/go/svc/m6220-proxy/proto";
+option go_package = "code.hackerspace.pl/hscloud/dc/m6220-proxy/proto";
message RunCommandRequest {
string command = 1;
diff --git a/go/svc/topo/.gitignore b/dc/topo/.gitignore
similarity index 100%
rename from go/svc/topo/.gitignore
rename to dc/topo/.gitignore
diff --git a/go/svc/topo/BUILD.bazel b/dc/topo/BUILD.bazel
similarity index 75%
rename from go/svc/topo/BUILD.bazel
rename to dc/topo/BUILD.bazel
index 93c92a5..c10300c 100644
--- a/go/svc/topo/BUILD.bazel
+++ b/dc/topo/BUILD.bazel
@@ -6,15 +6,15 @@
"main.go",
"service.go",
],
- importpath = "code.hackerspace.pl/hscloud/go/svc/topo",
+ importpath = "code.hackerspace.pl/hscloud/dc/topo",
visibility = ["//visibility:private"],
deps = [
+ "//dc/topo/assets:go_default_library",
+ "//dc/topo/graph:go_default_library",
+ "//dc/topo/proto:go_default_library",
+ "//dc/topo/state:go_default_library",
"//go/mirko:go_default_library",
"//go/statusz:go_default_library",
- "//go/svc/topo/assets:go_default_library",
- "//go/svc/topo/graph:go_default_library",
- "//go/svc/topo/proto:go_default_library",
- "//go/svc/topo/state:go_default_library",
"//proto/infra:go_default_library",
"@com_github_digitalocean_go_netbox//netbox:go_default_library",
"@com_github_digitalocean_go_netbox//netbox/client:go_default_library",
diff --git a/go/svc/topo/assets/BUILD b/dc/topo/assets/BUILD.bazel
similarity index 73%
rename from go/svc/topo/assets/BUILD
rename to dc/topo/assets/BUILD.bazel
index f8d186b..401487b 100644
--- a/go/svc/topo/assets/BUILD
+++ b/dc/topo/assets/BUILD.bazel
@@ -12,6 +12,6 @@
go_library(
name = "go_default_library",
srcs = [":assets"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/topo/assets",
- visibility = ["//go/svc/topo:__pkg__"],
+ importpath = "code.hackerspace.pl/hscloud/dc/topo/assets",
+ visibility = ["//dc/topo:__pkg__"],
)
diff --git a/go/svc/topo/assets/full.render.js b/dc/topo/assets/full.render.js
similarity index 100%
rename from go/svc/topo/assets/full.render.js
rename to dc/topo/assets/full.render.js
diff --git a/go/svc/topo/assets/viz.js b/dc/topo/assets/viz.js
similarity index 100%
rename from go/svc/topo/assets/viz.js
rename to dc/topo/assets/viz.js
diff --git a/go/svc/topo/graph/BUILD.bazel b/dc/topo/graph/BUILD.bazel
similarity index 80%
rename from go/svc/topo/graph/BUILD.bazel
rename to dc/topo/graph/BUILD.bazel
index 205b401..26a5fc2 100644
--- a/go/svc/topo/graph/BUILD.bazel
+++ b/dc/topo/graph/BUILD.bazel
@@ -3,10 +3,10 @@
go_library(
name = "go_default_library",
srcs = ["graph.go"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/topo/graph",
+ importpath = "code.hackerspace.pl/hscloud/dc/topo/graph",
visibility = ["//visibility:public"],
deps = [
- "//go/svc/topo/proto:go_default_library",
+ "//dc/topo/proto:go_default_library",
"@com_github_digitalocean_go_netbox//netbox/client:go_default_library",
"@com_github_digitalocean_go_netbox//netbox/client/dcim:go_default_library",
"@com_github_digitalocean_go_netbox//netbox/models:go_default_library",
diff --git a/go/svc/topo/graph/graph.go b/dc/topo/graph/graph.go
similarity index 98%
rename from go/svc/topo/graph/graph.go
rename to dc/topo/graph/graph.go
index 72e69b2..4d31f39 100644
--- a/go/svc/topo/graph/graph.go
+++ b/dc/topo/graph/graph.go
@@ -10,7 +10,7 @@
"github.com/digitalocean/go-netbox/netbox/models"
"github.com/golang/glog"
- pb "code.hackerspace.pl/hscloud/go/svc/topo/proto"
+ pb "code.hackerspace.pl/hscloud/dc/topo/proto"
)
type MachinePort struct {
diff --git a/go/svc/topo/main.go b/dc/topo/main.go
similarity index 91%
rename from go/svc/topo/main.go
rename to dc/topo/main.go
index 4efe878..fd1fb8f 100644
--- a/go/svc/topo/main.go
+++ b/dc/topo/main.go
@@ -13,9 +13,9 @@
"github.com/golang/glog"
"github.com/golang/protobuf/proto"
- "code.hackerspace.pl/hscloud/go/svc/topo/graph"
- pb "code.hackerspace.pl/hscloud/go/svc/topo/proto"
- "code.hackerspace.pl/hscloud/go/svc/topo/state"
+ "code.hackerspace.pl/hscloud/dc/topo/graph"
+ pb "code.hackerspace.pl/hscloud/dc/topo/proto"
+ "code.hackerspace.pl/hscloud/dc/topo/state"
)
var (
diff --git a/go/svc/topo/proto/.gitignore b/dc/topo/proto/.gitignore
similarity index 100%
rename from go/svc/topo/proto/.gitignore
rename to dc/topo/proto/.gitignore
diff --git a/go/svc/topo/proto/BUILD.bazel b/dc/topo/proto/BUILD.bazel
similarity index 77%
rename from go/svc/topo/proto/BUILD.bazel
rename to dc/topo/proto/BUILD.bazel
index b56fa57..3caae5b 100644
--- a/go/svc/topo/proto/BUILD.bazel
+++ b/dc/topo/proto/BUILD.bazel
@@ -9,7 +9,7 @@
go_proto_library(
name = "proto_go_proto",
- importpath = "code.hackerspace.pl/hscloud/go/svc/topo/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/topo/proto",
proto = ":proto_proto",
visibility = ["//visibility:public"],
)
@@ -17,6 +17,6 @@
go_library(
name = "go_default_library",
embed = [":proto_go_proto"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/topo/proto",
+ importpath = "code.hackerspace.pl/hscloud/dc/topo/proto",
visibility = ["//visibility:public"],
)
diff --git a/go/svc/topo/proto/topo.proto b/dc/topo/proto/topo.proto
similarity index 90%
rename from go/svc/topo/proto/topo.proto
rename to dc/topo/proto/topo.proto
index 3f6e404..0127bf8 100644
--- a/go/svc/topo/proto/topo.proto
+++ b/dc/topo/proto/topo.proto
@@ -1,7 +1,7 @@
syntax = "proto3";
package topo;
-option go_package = "code.hackerspace.pl/hscloud/go/svc/topo/proto";
+option go_package = "code.hackerspace.pl/hscloud/dc/topo/proto";
message Config {
repeated Switch switch = 1;
diff --git a/go/svc/topo/service.go b/dc/topo/service.go
similarity index 97%
rename from go/svc/topo/service.go
rename to dc/topo/service.go
index fbbee92..8919939 100644
--- a/go/svc/topo/service.go
+++ b/dc/topo/service.go
@@ -13,9 +13,9 @@
"code.hackerspace.pl/hscloud/go/statusz"
ipb "code.hackerspace.pl/hscloud/proto/infra"
- "code.hackerspace.pl/hscloud/go/svc/topo/assets"
- "code.hackerspace.pl/hscloud/go/svc/topo/graph"
- "code.hackerspace.pl/hscloud/go/svc/topo/state"
+ "code.hackerspace.pl/hscloud/dc/topo/assets"
+ "code.hackerspace.pl/hscloud/dc/topo/graph"
+ "code.hackerspace.pl/hscloud/dc/topo/state"
)
type Service struct {
diff --git a/go/svc/topo/state/BUILD.bazel b/dc/topo/state/BUILD.bazel
similarity index 73%
rename from go/svc/topo/state/BUILD.bazel
rename to dc/topo/state/BUILD.bazel
index 680e087..892e302 100644
--- a/go/svc/topo/state/BUILD.bazel
+++ b/dc/topo/state/BUILD.bazel
@@ -3,11 +3,11 @@
go_library(
name = "go_default_library",
srcs = ["state.go"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/topo/state",
+ importpath = "code.hackerspace.pl/hscloud/dc/topo/state",
visibility = ["//visibility:public"],
deps = [
+ "//dc/topo/proto:go_default_library",
"//go/pki:go_default_library",
- "//go/svc/topo/proto:go_default_library",
"//proto/infra:go_default_library",
"@org_golang_google_grpc//:go_default_library",
],
diff --git a/go/svc/topo/state/state.go b/dc/topo/state/state.go
similarity index 96%
rename from go/svc/topo/state/state.go
rename to dc/topo/state/state.go
index 08403e7..116a55a 100644
--- a/go/svc/topo/state/state.go
+++ b/dc/topo/state/state.go
@@ -10,7 +10,7 @@
"code.hackerspace.pl/hscloud/go/pki"
ipb "code.hackerspace.pl/hscloud/proto/infra"
- pb "code.hackerspace.pl/hscloud/go/svc/topo/proto"
+ pb "code.hackerspace.pl/hscloud/dc/topo/proto"
)
type SwitchportState struct {
diff --git a/go/svc/cmc-proxy/proto/BUILD.bazel b/go/svc/cmc-proxy/proto/BUILD.bazel
deleted file mode 100644
index 605570c..0000000
--- a/go/svc/cmc-proxy/proto/BUILD.bazel
+++ /dev/null
@@ -1,23 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
-load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
-
-proto_library(
- name = "proto_proto",
- srcs = ["proxy.proto"],
- visibility = ["//visibility:public"],
-)
-
-go_proto_library(
- name = "proto_go_proto",
- compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/cmc-proxy/proto",
- proto = ":proto_proto",
- visibility = ["//visibility:public"],
-)
-
-go_library(
- name = "go_default_library",
- embed = [":proto_go_proto"],
- importpath = "code.hackerspace.pl/hscloud/go/svc/cmc-proxy/proto",
- visibility = ["//visibility:public"],
-)
diff --git a/personal/q3k/BUILD b/personal/q3k/BUILD
new file mode 100644
index 0000000..44988b4
--- /dev/null
+++ b/personal/q3k/BUILD
@@ -0,0 +1,7 @@
+py_binary(
+ name = "django-admin",
+ srcs = ["django-admin.py"],
+ deps = [
+ "@pip36//django",
+ ]
+)
diff --git a/personal/q3k/django-admin.py b/personal/q3k/django-admin.py
new file mode 100644
index 0000000..8648efa
--- /dev/null
+++ b/personal/q3k/django-admin.py
@@ -0,0 +1,5 @@
+#!python
+from django.core import management
+
+if __name__ == "__main__":
+ management.execute_from_command_line()
diff --git a/pip/requirements-linux.txt b/pip/requirements-linux.txt
index ce36ac3..304c0c4 100644
--- a/pip/requirements-linux.txt
+++ b/pip/requirements-linux.txt
@@ -1,3 +1,4 @@
+# This file is generated code. DO NOT EDIT.
asn1crypto==0.24.0 \
--hash=sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87 \
--hash=sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49
@@ -21,6 +22,9 @@
--hash=sha256:efcaace6e2915434d84e865c44f0cfe34e802269378afbb39a4aa6381aaec78b \
--hash=sha256:f4431e01f1a5fdea95c78758e24c9565651499d92024ff34663b1ab12c8a10e5 \
--hash=sha256:fd21155abee7cd4c0ba8fad5138636f2531174ea79ad1751b25dc30d833e1723
+certifi==2019.6.16 \
+ --hash=sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939 \
+ --hash=sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695
cffi==1.11.5 \
--hash=sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743 \
--hash=sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef \
@@ -54,6 +58,9 @@
--hash=sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917 \
--hash=sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f \
--hash=sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb
+chardet==3.0.4 \
+ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \
+ --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691
cryptography==2.4.2 \
--hash=sha256:05a6052c6a9f17ff78ba78f8e6eb1d777d25db3b763343a1ae89a7a8670386dd \
--hash=sha256:0eb83a24c650a36f68e31a6d0a70f7ad9c358fa2506dc7b683398b92e354a038 \
@@ -74,6 +81,9 @@
--hash=sha256:af12dfc9874ac27ebe57fc28c8df0e8afa11f2a1025566476b0d50cdb8884f70 \
--hash=sha256:b4fc04326b2d259ddd59ed8ea20405d2e695486ab4c5e1e49b025c484845206e \
--hash=sha256:da5b5dda4aa0d5e2b758cc8dfc67f8d4212e88ea9caad5f61ba132f948bab859
+django==2.2.3 \
+ --hash=sha256:4d23f61b26892bac785f07401bc38cbf8fa4cec993f400e9cd9ddf28fd51c0ea \
+ --hash=sha256:6e974d4b57e3b29e4882b244d40171d6a75202ab8d2402b8e8adbd182e25cf0c
fabric==2.4.0 \
--hash=sha256:93684ceaac92e0b78faae551297e29c48370cede12ff0f853cdebf67d4b87068 \
--hash=sha256:98538f2f3f63cf52497a8d0b24d18424ae83fe67ac7611225c72afb9e67f2cf6
@@ -114,6 +124,20 @@
--hash=sha256:bd4ecb473a96ad0f90c20acba4f0bf0df91a4e03a1f4dd6a4bdc9ca75aa3a715 \
--hash=sha256:e2da3c13307eac601f3de04887624939aca8ee3c9488a0bb0eca4fb9401fc6b1 \
--hash=sha256:f67814c38162f4deb31f68d590771a29d5ae3b1bd64b75cf232308e5c74777e0
+pytz==2019.1 \
+ --hash=sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda \
+ --hash=sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141
+requests==2.22.0 \
+ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \
+ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31
six==1.12.0 \
--hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \
--hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73
+sqlparse==0.3.0 \
+ --hash=sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177 \
+ --hash=sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873
+urllib3==1.25.3 \
+ --hash=sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1 \
+ --hash=sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232
+uwsgi==2.0.18 \
+ --hash=sha256:4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583
diff --git a/pip/requirements.in b/pip/requirements.in
index d99d87f..653f04d 100644
--- a/pip/requirements.in
+++ b/pip/requirements.in
@@ -1,7 +1,10 @@
asn1crypto==0.24.0
bcrypt==3.1.5
+certifi==2019.6.16
cffi==1.11.5
+chardet==3.0.4
cryptography==2.4.2
+Django==2.2.3
fabric==2.4.0
future==0.17.1
idna==2.8
@@ -10,4 +13,10 @@
pyasn1==0.4.5
pycparser==2.19
PyNaCl==1.3.0
+pytz==2019.1
+requests==2.22.0
six==1.12.0
+six==1.12.0
+sqlparse==0.3.0
+urllib3==1.25.3
+uWSGI==2.0.18