Skip to content

Commit 341dcbf

Browse files
Merge pull request openshift#8393 from pawanpinjarkar/authenticate-systemd
AGENT-876: Authenticate systemd services and curl requests
2 parents 18d682e + 7545d70 commit 341dcbf

File tree

10 files changed

+56
-24
lines changed

10 files changed

+56
-24
lines changed

data/data/agent/files/usr/local/bin/add-node.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
set -e
33

44
# shellcheck disable=SC1091
5-
source issue_status.sh
6-
7-
BASE_URL="${SERVICE_BASE_URL}api/assisted-install/v2"
5+
source "common.sh"
6+
# shellcheck disable=SC1091
7+
source "issue_status.sh"
88

99
cluster_id=""
1010
while [[ "${cluster_id}" = "" ]]
1111
do
1212
# Get cluster id
13-
cluster_id=$(curl -s -S "${BASE_URL}/clusters" | jq -r .[].id)
13+
cluster_id=$(curl_assisted_service "/clusters" | jq -r .[].id)
1414
if [[ "${cluster_id}" = "" ]]; then
1515
sleep 2
1616
fi
@@ -24,7 +24,7 @@ status_issue="90_add-node"
2424
host_ready=false
2525
while [[ $host_ready == false ]]
2626
do
27-
host_status=$(curl -s -S "${BASE_URL}/infra-envs/${INFRA_ENV_ID}/hosts" | jq -r ".[].status")
27+
host_status=$(curl_assisted_service "/infra-envs/${INFRA_ENV_ID}/hosts" | jq -r ".[].status")
2828
if [[ "${host_status}" != "known" ]]; then
2929
printf '\\e{yellow}Waiting for the host to be ready' | set_issue "${status_issue}"
3030
sleep 10
@@ -33,12 +33,12 @@ do
3333
fi
3434
done
3535

36-
HOST_ID=$(curl -s "${BASE_URL}/infra-envs/${INFRA_ENV_ID}/hosts" | jq -r '.[].id')
36+
HOST_ID=$(curl_assisted_service "/infra-envs/${INFRA_ENV_ID}/hosts" | jq -r '.[].id')
3737
printf '\nHost %s is ready for installation\n' "${HOST_ID}" 1>&2
3838
clear_issue "${status_issue}"
3939

4040
# Add the current host to the cluster
41-
res=$(curl -X POST -s -S -w "%{http_code}\\n" -o /dev/null "${BASE_URL}/infra-envs/${INFRA_ENV_ID}/hosts/${HOST_ID}/actions/install")
41+
res=$(curl_assisted_service "/infra-envs/${INFRA_ENV_ID}/hosts/${HOST_ID}/actions/install" POST -w "%{http_code}" -o /dev/null)
4242
if [[ $res = "202" ]]; then
4343
printf '\nHost installation started\n' 1>&2
4444
else
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
3+
curl_assisted_service() {
4+
local endpoint=$1
5+
local method=${2:-GET}
6+
local additional_options=("${@:3}") # Capture all arguments starting from the third one
7+
local baseURL="${SERVICE_BASE_URL}api/assisted-install/v2"
8+
9+
case "${method}" in
10+
"POST")
11+
curl -s -S -X POST "${additional_options[@]}" "${baseURL}${endpoint}" \
12+
-H "Authorization: ${AGENT_AUTH_TOKEN}" \
13+
-H "accept: application/json" \
14+
-H "Content-Type: application/json" \
15+
;;
16+
"GET")
17+
curl -s -S -X GET "${additional_options[@]}" "${baseURL}${endpoint}" \
18+
-H "Authorization: ${AGENT_AUTH_TOKEN}" \
19+
-H "Accept: application/json"
20+
;;
21+
esac
22+
}

data/data/agent/files/usr/local/bin/start-cluster-installation.sh

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
set -e
33

44
# shellcheck disable=SC1091
5-
source issue_status.sh
6-
7-
BASE_URL="${SERVICE_BASE_URL}api/assisted-install/v2"
5+
source "common.sh"
6+
# shellcheck disable=SC1091
7+
source "issue_status.sh"
88

