Skip to content

Commit 1264c98

Browse files
Merge pull request openshift#8802 from pawanpinjarkar/auth-token-status-service
AGENT-937: Check Authentication Token for Node Boot-Up on day2
2 parents 3fdbbae + 4c01a1c commit 1264c98

File tree

5 files changed

+59
-9
lines changed

5 files changed

+59
-9
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# shellcheck disable=SC1091
6+
source "issue_status.sh"
7+
8+
status_issue="65_token"
9+
10+
export TZ=UTC
11+
check_token_expiry() {
12+
expiry_epoch=$(date -d "${AGENT_AUTH_TOKEN_EXPIRY}" +%s)
13+
current_epoch=$(date +%s)
14+
15+
if [ "$current_epoch" -gt "$expiry_epoch" ]; then
16+
printf '\\e{lightred}The authentication token has expired. Please generate a new ISO using the "oc adm node-image create" command, then reboot the node.\\e{reset}'| set_issue "${status_issue}"
17+
exit 1
18+
fi
19+
}
20+
21+
while true; do
22+
check_token_expiry
23+
sleep 5
24+
done
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[Unit]
2+
Description=service that displays a message if agent auth token is expired.
3+
Wants=network-online.target
4+
After=network-online.target agent-interactive-console.service
5+
ConditionPathExists=/etc/assisted/add-nodes.env
6+
7+
[Service]
8+
Type=simple
9+
EnvironmentFile=/etc/assisted/add-nodes.env
10+
ExecStart=/usr/local/bin/agent-auth-token-status.sh
11+
Restart=no
12+
13+
[Install]
14+
WantedBy=multi-user.target agent-add-node.service

pkg/asset/agent/gencrypto/authconfig.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const AuthType = "agent-installer-local"
3939

4040
// AuthConfig is an asset that generates ECDSA public/private keys, JWT token.
4141
type AuthConfig struct {
42-
PublicKey, AgentAuthToken, AuthType string
42+
PublicKey, AgentAuthToken, AgentAuthTokenExpiry, AuthType string
4343
}
4444

4545
var _ asset.Asset = (*AuthConfig)(nil)
@@ -93,6 +93,7 @@ func (a *AuthConfig) Generate(_ context.Context, dependencies asset.Parents) err
9393

9494
// Auth tokens expires after 48 hours
9595
expiry := time.Now().UTC().Add(48 * time.Hour)
96+
a.AgentAuthTokenExpiry = expiry.Format(time.RFC3339)
9697
token, err := generateToken(infraEnvID.ID, privateKey, expiry)
9798
if err != nil {
9899
return err
@@ -239,7 +240,7 @@ func (a *AuthConfig) createOrUpdateAuthTokenSecret(kubeconfigPath string) error
239240
if err != nil {
240241
return err
241242
}
242-
logrus.Debug("auth token secret regenerated and updated in the cluster")
243+
logrus.Debug("Auth token secret regenerated and updated in the cluster")
243244
} else {
244245
// Update the token in asset store with the retrieved token from the cluster
245246
a.AgentAuthToken = retrievedToken
@@ -250,7 +251,7 @@ func (a *AuthConfig) createOrUpdateAuthTokenSecret(kubeconfigPath string) error
250251
}
251252
// Update the asset store with the retrieved public key associated with the valid token from the cluster
252253
a.PublicKey = retrievedPublicKey
253-
logrus.Debugf("reusing existing auth token (valid up to %s)", expiryTime)
254+
logrus.Debugf("Reusing existing auth token (valid up to %s)", expiryTime)
254255
}
255256
return err
256257
}

pkg/asset/agent/image/ignition.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ type agentTemplateData struct {
7676
ImageTypeISO string
7777
PublicKeyPEM string
7878
Token string
79+
TokenExpiry string
7980
AuthType string
8081
CaBundleMount string
8182
}
@@ -188,11 +189,16 @@ func (a *Ignition) Generate(_ context.Context, dependencies asset.Parents) error
188189
// that all the hosts defined are workers.
189190
numMasters = 0
190191
numWorkers = len(addNodesConfig.Config.Hosts)
192+
191193
// Enable add-nodes specific services
192194
enabledServices = append(enabledServices, "agent-add-node.service")
193195
// Generate add-nodes.env file
194-
addNodesEnvFile := ignition.FileFromString(addNodesEnvPath, "root", 0644, getAddNodesEnv(*clusterInfo))
196+
addNodesEnvFile := ignition.FileFromString(addNodesEnvPath, "root", 0644, getAddNodesEnv(*clusterInfo, authConfig.AgentAuthTokenExpiry))
195197
config.Storage.Files = append(config.Storage.Files, addNodesEnvFile)
198+
199+
// Enable auth token service
200+
enabledServices = append(enabledServices, "agent-auth-token-status.service")
201+
196202
// Version matches the source cluster one
197203
openshiftVersion = clusterInfo.Version
198204
streamGetter = func(ctx context.Context) (*stream.Stream, error) {
@@ -260,11 +266,13 @@ func (a *Ignition) Generate(_ context.Context, dependencies asset.Parents) error
260266
authConfig.PublicKey,
261267
authConfig.AuthType,
262268
authConfig.AgentAuthToken,
269+
authConfig.AgentAuthTokenExpiry,
263270
caBundleMount,
264271
len(registriesConfig.MirrorConfig) > 0,
265272
numMasters, numWorkers,
266273
osImage,
267-
infraEnv.Spec.Proxy)
274+
infraEnv.Spec.Proxy,
275+
)
268276

