You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by oc...@apache.org on 2021/01/08 21:45:09 UTC

[trafficcontrol] branch master updated: Add a required capability to CDN in a Box's demo1 Delivery Service (#5387)

This is an automated email from the ASF dual-hosted git repository.

ocket8888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 7bdbca9  Add a required capability to CDN in a Box's demo1 Delivery Service (#5387)
7bdbca9 is described below

commit 7bdbca9d4247e78ac6564508473e6ccca9294ff4
Author: Zach Hoffman <zr...@apache.org>
AuthorDate: Fri Jan 8 14:44:59 2021 -0700

    Add a required capability to CDN in a Box's demo1 Delivery Service (#5387)
    
    * Add the HDD Server Capability
    
    * Assign the HDD Server Capability to edge, mid-01, and mid-02
    
    * Require the HDD Server Capability on the demo1 Delivery Service
    
    * go fmt
---
 infrastructure/cdn-in-a-box/enroller/enroller.go   | 135 ++++++++++++++++++---
 .../cdn-in-a-box/traffic_ops/trafficops-init.sh    |   2 +-
 .../010-HDD-demo1.json                             |   4 +
 .../server_capabilities/010-HDD.json               |   3 +
 .../server_server_capabilities/010-HDD-edge.json   |   4 +
 .../server_server_capabilities/010-HDD-mid-01.json |   4 +
 .../server_server_capabilities/010-HDD-mid-02.json |   4 +
 7 files changed, 138 insertions(+), 18 deletions(-)

diff --git a/infrastructure/cdn-in-a-box/enroller/enroller.go b/infrastructure/cdn-in-a-box/enroller/enroller.go
index 3d95973..c8761ac 100644
--- a/infrastructure/cdn-in-a-box/enroller/enroller.go
+++ b/infrastructure/cdn-in-a-box/enroller/enroller.go
@@ -223,6 +223,41 @@ func enrollDeliveryService(toSession *session, r io.Reader) error {
 	return err
 }
 