99
cluster_id=""
1010
while [[ "${cluster_id}" = "" ]]
1111
do
1212
# Get cluster id
13-
cluster_id=$(curl -s -S "${BASE_URL}/clusters" | jq -r .[].id)
13+
cluster_id=$(curl_assisted_service "/clusters" GET | jq -r .[].id)
1414
if [[ "${cluster_id}" = "" ]]; then
1515
sleep 2
1616
fi
@@ -28,7 +28,7 @@ status_issue="90_start-install"
2828
num_known_hosts() {
2929
local known_hosts=0
3030
local insufficient_hosts=0
31-
host_status=$(curl -s -S "${BASE_URL}/infra-envs/${INFRA_ENV_ID}/hosts" | jq -r .[].status)
31+
host_status=$(curl_assisted_service "/infra-envs/${INFRA_ENV_ID}/hosts" GET | jq -r .[].status)
3232
if [[ -n ${host_status} ]]; then
3333
for status in ${host_status}; do
3434
if [[ "${status}" == "known" ]]; then
@@ -58,17 +58,17 @@ clear_issue "${status_issue}"
5858
while [[ "${cluster_status}" != "installed" ]]
5959
do
6060
sleep 5
61-
cluster_status=$(curl -s -S "${BASE_URL}/clusters" | jq -r .[].status)
61+
cluster_status=$(curl_assisted_service "/clusters" GET | jq -r .[].status)
6262
echo "Cluster status: ${cluster_status}" 1>&2
6363
# Start the cluster install, if it transitions back to Ready due to a failure,
6464
# then it will be restarted
6565
case "${cluster_status}" in
6666
"ready")
6767
echo "Starting cluster installation..." 1>&2
68-
curl -s -S -X POST "${BASE_URL}/clusters/${cluster_id}/actions/install" \
69-
-H 'accept: application/json' \
70-
-d ''
71-
echo "Cluster installation started" 1>&2
68+
res=$(curl_assisted_service "/clusters/${cluster_id}/actions/install" POST -w "%{http_code}" -o /dev/null)
69+
if [[ $res = "202" ]]; then
70+
printf '\nCluster installation started\n' 1>&2
71+
fi
7272
;&
7373
"installed" | "preparing-for-installation" | "installing")
7474
printf '\\e{lightgreen}Cluster installation in progress\\e{reset}' | set_issue "${status_issue}"
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
#!/bin/bash
22
set -e
33

4+
# shellcheck disable=SC1091
5+
source "common.sh"
6+
47
echo "Waiting for assisted-service to be ready"
5-
until curl --output /dev/null --silent --fail "${SERVICE_BASE_URL}/api/assisted-install/v2/infra-envs"; do
8+
9+
until curl_assisted_service "/infra-envs" GET -o /dev/null --silent --fail; do
610
printf '.'
711
sleep 5
812
done

data/data/agent/files/usr/local/share/assisted-service/assisted-service.env.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ OPENSHIFT_INSTALL_RELEASE_IMAGE_MIRROR={{.ReleaseImageMirror}}
1919
STORAGE=filesystem
2020
INFRA_ENV_ID={{.InfraEnvID}}
2121
EC_PUBLIC_KEY_PEM={{.PublicKeyPEM}}
22+
AGENT_AUTH_TOKEN={{.Token}}

