You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by dg...@apache.org on 2018/11/14 18:29:08 UTC

[trafficcontrol] branch 3.0.x updated: revert enroller to 3.0.x version of client

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

dgelinas pushed a commit to branch 3.0.x
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/3.0.x by this push:
     new 5482897  revert enroller to 3.0.x version of client
5482897 is described below

commit 5482897e0e49039e05696c7e206e2ce866a6cefa
Author: Dan Kirkwood <da...@apache.org>
AuthorDate: Wed Nov 14 10:21:53 2018 -0700

    revert enroller to 3.0.x version of client
---
 infrastructure/cdn-in-a-box/enroller/enroller.go | 448 ++---------------------
 1 file changed, 21 insertions(+), 427 deletions(-)

diff --git a/infrastructure/cdn-in-a-box/enroller/enroller.go b/infrastructure/cdn-in-a-box/enroller/enroller.go
index d3b1e9c..102a3c8 100644
--- a/infrastructure/cdn-in-a-box/enroller/enroller.go
+++ b/infrastructure/cdn-in-a-box/enroller/enroller.go
@@ -52,8 +52,6 @@ func printJSON(label string, b interface{}) {
 	fmt.Println(label, buf.String())
 }
 
-// TODO: Some GetxxxByxxx() methods escape the string passed in; others don't
-//  Here we escape the name if not escaped in the Getxxx method being called
 func (s session) getTypeIDByName(n string) (int, error) {
 	types, _, err := s.GetTypeByName(url.QueryEscape(n))
 	if err != nil {
@@ -65,17 +63,6 @@ func (s session) getTypeIDByName(n string) (int, error) {
 	return types[0].ID, err
 }
 
-func (s session) getCoordinateIDByName(n string) (int, error) {
-	coordinates, _, err := s.GetCoordinateByName(url.QueryEscape(n))
-	if err != nil {
-		return -1, err
-	}
-	if len(coordinates) == 0 {
-		return -1, errors.New("no coordinate with name " + n)
-	}
-	return coordinates[0].ID, err
-}
-
 func (s session) getCDNIDByName(n string) (int, error) {
 	cdns, _, err := s.GetCDNByName(url.QueryEscape(n))
 	if err != nil {
@@ -132,7 +119,7 @@ func (s session) getCachegroupIDByName(n string) (int, error) {
 }
 
 func (s session) getProfileIDByName(n string) (int, error) {
-	profiles, _, err := s.GetProfileByName(n)
+	profiles, _, err := s.GetProfileByName(url.QueryEscape(n))
 	if err != nil {
 		return -1, err
 	}
@@ -142,21 +129,6 @@ func (s session) getProfileIDByName(n string) (int, error) {
 	return profiles[0].ID, err
 }
 
-func (s session) getParameterIDMatching(m tc.Parameter) (int, error) {
-	// TODO: s.GetParameterByxxx() does not seem to work with values with spaces --
-	// doing this the hard way for now
-	parameters, _, err := s.GetParameters()
-	if err != nil {
-		return -1, err
-	}
-	for _, p := range parameters {
-		if p.Name == m.Name && p.Value == m.Value && p.ConfigFile == m.ConfigFile {
-			return p.ID, nil
-		}
-	}
-	return -1, fmt.Errorf("no parameter matching name %s, configFile %s, value %s", m.Name, m.ConfigFile, m.Value)
-}
-
 func (s session) getStatusIDByName(n string) (int, error) {
 	statuses, _, err := s.GetStatusByName(url.QueryEscape(n))
 	if err != nil {
@@ -168,39 +140,6 @@ func (s session) getStatusIDByName(n string) (int, error) {
 	return statuses[0].ID, err
 }
 
-func (s session) getRoleIDByName(n string) (int, error) {
-	roles, _, _, err := s.GetRoleByName(url.QueryEscape(n))
-	if err != nil {
-		return -1, err
-	}
-	if len(roles) == 0 || roles[0].ID == nil {
-		return -1, errors.New("no role with name " + n)
-	}
-	return *roles[0].ID, err
-}
-
-func (s session) getServerIDByHostName(n string) (int, error) {
-	servers, _, err := s.GetServerByHostName(url.QueryEscape(n))
-	if err != nil {
-		return -1, err
-	}
-	if len(servers) == 0 {
-		return -1, errors.New("no server with hostName " + n)
-	}
-	return servers[0].ID, err
-}
-
-func (s session) getDeliveryServiceIDByXMLID(n string) (int, error) {
-	dses, _, err := s.GetDeliveryServiceByXMLID(url.QueryEscape(n))
-	if err != nil {
-		return -1, err
-	}
-	if len(dses) == 0 {
-		return -1, errors.New("no deliveryservice with name " + n)
-	}
-	return dses[0].ID, err
-}
-
 func (s session) getTenantIDByName(n string) (int, error) {
 	tenant, _, err := s.TenantByName(url.QueryEscape(n))
 	if err != nil {
@@ -238,10 +177,6 @@ func enrollType(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateType(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("type %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -273,10 +208,6 @@ func enrollCDN(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateCDN(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("cdn %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -307,10 +238,6 @@ func enrollASN(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateASN(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("asn %d already exists\n", s.ASN)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -366,10 +293,6 @@ func enrollCachegroup(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateCacheGroupNullable(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("cachegroup %s already exists\n", *s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -391,51 +314,23 @@ func enrollDeliveryService(toSession *session, fn string) error {
 	}()
 
 	dec := json.NewDecoder(fh)
-	var s tc.DeliveryServiceNullable
+	var s tc.DeliveryService
 	err = dec.Decode(&s)
 	if err != nil && err != io.EOF {
 		log.Printf("error decoding %s: %s\n", fn, err)
 		return err
 	}
 
-	if s.Type != nil && *s.Type != "" {
+	if s.Type != "" {
 		id, err := toSession.getTypeIDByName(s.Type.String())
 		if err != nil {
 			return err
 		}
-		s.TypeID = &id
-	}
-
-	if s.CDNName != nil && *s.CDNName != "" {
-		id, err := toSession.getCDNIDByName(*s.CDNName)
-		if err != nil {
-			return err
-		}
-		s.CDNID = &id
-	}
-
-	if s.ProfileName != nil && *s.ProfileName != "" {
-		id, err := toSession.getProfileIDByName(*s.ProfileName)
-		if err != nil {
-			return err
-		}
-		s.ProfileID = &id
-	}
-
-	if s.Tenant != nil && *s.Tenant != "" {
-		id, err := toSession.getTenantIDByName(*s.Tenant)
-		if err != nil {
-			return err
-		}
-		s.TenantID = &id
+		s.TypeID = id
 	}
 
-	alerts, err := toSession.CreateDeliveryServiceNullable(&s)
+	alerts, err := toSession.CreateDeliveryService(&s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("deliveryservice %s already exists\n", s.XMLID)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -447,47 +342,6 @@ func enrollDeliveryService(toSession *session, fn string) error {
 	return err
 }
 
-func enrollDeliveryServiceServer(toSession *session, fn string) error {
-	fh, err := os.Open(fn)
-	if err != nil {
-		return err
-	}
-	defer func() {
-		fh.Close()
-	}()
-
-	dec := json.NewDecoder(fh)
-
-	// DeliveryServiceServers lists ds xmlid and array of server names.  Use that to create multiple DeliveryServiceServer objects
-	var dss tc.DeliveryServiceServers
-	err = dec.Decode(&dss)
-	if err != nil && err != io.EOF {
-		log.Printf("error decoding %s: %s\n", fn, err)
-		return err
-	}
-
-	dsID, err := toSession.getDeliveryServiceIDByXMLID(dss.XmlId)
-	if err != nil {
-		return err
-	}
-
-	var serverIDs []int
-	for _, sn := range dss.ServerNames {
-		id, err := toSession.getServerIDByHostName(sn)
-		if err != nil {
-			log.Println("error finding " + sn + ": " + err.Error())
-			continue
-		}
-		serverIDs = append(serverIDs, id)
-	}
-	_, err = toSession.CreateDeliveryServiceServers(dsID, serverIDs, true)
-	if err != nil {
-		log.Printf("error creating from %s: %s\n", fn, err)
-	}
-
-	return err
-}
-
 func enrollDivision(toSession *session, fn string) error {
 	fh, err := os.Open(fn)
 	if err != nil {
@@ -507,10 +361,6 @@ func enrollDivision(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateDivision(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("division %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -539,52 +389,8 @@ func enrollOrigin(toSession *session, fn string) error {
 		return err
 	}
 
-	if s.Cachegroup != nil && *s.Cachegroup != "" {
-		id, err := toSession.getCachegroupIDByName(*s.Cachegroup)
-		if err != nil {
-			return err
-		}
-		s.CachegroupID = &id
-	}
-
-	if s.DeliveryService != nil && *s.DeliveryService != "" {
-		id, err := toSession.getDeliveryServiceIDByXMLID(*s.DeliveryService)
-		if err != nil {
-			return err
-		}
-		s.DeliveryServiceID = &id
-	}
-
-	if s.Profile != nil && *s.Profile != "" {
-		id, err := toSession.getProfileIDByName(*s.Profile)
-		if err != nil {
-			return err
-		}
-		s.ProfileID = &id
-	}
-
-	if s.Coordinate != nil && *s.Coordinate != "" {
-		id, err := toSession.getCoordinateIDByName(*s.Coordinate)
-		if err != nil {
-			return err
-		}
-		s.CoordinateID = &id
-	}
-
-	if s.Tenant != nil && *s.Tenant != "" {
-		id, err := toSession.getTenantIDByName(*s.Tenant)
-		if err != nil {
-			return err
-		}
-		s.TenantID = &id
-	}
-
 	alerts, _, err := toSession.CreateOrigin(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("origin %s already exists\n", *s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -612,55 +418,13 @@ func enrollParameter(toSession *session, fn string) error {
 		log.Printf("error decoding %s: %s\n", fn, err)
 		return err
 	}
-	paramID, err := toSession.getParameterIDMatching(s)
-	var alerts tc.Alerts
-	if err == nil {
-		// existing param -- update
-		alerts, _, err = toSession.UpdateParameterByID(paramID, s)
-		if err != nil {
-			log.Printf("error updating parameter %d: %s with %+v ", paramID, err.Error(), s)
-		}
-	} else {
-		alerts, _, err = toSession.CreateParameter(s)
-		if err != nil {
-			if strings.Contains(err.Error(), "already exists") {
-				log.Printf("parameter %s already exists\n", s.Name)
-				return nil
-			}
-			log.Printf("error creating from %s: %s\n", fn, err)
-			return err
-		}
-	}
-	// link parameter with profiles
-	if len(s.Profiles) > 0 {
-		paramID, err := toSession.getParameterIDMatching(s)
-		if err != nil {
-			return err
-		}
 
-		var profiles []string
-		err = json.Unmarshal(s.Profiles, &profiles)
-		if err != nil {
-			log.Printf("%v", err)
-		}
-
-		for _, n := range profiles {
-			pid, err := toSession.getProfileIDByName(n)
-			if err != nil {
-				log.Printf("%v", err)
-				continue
-			}
-			pp := tc.ProfileParameter{ParameterID: paramID, ProfileID: pid}
-			_, _, err = toSession.CreateProfileParameter(pp)
-			if err != nil {
-				if strings.Contains(err.Error(), "already exists") {
-					continue
-				}
-				log.Printf("%v", err)
-				continue
-			}
-		}
+	alerts, _, err := toSession.CreateParameter(s)
+	if err != nil {
+		log.Printf("error creating from %s: %s\n", fn, err)
+		return err
 	}
+
 	enc := json.NewEncoder(os.Stdout)
 	enc.SetIndent("", "  ")
 	err = enc.Encode(&alerts)
@@ -694,10 +458,6 @@ func enrollPhysLocation(toSession *session, fn string) error {
 	}
 	alerts, _, err := toSession.CreatePhysLocation(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("physLocation %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -736,10 +496,6 @@ func enrollRegion(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateRegion(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("region %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -770,10 +526,6 @@ func enrollStatus(toSession *session, fn string) error {
 
 	alerts, _, err := toSession.CreateStatus(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("status %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -812,10 +564,6 @@ func enrollTenant(toSession *session, fn string) error {
 
 	alerts, err := toSession.CreateTenant(&s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("tenant %s already exists\n", s.Name)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -827,7 +575,8 @@ func enrollTenant(toSession *session, fn string) error {
 	return err
 }
 
-func enrollUser(toSession *session, fn string) error {
+// enrollProfile takes a json file and creates a Profile object using the TO API
+func enrollProfile(toSession *session, fn string) error {
 	fh, err := os.Open(fn)
 	if err != nil {
 		return err
@@ -837,36 +586,23 @@ func enrollUser(toSession *session, fn string) error {
 	}()
 
 	dec := json.NewDecoder(fh)
-	var s tc.User
+	var s tc.Profile
 	err = dec.Decode(&s)
-	log.Printf("User is %++v\n", s)
 	if err != nil && err != io.EOF {
 		log.Printf("error decoding %s: %s\n", fn, err)
 		return err
 	}
 
-	if s.Tenant != nil && *s.Tenant != "" {
-		id, err := toSession.getTenantIDByName(*s.Tenant)
-		if err != nil {
-			return err
-		}
-		s.TenantID = &id
-	}
-
-	if s.RoleName != nil && *s.RoleName != "" {
-		id, err := toSession.getRoleIDByName(*s.RoleName)
+	if s.CDNName != "" {
+		id, err := toSession.getCDNIDByName(s.CDNName)
 		if err != nil {
 			return err
 		}
-		s.Role = &id
+		s.CDNID = id
 	}
 
-	alerts, _, err := toSession.CreateUser(&s)
+	alerts, _, err := toSession.CreateProfile(s)
 	if err != nil {
-		if strings.Contains(err.Error(), "already exists") {
-			log.Printf("user %s already exists\n", *s.Username)
-			return nil
-		}
 		log.Printf("error creating from %s: %s\n", fn, err)
 		return err
 	}
@@ -878,144 +614,6 @@ func enrollUser(toSession *session, fn string) error {
 	return err
 }
 
-// using documented import form for profiles
-type profileImport struct {
-	Profile    tc.Profile             `json:"profile"`
-	Parameters []tc.ParameterNullable `json:"parameters"`
-}
-
-// enrollProfile takes a json file and creates a Profile object using the TO API
-func enrollProfile(toSession *session, fn string) error {
-	fh, err := os.Open(fn)
-	if err != nil {
-		return err
-	}
-	defer func() {
-		fh.Close()
-	}()
-
-	dec := json.NewDecoder(fh)
-	var profile tc.Profile
-
-	err = dec.Decode(&profile)
-	if err != nil && err != io.EOF {
-		log.Printf("error decoding %s: %s\n", fn, err)
-		return err
-	}
-
-	enc := json.NewEncoder(os.Stdout)
-	enc.SetIndent("  ", "")
-	enc.Encode(profile)
-
-	if len(profile.Name) == 0 {
-		log.Println("missing name on profile from " + fn)
-		return errors.New("missing name on profile from " + fn)
-	}
-
-	profiles, _, err := toSession.GetProfileByName(profile.Name)
-
-	createProfile := false
-	if err != nil || len(profiles) == 0 {
-		// no profile by that name -- need to create it
-		createProfile = true
-	} else {
-		// updating - ID needs to match
-		profile.ID = profiles[0].ID
-	}
-
-	// these need to be done whether creating or updating
-	if profile.CDNName != "" {
-		id, err := toSession.getCDNIDByName(profile.CDNName)
-		if err != nil {
-			return err
-		}
-		profile.CDNID = id
-	}
-
-	var alerts tc.Alerts
-	var action string
-	if createProfile {
-		alerts, _, err = toSession.CreateProfile(profile)
-		if err != nil {
-			if strings.Contains(err.Error(), "already exists") {
-				log.Printf("profile %s already exists\n", profile.Name)
-			} else {
-				log.Printf("error creating profile from %+v: %s\n", profile, err.Error())
-			}
-		}
-		profile.ID, err = toSession.getProfileIDByName(profile.Name)
-		if err != nil {
-			log.Printf("error getting profile ID from %+v: %s\n", profile, err.Error())
-		}
-		action = "creating"
-	} else {
-		alerts, _, err = toSession.UpdateProfileByID(profile.ID, profile)
-		action = "updating"
-	}
-
-	if err != nil {
-		log.Printf("error "+action+" from %s: %s\n", fn, err)
-		return err
-	}
-
-	//log.Printf("total profile is  %+v\n", profile)
-	for _, p := range profile.Parameters {
-		var name, configFile, value string
-		var secure bool
-		if p.ConfigFile != nil {
-			configFile = *p.ConfigFile
-		}
-		if p.Name != nil {
-			name = *p.Name
-		}
-		if p.Value != nil {
-			value = *p.Value
-		}
-		param := tc.Parameter{ConfigFile: configFile, Name: name, Value: value, Secure: secure}
-		log.Printf("creating param %+v\n", param)
-		id, err := toSession.getParameterIDMatching(param)
-		if err != nil {
-			// create it
-			_, _, err = toSession.CreateParameter(param)
-			if err != nil {
-				if !strings.Contains(err.Error(), "already exists") {
-					log.Printf("can't create parameter %+v: %s\n", param, err.Error())
-				}
-				continue
-			}
-			param.ID, err = toSession.getParameterIDMatching(param)
-			if err != nil {
-				log.Printf("error getting new parameter %+v\n", param)
-				param.ID, err = toSession.getParameterIDMatching(param)
-				log.Printf(err.Error())
-
-			}
-		} else {
-			param.ID = id
-			toSession.UpdateParameterByID(param.ID, param)
-		}
-
-		if param.ID < 1 {
-			panic(fmt.Sprintf("param ID not found for %v", param))
-
-		}
-		pp := tc.ProfileParameter{ProfileID: profile.ID, ParameterID: param.ID}
-		_, _, err = toSession.CreateProfileParameter(pp)
-		if err != nil {
-			if !strings.Contains(err.Error(), "already exists") {
-				log.Printf("error creating profileparameter %+v: %s\n", pp, err.Error())
-			}
-			continue
-		}
-	}
-
-	//enc := json.NewEncoder(os.Stdout)
-	enc.SetIndent("", "  ")
-	err = enc.Encode(&alerts)
-
-	return err
-}
-
 // enrollServer takes a json file and creates a Server object using the TO API
 func enrollServer(toSession *session, fn string) error {
 	fh, err := os.Open(fn)
@@ -1049,7 +647,6 @@ func enrollServer(toSession *session, fn string) error {
 		}
 		s.ProfileID = id
 	}
-
 	if s.Status != "" {
 		id, err := toSession.getStatusIDByName(s.Status)
 		if err != nil {
@@ -1072,7 +669,7 @@ func enrollServer(toSession *session, fn string) error {
 		s.CachegroupID = id
 	}
 	if s.PhysLocation != "" {
-		id, err := toSession.getPhysLocationIDByName(s.PhysLocation)
+		id, err := toSession.getPhysLocationIDByName(s.Cachegroup)
 		if err != nil {
 			return err
 		}
@@ -1125,8 +722,7 @@ func newDirWatcher(toSession *session) (*dirWatcher, error) {
 					if strings.HasSuffix(event.Name, processed) || strings.HasSuffix(event.Name, rejected) {
 						continue
 					}
-					i, err := os.Stat(event.Name)
-					if err != nil || i.IsDir() {
+					if i, err := os.Stat(event.Name); err != nil || i.IsDir() {
 						log.Println("skipping " + event.Name)
 						continue
 					}
@@ -1136,10 +732,10 @@ func newDirWatcher(toSession *session) (*dirWatcher, error) {
 						continue
 					}
 					dir := event.Name[:p]
+					log.Printf("dir is %s\n", dir)
 					suffix := rejected
 					if f, ok := dw.watched[dir]; ok {
 						log.Printf("creating from %s\n", event.Name)
-						// TODO: ensure file content is there before attempting to read
 						time.Sleep(100 * time.Millisecond)
 
 						err := f(toSession, event.Name)
@@ -1172,7 +768,7 @@ func newDirWatcher(toSession *session) (*dirWatcher, error) {
 func (dw *dirWatcher) watch(dir string, f func(*session, string) error) {
 	if stat, err := os.Stat(dir); err != nil || !stat.IsDir() {
 		// attempt to create dir
-		if err = os.Mkdir(dir, os.ModeDir|0700); err != nil {
+		if err = os.Mkdir(dir, os.ModeDir); err != nil {
 			log.Println("cannot watch " + dir + ": not a directory")
 			return
 		}
@@ -1221,14 +817,12 @@ func main() {
 	dw.watch("servers", enrollServer)
 	dw.watch("asns", enrollASN)
 	dw.watch("deliveryservices", enrollDeliveryService)
-	dw.watch("deliveryservice_servers", enrollDeliveryServiceServer)
 	dw.watch("divisions", enrollDivision)
 	dw.watch("origins", enrollOrigin)
 	dw.watch("phys_locations", enrollPhysLocation)
 	dw.watch("regions", enrollRegion)
 	dw.watch("statuses", enrollStatus)
 	dw.watch("tenants", enrollTenant)
-	dw.watch("users", enrollUser)
 
 	// create this file to indicate the enroller is ready
 	f, err := os.Create(startedFile)