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 fee39e2 Fix t3c-apply default hostname to be short (#6187)
fee39e2 is described below
commit fee39e2b353a03356d6a2717b83e4e1e5383d821
Author: Robert O Butts <[email protected]>
AuthorDate: Mon Sep 13 10:13:04 2021 -0600
Fix t3c-apply default hostname to be short (#6187)
Fixes #6174
---
CHANGELOG.md | 1 +
cache-config/t3c-apply/config/config.go | 2 +
cache-config/testing/docker/docker-compose.yml | 1 +
.../ort-tests/t3c-os-hostname-short_test.go | 127 +++++++++++++++++++++
4 files changed, 131 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab6b8e7..e06913c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -114,6 +114,7 @@ The format is based on [Keep a
Changelog](http://keepachangelog.com/en/1.0.0/).
- [#6066](https://github.com/apache/trafficcontrol/issues/6066) - Fixed
missing/incorrect indices on some tables
- [#6169](https://github.com/apache/trafficcontrol/issues/6169) - Fixed
t3c-update not updating server status when a fallback to a previous Traffic Ops
API version occurred
- [#5576](https://github.com/apache/trafficcontrol/issues/5576) - Inconsistent
Profile Name restrictions
+- [#6174](https://github.com/apache/trafficcontrol/issues/6174) - Fixed
t3c-apply with no hostname failing if the OS hostname returns a full FQDN
- Fixed Federations IMS so TR federations watcher will get updates.
- [#5129](https://github.com/apache/trafficcontrol/issues/5129) - Updated TM
so that it returns a 404 if the endpoint is not supported.
diff --git a/cache-config/t3c-apply/config/config.go
b/cache-config/t3c-apply/config/config.go
index 6bfdcc9..ba33260 100644
--- a/cache-config/t3c-apply/config/config.go
+++ b/cache-config/t3c-apply/config/config.go
@@ -369,6 +369,8 @@ If any of the related flags are also set, they override the
mode's default behav
if err != nil {
return Cfg{}, errors.New("Could not get the hostname
from the O.S., please supply a hostname: " + err.Error())
}
+ // strings.Split always returns a slice with at least 1
element, so we don't need a len check
+ cacheHostName = strings.Split(cacheHostName, ".")[0]
}
useGit := StrToUseGitFlag(*useGitStr)
diff --git a/cache-config/testing/docker/docker-compose.yml
b/cache-config/testing/docker/docker-compose.yml
index f5d9215..cba6697 100644
--- a/cache-config/testing/docker/docker-compose.yml
+++ b/cache-config/testing/docker/docker-compose.yml
@@ -85,6 +85,7 @@ services:
RHEL_VERSION: ${RHEL_VERSION:-8}
context: .
dockerfile: ort_test/Dockerfile
+ cap_add: ['SYS_ADMIN'] # necessary for hostname tests
depends_on:
- yumserver
- to_server
diff --git a/cache-config/testing/ort-tests/t3c-os-hostname-short_test.go
b/cache-config/testing/ort-tests/t3c-os-hostname-short_test.go
new file mode 100644
index 0000000..747e113
--- /dev/null
+++ b/cache-config/testing/ort-tests/t3c-os-hostname-short_test.go
@@ -0,0 +1,127 @@
+package orttest
+
+/*
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import (
+ "strings"
+ "testing"
+
+ "github.com/apache/trafficcontrol/cache-config/t3cutil"
+ "github.com/apache/trafficcontrol/cache-config/testing/ort-tests/tcdata"
+)
+
+func TestT3cApplyOSHostnameShort(t *testing.T) {
+ t.Log("------------- Starting TestT3cApplyOSHostnameShort tests
---------------")
+ tcd.WithObjs(t, []tcdata.TCObj{
+ tcdata.CDNs, tcdata.Types, tcdata.Tenants, tcdata.Parameters,
+ tcdata.Profiles, tcdata.ProfileParameters, tcdata.Statuses,
+ tcdata.Divisions, tcdata.Regions, tcdata.PhysLocations,
+ tcdata.CacheGroups, tcdata.Servers, tcdata.Topologies,
+ tcdata.DeliveryServices}, func() {
+ doTestT3cApplyOSHostnameShort(t)
+ })
+ t.Log("------------- End of TestT3cApplyOSHostnameShort tests
---------------")
+}
+
+func doTestT3cApplyOSHostnameShort(t *testing.T) {
+ // verifies that when no hostname is passed,
+ // t3c-apply will get the OS hostname,
+ // and use the short name (which is what will be in Traffic Ops),
+ // and not the full FQDN.
+
+ startingHost, errCode := getHostName()
+ if errCode != 0 {
+ t.Fatalf("getting the hostname failed: code %v message %v",
errCode, startingHost)
+ }
+
+ t.Logf("original host is " + startingHost)
+
+ cacheHostName := "atlanta-edge-03"
+
+ if msg, code := setHostName(cacheHostName); code != 0 {
+ t.Fatalf("setting the hostname failed: code %v message %v",
code, msg)
+ }
+
+ defer func() {
+ if msg, code := setHostName(startingHost); code != 0 {
+ t.Fatalf("setting the hostname back to the original
'%v' failed: code %v message %v", startingHost, code, msg)
+ } else {
+ t.Logf("set hostname back to original '" + startingHost
+ "'")
+ }
+ }()
+
+ // verify the host was really set
+ if newHost, errCode := getHostName(); errCode != 0 {
+ t.Fatalf("getting the hostname failed: code %v message %v",
errCode, newHost)
+ } else if newHost != cacheHostName {
+ t.Fatalf("setting hostname claimed it succeeded, but was '%v'
expected '%v'", newHost, cacheHostName)
+ } else {
+ t.Logf("set hostname to '" + newHost + "'")
+ }
+
+ t.Logf("calling t3c-apply with no host flag, with a short hostname")
+ if stdOut, exitCode := t3cApplyNoHost(); exitCode != 0 {
+ t.Fatalf("t3c-apply with no hostname arg and and system
hostname '%v' failed: code '%v' output '%v'\n", cacheHostName, exitCode, stdOut)
+ }
+
+ fqdnHostName := cacheHostName + ".fqdn.example.test"
+ if msg, code := setHostName(fqdnHostName); code != 0 {
+ t.Fatalf("setting the hostname failed: code %v message %v",
code, msg)
+ }
+
+ // verify the host was really set
+ if newHost, errCode := getHostName(); errCode != 0 {
+ t.Fatalf("getting the hostname failed: code %v message %v",
errCode, newHost)
+ } else if newHost != fqdnHostName {
+ t.Fatalf("setting hostname claimed it succeeded, but was '%v'
expected '%v'", newHost, fqdnHostName)
+ } else {
+ t.Logf("set hostname to '" + newHost + "'")
+ }
+
+ t.Logf("calling t3c-apply with no host flag, with a fqdn hostname")
+ if stdOut, exitCode := t3cApplyNoHost(); exitCode != 0 {
+ t.Fatalf("t3c-apply with no hostname arg and and system
hostname '%v' failed: code '%v' output '%v'\n", cacheHostName, exitCode, stdOut)
+ }
+}
+
+func setHostName(host string) (string, int) {
+ stdOut, stdErr, exitCode := t3cutil.Do("hostname", host)
+ return "out: " + string(stdOut) + " err: " + string(stdErr), exitCode
+}
+
+func getHostName() (string, int) {
+ stdOut, stdErr, exitCode := t3cutil.Do("hostname")
+ if exitCode == 0 {
+ return strings.TrimSpace(string(stdOut)), 0
+ }
+ return "out: " + string(stdOut) + " err: " + string(stdErr), exitCode
+}
+
+func t3cApplyNoHost() (string, int) {
+ args := []string{
+ "apply",
+ "--traffic-ops-insecure=true",
+ "--traffic-ops-timeout-milliseconds=3000",
+ "--traffic-ops-user=" + tcd.Config.TrafficOps.Users.Admin,
+ "--traffic-ops-password=" + tcd.Config.TrafficOps.UserPassword,
+ "--traffic-ops-url=" + tcd.Config.TrafficOps.URL,
+ "-vv",
+ "--omit-via-string-release=true",
+ "--git=" + "yes",
+ "--run-mode=" + "badass",
+ }
+ _, stdErr, exitCode := t3cutil.Do("t3c", args...)
+ return string(stdErr), exitCode
+}