data/data/agent/systemd/units/agent-register-cluster.service.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ EnvironmentFile=/usr/local/share/assisted-service/agent-images.env
1515
EnvironmentFile=/usr/local/share/assisted-service/assisted-service.env
1616
ExecStartPre=/bin/rm -f %t/%n.ctr-id
1717
ExecStartPre=/usr/local/bin/wait-for-assisted-service.sh
18-
ExecStart=podman run --net host --cidfile=%t/%n.ctr-id --cgroups=no-conmon --log-driver=journald --rm --pod-id-file=%t/assisted-service-pod.pod-id --replace --name=agent-register-cluster -v /etc/assisted/manifests:/manifests -v /etc/assisted/extra-manifests:/extra-manifests {{ if .HaveMirrorConfig }}-v /etc/containers:/etc/containers{{ end }} {{.CaBundleMount}} --env SERVICE_BASE_URL --env OPENSHIFT_INSTALL_RELEASE_IMAGE_MIRROR $SERVICE_IMAGE /usr/local/bin/agent-installer-client registerCluster
18+
ExecStart=podman run --net host --cidfile=%t/%n.ctr-id --cgroups=no-conmon --log-driver=journald --rm --pod-id-file=%t/assisted-service-pod.pod-id --replace --name=agent-register-cluster -v /etc/assisted/manifests:/manifests -v /etc/assisted/extra-manifests:/extra-manifests {{ if .HaveMirrorConfig }}-v /etc/containers:/etc/containers{{ end }} {{.CaBundleMount}} --env SERVICE_BASE_URL --env OPENSHIFT_INSTALL_RELEASE_IMAGE_MIRROR --env AGENT_AUTH_TOKEN $SERVICE_IMAGE /usr/local/bin/agent-installer-client registerCluster
1919
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
2020
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
2121

data/data/agent/systemd/units/agent-register-infraenv.service.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ EnvironmentFile=/etc/assisted/rendezvous-host.env
1212
EnvironmentFile=/usr/local/share/assisted-service/agent-images.env
1313
EnvironmentFile=/usr/local/share/assisted-service/assisted-service.env
1414
ExecStartPre=/bin/rm -f %t/%n.ctr-id
15-
ExecStart=podman run --net host --cidfile=%t/%n.ctr-id --cgroups=no-conmon --log-driver=journald --rm --pod-id-file=%t/assisted-service-pod.pod-id --replace --name=agent-register-infraenv -v /etc/assisted/manifests:/manifests --env SERVICE_BASE_URL --env IMAGE_TYPE_ISO $SERVICE_IMAGE /usr/local/bin/agent-installer-client registerInfraEnv
15+
ExecStart=podman run --net host --cidfile=%t/%n.ctr-id --cgroups=no-conmon --log-driver=journald --rm --pod-id-file=%t/assisted-service-pod.pod-id --replace --name=agent-register-infraenv -v /etc/assisted/manifests:/manifests --env SERVICE_BASE_URL --env IMAGE_TYPE_ISO --env AGENT_AUTH_TOKEN $SERVICE_IMAGE /usr/local/bin/agent-installer-client registerInfraEnv
1616
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
1717
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
1818

data/data/agent/systemd/units/apply-host-config.service

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ EnvironmentFile=/usr/local/share/assisted-service/assisted-service.env
1414
ExecStartPre=/bin/rm -f %t/%n.ctr-id
1515
ExecStartPre=/bin/mkdir -p %t/agent-installer /etc/assisted/hostconfig
1616
ExecStartPre=/usr/local/bin/wait-for-assisted-service.sh
17-
ExecStart=podman run --net host --cidfile=%t/%n.ctr-id --cgroups=no-conmon --log-driver=journald --restart=on-failure:10 --pod-id-file=%t/assisted-service-pod.pod-id --replace --name=apply-host-config -v /etc/assisted/hostconfig:/etc/assisted/hostconfig -v %t/agent-installer:/var/run/agent-installer:z --env SERVICE_BASE_URL --env INFRA_ENV_ID --env WORKFLOW_TYPE $SERVICE_IMAGE /usr/local/bin/agent-installer-client configure
17+
ExecStart=podman run --net host --cidfile=%t/%n.ctr-id --cgroups=no-conmon --log-driver=journald --restart=on-failure:10 --pod-id-file=%t/assisted-service-pod.pod-id --replace --name=apply-host-config -v /etc/assisted/hostconfig:/etc/assisted/hostconfig -v %t/agent-installer:/var/run/agent-installer:z --env SERVICE_BASE_URL --env INFRA_ENV_ID --env WORKFLOW_TYPE --env AGENT_AUTH_TOKEN $SERVICE_IMAGE /usr/local/bin/agent-installer-client configure
1818
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
1919
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
2020