269277
err = bootstrap.AddStorageFiles(&config, "/", "agent/files", agentTemplateData)
270278
if err != nil {
@@ -374,7 +382,7 @@ func addBootstrapScripts(config *igntypes.Config, releaseImage string) (err erro
374382
}
375383

376384
func getTemplateData(name, pullSecret, releaseImageList, releaseImage, releaseImageMirror, publicContainerRegistries,
377-
imageTypeISO, infraEnvID, publicKey, authType, token, caBundleMount string,
385+
imageTypeISO, infraEnvID, publicKey, authType, token, tokenExpiry, caBundleMount string,
378386
haveMirrorConfig bool,
379387
numMasters, numWorkers int,
380388
osImage *models.OsImage,
@@ -397,6 +405,7 @@ func getTemplateData(name, pullSecret, releaseImageList, releaseImage, releaseIm
397405
PublicKeyPEM: publicKey,
398406
AuthType: authType,
399407
Token: token,
408+
TokenExpiry: tokenExpiry,
400409
CaBundleMount: caBundleMount,
401410
}
402411
}
@@ -431,11 +440,12 @@ WORKFLOW_TYPE=%s
431440
`, nodeZeroIP, serviceBaseURL.String(), imageServiceBaseURL.String(), token, token, workflowType)
432441
}
433442

434-
func getAddNodesEnv(clusterInfo joiner.ClusterInfo) string {
443+
func getAddNodesEnv(clusterInfo joiner.ClusterInfo, authTokenExpiry string) string {
435444
return fmt.Sprintf(`CLUSTER_ID=%s
436445
CLUSTER_NAME=%s
437446
CLUSTER_API_VIP_DNS_NAME=%s
438-
`, clusterInfo.ClusterID, clusterInfo.ClusterName, clusterInfo.APIDNSName)
447+
AGENT_AUTH_TOKEN_EXPIRY=%s
448+
`, clusterInfo.ClusterID, clusterInfo.ClusterName, clusterInfo.APIDNSName, authTokenExpiry)
439449
}
440450

441451
func addStaticNetworkConfig(config *igntypes.Config, staticNetworkConfig []*models.HostStaticNetworkConfig) (err error) {

pkg/asset/agent/image/ignition_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func TestIgnition_getTemplateData(t *testing.T) {
9393

9494
publicKey := "-----BEGIN EC PUBLIC KEY-----\nMHcCAQEEIOSCfDNmx0qe6dncV4tg==\n-----END EC PUBLIC KEY-----\n"
9595
token := "someToken"
96-
templateData := getTemplateData(clusterName, pullSecret, releaseImageList, releaseImage, releaseImageMirror, publicContainerRegistries, "minimal-iso", infraEnvID, publicKey, gencrypto.AuthType, token, "", haveMirrorConfig, agentClusterInstall.Spec.ProvisionRequirements.ControlPlaneAgents, agentClusterInstall.Spec.ProvisionRequirements.WorkerAgents, osImage, proxy)
96+
templateData := getTemplateData(clusterName, pullSecret, releaseImageList, releaseImage, releaseImageMirror, publicContainerRegistries, "minimal-iso", infraEnvID, publicKey, gencrypto.AuthType, token, "", "", haveMirrorConfig, agentClusterInstall.Spec.ProvisionRequirements.ControlPlaneAgents, agentClusterInstall.Spec.ProvisionRequirements.WorkerAgents, osImage, proxy)
9797
assert.Equal(t, clusterName, templateData.ClusterName)
9898
assert.Equal(t, "http", templateData.ServiceProtocol)
9999
assert.Equal(t, pullSecret, templateData.PullSecret)
@@ -395,6 +395,7 @@ func commonFiles() []string {
395395
"/usr/local/bin/load-config-iso.sh",
396396
"/etc/udev/rules.d/80-agent-config-image.rules",
397397
"/usr/local/bin/add-node.sh",
398+
"/usr/local/bin/agent-auth-token-status.sh",
398399
"/usr/local/bin/common.sh",
399400
}
400401
}

0 commit comments

Comments
 (0)