+// enrollDeliveryServicesRequiredCapability takes a json file and creates a DeliveryServicesRequiredCapability object using the TO API
+func enrollDeliveryServicesRequiredCapability(toSession *session, r io.Reader) error {
+	dec := json.NewDecoder(r)
+	var dsrc tc.DeliveryServicesRequiredCapability
+	err := dec.Decode(&dsrc)
+	if err != nil {
+		log.Infof("error decoding Delivery Services Required Capability: %s\n", err)
+		return err
+	}
+
+	dses, _, err := toSession.GetDeliveryServiceByXMLIDNullableWithHdr(*dsrc.XMLID, nil)
+	if err != nil {
+		log.Infof("getting Delivery Service by XMLID %s: %s", *dsrc.XMLID, err.Error())
+		return err
+	}
+	if len(dses) < 1 {
+		err = errors.New("could not find a Delivey Service with XMLID %s")
+		log.Infoln(err)
+		return err
+	}
+	dsrc.DeliveryServiceID = dses[0].ID
+
+	alerts, _, err := toSession.CreateDeliveryServicesRequiredCapability(dsrc)
+	if err != nil {
+		log.Infof("error creating Delivery Services Required Capability: %s\n", err)
+		return err
+	}
+
+	enc := json.NewEncoder(os.Stdout)
+	enc.SetIndent("", "  ")
+	err = enc.Encode(&alerts)
+
+	return err
+}
+
 func enrollDeliveryServiceServer(toSession *session, r io.Reader) error {
 	dec := json.NewDecoder(r)
 
@@ -655,6 +690,69 @@ func enrollServer(toSession *session, r io.Reader) error {
 	return err
 }
 
+// enrollServerCapability takes a json file and creates a ServerCapability object using the TO API
+func enrollServerCapability(toSession *session, r io.Reader) error {
+	dec := json.NewDecoder(r)
+	var s tc.ServerCapability
+	err := dec.Decode(&s)
+	if err != nil {
+		log.Infof("error decoding Server Capability: %s\n", err)
+		return err
+	}
+
+	alerts, _, err := toSession.CreateServerCapability(s)
+	if err != nil {
+		log.Infof("error creating Server Capability: %s\n", err)
+		return err
+	}
+
+	enc := json.NewEncoder(os.Stdout)
+	enc.SetIndent("", "  ")
+	err = enc.Encode(&alerts)
+
+	return err
+}
+
+// enrollServerServerCapability takes a json file and creates a ServerServerCapability object using the TO API
+func enrollServerServerCapability(toSession *session, r io.Reader) error {
+	dec := json.NewDecoder(r)
+	var s tc.ServerServerCapability
+	err := dec.Decode(&s)
+	if err != nil {
+		log.Infof("error decoding Server: %s\n", err)
+		return err
+	}
+
+	resp, _, err := toSession.GetServersWithHdr(&url.Values{"hostName": []string{*s.Server}}, nil)
+	if err != nil {
+		log.Infof("getting server %s: %s\n", *s.Server, err.Error())
+		return err
+	}
+	if len(resp.Response) < 1 {
+		err = fmt.Errorf("could not find Server %s", *s.Server)
+		log.Infoln(err.Error())
+		return err
+	}
+	if len(resp.Response) > 1 {
+		err = fmt.Errorf("found more than 1 Server with hostname %s", *s.Server)
+		log.Infoln(err.Error())
+		return err
+	}
+	s.ServerID = resp.Response[0].ID
+
+	alerts, _, err := toSession.CreateServerServerCapability(s)
+	if err != nil {
+		log.Infof("error creating Server Server Capability: %s\n", err)
+		return err
+	}
+
+	enc := json.NewEncoder(os.Stdout)
+	enc.SetIndent("", "  ")
+	err = enc.Encode(&alerts)
+
+	return err
+}
+
 type dirWatcher struct {
 	*fsnotify.Watcher
 	TOSession *session
@@ -869,23 +967,26 @@ func main() {
 
 	// dispatcher maps an API endpoint name to a function to act on the JSON input Reader
 	dispatcher := map[string]func(*session, io.Reader) error{
-		"types":                   enrollType,
-		"cdns":                    enrollCDN,
-		"cachegroups":             enrollCachegroup,
-		"topologies":              enrollTopology,
-		"profiles":                enrollProfile,
-		"parameters":              enrollParameter,
-		"servers":                 enrollServer,
-		"asns":                    enrollASN,
-		"deliveryservices":        enrollDeliveryService,
-		"deliveryservice_servers": enrollDeliveryServiceServer,
-		"divisions":               enrollDivision,
-		"origins":                 enrollOrigin,
-		"phys_locations":          enrollPhysLocation,
-		"regions":                 enrollRegion,
-		"statuses":                enrollStatus,
-		"tenants":                 enrollTenant,
-		"users":                   enrollUser,
+		"types":                                  enrollType,
+		"cdns":                                   enrollCDN,
+		"cachegroups":                            enrollCachegroup,
+		"topologies":                             enrollTopology,
+		"profiles":                               enrollProfile,
+		"parameters":                             enrollParameter,
+		"servers":                                enrollServer,
+		"server_capabilities":                    enrollServerCapability,
+		"server_server_capabilities":             enrollServerServerCapability,
+		"asns":                                   enrollASN,
+		"deliveryservices":                       enrollDeliveryService,
+		"deliveryservices_required_capabilities": enrollDeliveryServicesRequiredCapability,
+		"deliveryservice_servers":                enrollDeliveryServiceServer,
+		"divisions":                              enrollDivision,
+		"origins":                                enrollOrigin,
+		"phys_locations":                         enrollPhysLocation,
+		"regions":                                enrollRegion,
+		"statuses":                               enrollStatus,
+		"tenants":                                enrollTenant,
+		"users":                                  enrollUser,
 	}
 
 	if len(httpPort) != 0 {
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/trafficops-init.sh b/infrastructure/cdn-in-a-box/traffic_ops/trafficops-init.sh
index 11deb9b..404a3cc 100755
--- a/infrastructure/cdn-in-a-box/traffic_ops/trafficops-init.sh
+++ b/infrastructure/cdn-in-a-box/traffic_ops/trafficops-init.sh
@@ -36,7 +36,7 @@ while ! to-ping 2>/dev/null; do
 done
 
 # NOTE: order dependent on foreign key references, e.g. profiles must be loaded before parameters
-endpoints="cdns types divisions regions phys_locations tenants users cachegroups profiles parameters servers topologies deliveryservices deliveryservice_servers"
+endpoints="cdns types divisions regions phys_locations tenants users cachegroups profiles parameters server_capabilities servers topologies deliveryservices server_server_capabilities deliveryservice_servers deliveryservices_required_capabilities"
 vars=$(awk -F = '/^\w/ {printf "$%s ",$1}' /variables.env)
 
 waitfor() {
diff --git a/infrastructure/cdn-in-a-box/traffic_ops_data/deliveryservices_required_capabilities/010-HDD-demo1.json b/infrastructure/cdn-in-a-box/traffic_ops_data/deliveryservices_required_capabilities/010-HDD-demo1.json
new file mode 100644
index 0000000..3dce6f6
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops_data/deliveryservices_required_capabilities/010-HDD-demo1.json
@@ -0,0 +1,4 @@
+{
+  "requiredCapability": "HDD",
+  "xmlID": "demo1"
+}
diff --git a/infrastructure/cdn-in-a-box/traffic_ops_data/server_capabilities/010-HDD.json b/infrastructure/cdn-in-a-box/traffic_ops_data/server_capabilities/010-HDD.json
new file mode 100644
index 0000000..15acb47
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops_data/server_capabilities/010-HDD.json
@@ -0,0 +1,3 @@
+{
+  "name": "HDD"
+}
diff --git a/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-edge.json b/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-edge.json
new file mode 100644
index 0000000..681d233
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-edge.json
@@ -0,0 +1,4 @@
+{
+  "serverHostName": "edge",
+  "serverCapability": "HDD"
+}
diff --git a/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-mid-01.json b/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-mid-01.json
new file mode 100644
index 0000000..af09962
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-mid-01.json
@@ -0,0 +1,4 @@
+{
+  "serverHostName": "mid-01",
+  "serverCapability": "HDD"
+}
diff --git a/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-mid-02.json b/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-mid-02.json
new file mode 100644
index 0000000..b8ee426
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops_data/server_server_capabilities/010-HDD-mid-02.json
@@ -0,0 +1,4 @@
+{
+  "serverHostName": "mid-02",
+  "serverCapability": "HDD"
+}