pkg/asset/agent/image/ignition.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ type agentTemplateData struct {
7575
ConfigImageFiles string
7676
ImageTypeISO string
7777
PublicKeyPEM string
78+
Token string
7879
CaBundleMount string
7980
}
8081

@@ -261,6 +262,7 @@ func (a *Ignition) Generate(_ context.Context, dependencies asset.Parents) error
261262
infraEnv.Spec.Proxy,
262263
imageTypeISO,
263264
keyPairAsset.PublicKey,
265+
keyPairAsset.Token,
264266
caBundleMount)
265267

266268
err = bootstrap.AddStorageFiles(&config, "/", "agent/files", agentTemplateData)
@@ -377,8 +379,7 @@ func getTemplateData(name, pullSecret, releaseImageList, releaseImage,
377379
osImage *models.OsImage,
378380
proxy *v1beta1.Proxy,
379381
imageTypeISO,
380-
publicKey string,
381-
caBundleMount string) *agentTemplateData {
382+
publicKey, token, caBundleMount string) *agentTemplateData {
382383
return &agentTemplateData{
383384
ServiceProtocol: "http",
384385
PullSecret: pullSecret,
@@ -395,6 +396,7 @@ func getTemplateData(name, pullSecret, releaseImageList, releaseImage,
395396
Proxy: proxy,
396397
ImageTypeISO: imageTypeISO,
397398
PublicKeyPEM: publicKey,
399+
Token: token,
398400
CaBundleMount: caBundleMount,
399401
}
400402
}

pkg/asset/agent/image/ignition_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,9 @@ func TestIgnition_getTemplateData(t *testing.T) {
9292
clusterName := "test-agent-cluster-install.test"
9393

9494
publicKey := "-----BEGIN EC PUBLIC KEY-----\nMHcCAQEEIOSCfDNmx0qe6dncV4tg==\n-----END EC PUBLIC KEY-----\n"
95+
token := "someToken"
9596

96-
templateData := getTemplateData(clusterName, pullSecret, releaseImageList, releaseImage, releaseImageMirror, haveMirrorConfig, publicContainerRegistries, agentClusterInstall.Spec.ProvisionRequirements.ControlPlaneAgents, agentClusterInstall.Spec.ProvisionRequirements.WorkerAgents, infraEnvID, osImage, proxy, "minimal-iso", publicKey, "")
97+
templateData := getTemplateData(clusterName, pullSecret, releaseImageList, releaseImage, releaseImageMirror, haveMirrorConfig, publicContainerRegistries, agentClusterInstall.Spec.ProvisionRequirements.ControlPlaneAgents, agentClusterInstall.Spec.ProvisionRequirements.WorkerAgents, infraEnvID, osImage, proxy, "minimal-iso", publicKey, token, "")
9798
assert.Equal(t, clusterName, templateData.ClusterName)
9899
assert.Equal(t, "http", templateData.ServiceProtocol)
99100
assert.Equal(t, pullSecret, templateData.PullSecret)
@@ -108,6 +109,7 @@ func TestIgnition_getTemplateData(t *testing.T) {
108109
assert.Equal(t, osImage, templateData.OSImage)
109110
assert.Equal(t, proxy, templateData.Proxy)
110111
assert.Equal(t, publicKey, templateData.PublicKeyPEM)
112+
assert.Equal(t, token, templateData.Token)
111113
}
112114

113115
func TestIgnition_getRendezvousHostEnv(t *testing.T) {
@@ -391,6 +393,7 @@ func commonFiles() []string {
391393
"/usr/local/bin/load-config-iso.sh",
392394
"/etc/udev/rules.d/80-agent-config-image.rules",
393395
"/usr/local/bin/add-node.sh",
396+
"/usr/local/bin/common.sh",
394397
}
395398
}
396399

0 commit comments

Comments
 (0)