@@ -12,6 +12,8 @@ source "${BATS_TEST_DIRNAME}/../../../lib/common.bash"
12
12
source " ${BATS_TEST_DIRNAME} /../../../.ci/lib.sh"
13
13
FIXTURES_DIR=" ${BATS_TEST_DIRNAME} /fixtures"
14
14
SHARED_FIXTURES_DIR=" ${BATS_TEST_DIRNAME} /../../confidential/fixtures"
15
+ NYDUS_SNAPSHOTTER_CONFIG=" /opt/confidential-containers/share/remote-snapshotter/config.toml"
16
+ CONTAINERD_CONFIG=" /etc/containerd/config.toml"
15
17
16
18
# Toggle between true and false the service_offload configuration of
17
19
# the Kata agent.
@@ -29,18 +31,18 @@ switch_image_service_offload() {
29
31
load_runtime_config_path
30
32
31
33
case " $1 " in
32
- " on" )
33
- sudo sed -i -e ' s/^\(service_offload\).*=.*$/\1 = true/g' \
34
- " $RUNTIME_CONFIG_PATH "
35
- ;;
36
- " off" )
37
- sudo sed -i -e ' s/^\(service_offload\).*=.*$/\1 = false/g' \
38
- " $RUNTIME_CONFIG_PATH "
39
-
40
- ;;
41
- * )
42
- die " Unknown option '$1 '"
43
- ;;
34
+ " on" )
35
+ sudo sed -i -e ' s/^\(service_offload\).*=.*$/\1 = true/g' \
36
+ " $RUNTIME_CONFIG_PATH "
37
+ ;;
38
+ " off" )
39
+ sudo sed -i -e ' s/^\(service_offload\).*=.*$/\1 = false/g' \
40
+ " $RUNTIME_CONFIG_PATH "
41
+
42
+ ;;
43
+ * )
44
+ die " Unknown option '$1 '"
45
+ ;;
44
46
esac
45
47
}
46
48
@@ -66,13 +68,13 @@ switch_measured_rootfs_verity_scheme() {
66
68
load_runtime_config_path
67
69
68
70
case " $1 " in
69
- " dm-verity" | " none" )
70
- sudo sed -i -e ' s/scheme=.* cc_rootfs/scheme=' " $1 " ' cc_rootfs/g' \
71
- " $RUNTIME_CONFIG_PATH "
72
- ;;
73
- * )
74
- die " Unknown option '$1 '"
75
- ;;
71
+ " dm-verity" | " none" )
72
+ sudo sed -i -e ' s/scheme=.* cc_rootfs/scheme=' " $1 " ' cc_rootfs/g' \
73
+ " $RUNTIME_CONFIG_PATH "
74
+ ;;
75
+ * )
76
+ die " Unknown option '$1 '"
77
+ ;;
76
78
esac
77
79
}
78
80
@@ -110,8 +112,8 @@ add_kernel_params() {
110
112
get_kernel_params () {
111
113
load_runtime_config_path
112
114
113
- local kernel_params=$( sed -n -e ' s#^kernel_params = "\(.*\)"#\1#gp' \
114
- " $RUNTIME_CONFIG_PATH " )
115
+ local kernel_params=$( sed -n -e ' s#^kernel_params = "\(.*\)"#\1#gp' \
116
+ " $RUNTIME_CONFIG_PATH " )
115
117
echo " $kernel_params "
116
118
}
117
119
@@ -203,13 +205,13 @@ configure_cc_containerd() {
203
205
# restart containerd because it might be in an inconsistent state here.
204
206
sudo systemctl stop containerd
205
207
sleep 5
206
- [ -n " $saved_containerd_conf_file " ] && \
208
+ [ -n " $saved_containerd_conf_file " ] &&
207
209
sudo cp -f " $containerd_conf_file " " $saved_containerd_conf_file "
208
210
sudo systemctl start containerd
209
211
waitForProcess 30 5 " sudo crictl info >/dev/null"
210
212
211
213
# Ensure the cc CRI handler is set.
212
- local cri_handler=$( sudo crictl info | \
214
+ local cri_handler=$( sudo crictl info |
213
215
jq ' .config.containerd.runtimes.kata.cri_handler' )
214
216
if [[ ! " $cri_handler " =~ cc ]]; then
215
217
sudo sed -i ' s/\([[:blank:]]*\)\(runtime_type = "io.containerd.kata.v2"\)/\1\2\n\1cri_handler = "cc"/' \
@@ -219,8 +221,8 @@ configure_cc_containerd() {
219
221
if [ " $( sudo crictl info | jq -r ' .config.cni.confDir' ) " = " null" ]; then
220
222
echo " [plugins.cri.cni]
221
223
# conf_dir is the directory in which the admin places a CNI conf.
222
- conf_dir = \" /etc/cni/net.d\" " | \
223
- sudo tee -a " $containerd_conf_file "
224
+ conf_dir = \" /etc/cni/net.d\" " |
225
+ sudo tee -a " $containerd_conf_file "
224
226
fi
225
227
226
228
sudo systemctl restart containerd
@@ -286,38 +288,36 @@ setup_cosign_signatures_files() {
286
288
287
289
# Set-up required files in guest image
288
290
case " ${AA_KBC:- } " in
289
- " offline_fs_kbc" )
290
- add_kernel_params " agent.aa_kbc_params=offline_fs_kbc::null"
291
- cp_to_guest_img " etc" " ${SHARED_FIXTURES_DIR} /cosign/offline-fs-kbc/$( uname -m) /aa-offline_fs_kbc-resources.json"
292
- ;;
293
- " cc_kbc" )
294
- # CC KBC is specified as: cc_kbc::host_ip:port, and 60000 is the default port used
295
- # by the service, as well as the one configured in the Kata Containers rootfs.
296
-
297
- CC_KBS_IP=${CC_KBS_IP:- " $( hostname -I | awk ' {print $1}' ) " }
298
- CC_KBS_PORT=${CC_KBS_PORT:- " 60000" }
299
- add_kernel_params " agent.aa_kbc_params=cc_kbc::http://${CC_KBS_IP} :${CC_KBS_PORT} /"
300
- ;;
301
- * )
302
- ;;
291
+ " offline_fs_kbc" )
292
+ add_kernel_params " agent.aa_kbc_params=offline_fs_kbc::null"
293
+ cp_to_guest_img " etc" " ${SHARED_FIXTURES_DIR} /cosign/offline-fs-kbc/$( uname -m) /aa-offline_fs_kbc-resources.json"
294
+ ;;
295
+ " cc_kbc" )
296
+ # CC KBC is specified as: cc_kbc::host_ip:port, and 60000 is the default port used
297
+ # by the service, as well as the one configured in the Kata Containers rootfs.
298
+
299
+ CC_KBS_IP=${CC_KBS_IP:- " $( hostname -I | awk ' {print $1}' ) " }
300
+ CC_KBS_PORT=${CC_KBS_PORT:- " 60000" }
301
+ add_kernel_params " agent.aa_kbc_params=cc_kbc::http://${CC_KBS_IP} :${CC_KBS_PORT} /"
302
+ ;;
303
+ * ) ;;
303
304
esac
304
305
}
305
306
306
307
setup_signature_files () {
307
308
case " ${AA_KBC:- } " in
308
- " offline_fs_kbc" )
309
- setup_offline_fs_kbc_signature_files_in_guest
310
- ;;
311
- " cc_kbc" )
312
- setup_cc_kbc_signature_files_in_guest
313
- ;;
314
- * )
315
- ;;
309
+ " offline_fs_kbc" )
310
+ setup_offline_fs_kbc_signature_files_in_guest
311
+ ;;
312
+ " cc_kbc" )
313
+ setup_cc_kbc_signature_files_in_guest
314
+ ;;
315
+ * ) ;;
316
316
esac
317
317
}
318
318
319
319
# In case the tests run behind a firewall where images needed to be fetched
320
- # through a proxy.
320
+ # through a proxy.
321
321
# Note: With measured rootfs enabled, we can not set proxy through
322
322
# agent config file.
323
323
setup_proxy () {
@@ -349,8 +349,8 @@ setup_credentials_files() {
349
349
350
350
dest_dir=" $( mktemp -t -d offline-fs-kbc-XXXXXXXX) "
351
351
dest_file=${dest_dir} /aa-offline_fs_kbc-resources.json
352
- auth_json=$( REGISTRY=$1 CREDENTIALS=" ${REGISTRY_CREDENTIAL_ENCODED} " envsubst < " ${SHARED_FIXTURES_DIR} /offline-fs-kbc/auth.json.in" | base64 -w 0)
353
- CREDENTIAL=" ${auth_json} " envsubst < " ${SHARED_FIXTURES_DIR} /offline-fs-kbc/aa-offline_fs_kbc-resources.json.in" > " ${dest_file} "
352
+ auth_json=$( REGISTRY=$1 CREDENTIALS=" ${REGISTRY_CREDENTIAL_ENCODED} " envsubst < " ${SHARED_FIXTURES_DIR} /offline-fs-kbc/auth.json.in" | base64 -w 0)
353
+ CREDENTIAL=" ${auth_json} " envsubst < " ${SHARED_FIXTURES_DIR} /offline-fs-kbc/aa-offline_fs_kbc-resources.json.in" > " ${dest_file} "
354
354
cp_to_guest_img " etc" " ${dest_file} "
355
355
}
356
356
@@ -366,77 +366,122 @@ KBS_DB="${KBS_DB:-simple_kbs}"
366
366
367
367
# Run the simple-kbs
368
368
simple_kbs_run () {
369
- # Retrieve simple-kbs repo and tag from versions.yaml
370
- local simple_kbs_url=$( get_test_version " externals.simple-kbs.url" )
371
- local simple_kbs_tag=$( get_test_version " externals.simple-kbs.tag" )
372
-
373
- # Cleanup and create installation directory
374
- esudo rm -rf " ${SIMPLE_KBS_DIR} "
375
- mkdir -p " ${SIMPLE_KBS_DIR} "
376
- pushd " ${SIMPLE_KBS_DIR} "
377
-
378
- # Clone and run
379
- git clone " ${simple_kbs_url} " --branch main
380
- pushd simple-kbs
381
-
382
- # Checkout, build and start
383
- git checkout -b " branch_${simple_kbs_tag} " " ${simple_kbs_tag} "
384
- esudo docker-compose build
385
- esudo docker-compose up -d
386
-
387
- # Wait for simple-kbs to start
388
- waitForProcess 15 1 " esudo docker-compose top | grep -q simple-kbs"
389
- popd
390
-
391
- # Get simple-kbs database container ip
392
- local kbs_db_host=$( simple_kbs_get_db_ip)
393
-
394
- # Confirm connection to the database is possible
395
- waitForProcess 5 1 " mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} -e '\q'"
396
- popd
369
+ # Retrieve simple-kbs repo and tag from versions.yaml
370
+ local simple_kbs_url=$( get_test_version " externals.simple-kbs.url" )
371
+ local simple_kbs_tag=$( get_test_version " externals.simple-kbs.tag" )
372
+
373
+ # Cleanup and create installation directory
374
+ esudo rm -rf " ${SIMPLE_KBS_DIR} "
375
+ mkdir -p " ${SIMPLE_KBS_DIR} "
376
+ pushd " ${SIMPLE_KBS_DIR} "
377
+
378
+ # Clone and run
379
+ git clone " ${simple_kbs_url} " --branch main
380
+ pushd simple-kbs
381
+
382
+ # Checkout, build and start
383
+ git checkout -b " branch_${simple_kbs_tag} " " ${simple_kbs_tag} "
384
+ esudo docker-compose build
385
+ esudo docker-compose up -d
386
+
387
+ # Wait for simple-kbs to start
388
+ waitForProcess 15 1 " esudo docker-compose top | grep -q simple-kbs"
389
+ popd
390
+
391
+ # Get simple-kbs database container ip
392
+ local kbs_db_host=$( simple_kbs_get_db_ip)
393
+
394
+ # Confirm connection to the database is possible
395
+ waitForProcess 5 1 " mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} -e '\q'"
396
+ popd
397
397
}
398
398
399
399
# Stop simple-kbs and database containers
400
400
simple_kbs_stop () {
401
- (cd ${SIMPLE_KBS_DIR} /simple-kbs && esudo docker-compose down 2> /dev/null)
401
+ (cd ${SIMPLE_KBS_DIR} /simple-kbs && esudo docker-compose down 2> /dev/null)
402
402
}
403
403
404
404
# Delete all test inserted data in the simple-kbs
405
405
simple_kbs_delete_data () {
406
- # Get simple-kbs database container ip
407
- local kbs_db_host=$( simple_kbs_get_db_ip)
406
+ # Get simple-kbs database container ip
407
+ local kbs_db_host=$( simple_kbs_get_db_ip)
408
408
409
- # Delete all data with 'id = 10'
410
- mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} << EOF
409
+ # Delete all data with 'id = 10'
410
+ mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} << EOF
411
411
DELETE FROM secrets WHERE id = 10;
412
412
DELETE FROM policy WHERE id = 10;
413
413
EOF
414
414
}
415
415
416
416
# Get the ip of the simple-kbs database docker container
417
417
simple_kbs_get_db_ip () {
418
- esudo docker network inspect simple-kbs_default \
419
- | jq -r ' .[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \
420
- | sed " s|/.*$||g"
418
+ esudo docker network inspect simple-kbs_default |
419
+ jq -r ' .[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' |
420
+ sed " s|/.*$||g"
421
421
}
422
422
423
423
# Add key and keyset to database
424
424
# If measurement is provided, add policy with measurement to database
425
425
simple_kbs_add_key_to_db () {
426
- local encryption_key=" ${1} "
427
- local measurement=" ${2} "
428
-
429
- # Get simple-kbs database container ip
430
- local kbs_db_host=$( simple_kbs_get_db_ip)
431
-
432
- if [ -n " ${measurement} " ]; then
433
- mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} << EOF
426
+ local encryption_key=" ${1} "
427
+ local measurement=" ${2} "
428
+
429
+ # Get simple-kbs database container ip
430
+ local kbs_db_host=$( simple_kbs_get_db_ip)
431
+
432
+ if [ -n " ${measurement} " ]; then
433
+ mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} << EOF
434
434
INSERT INTO secrets VALUES (10, 'default/key/ssh-demo', '${encryption_key} ', 10);
435
435
INSERT INTO policy VALUES (10, '["${measurement} "]', '[]', 0, 0, '[]', now(), NULL, 1);
436
436
EOF
437
- else
438
- mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} << EOF
437
+ else
438
+ mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${kbs_db_host} -D ${KBS_DB} << EOF
439
439
INSERT INTO secrets VALUES (10, 'default/key/ssh-demo', '${encryption_key} ', NULL);
440
440
EOF
441
- fi
441
+ fi
442
+ }
443
+
444
+ # ##############################################################################
445
+
446
+ # remote-snapshotter
447
+
448
+ configure_remote_snapshotter () {
449
+ case " ${SNAPSHOTTER:- } " in
450
+ " nydus" )
451
+ configure_nydus_snapshotter
452
+ ;;
453
+ * ) ;;
454
+
455
+ esac
456
+ }
457
+ check_containerd_version () {
458
+ containerd_version=$( containerd --version | awk ' {print $3}' | sort -V | tail -n 1)
459
+ if echo $containerd_version | grep -q " ^v1.7" ; then
460
+ return 1
461
+ else
462
+ return 0
463
+ fi
464
+ }
465
+ configure_containerd_for_nydus_snapshotter () {
466
+ if check_containerd_version; then
467
+ sed -i ' /\[plugins\."io\.containerd\.grpc\.v1\.cri"\.containerd\.runtimes\.' " $RUNTIMECLASS " ' \]/a\ snapshotter = "nydus"\n disable_snapshot_annotations = false' " $CONTAINERD_CONFIG "
468
+ else
469
+ sed -i ' s/disable_snapshot_annotations = .*/disable_snapshot_annotations = false/g; s/snapshotter = .*/snapshotter = "nydus"/g' " $CONTAINERD_CONFIG "
470
+ fi
471
+ }
472
+ remove_nydus_snapshotter_from_containerd () {
473
+ if check_containerd_version; then
474
+ sed -i ' /\[plugins\."io\.containerd\.grpc\.v1\.cri"\.containerd\.runtimes\.' " $RUNTIMECLASS " ' \]/,/\[/{/snapshotter = "nydus"/d;/disable_snapshot_annotations = false/d;}' " $CONTAINERD_CONFIG "
475
+ else
476
+ sed -i ' s/disable_snapshot_annotations = .*/disable_snapshot_annotations = true/g; s/snapshotter = .*/snapshotter = "overlayfs"/g' " $CONTAINERD_CONFIG "
477
+ fi
478
+ }
479
+ restart_nydus_snapshotter () {
480
+ echo " Restart nydus snapshotter"
481
+ }
482
+
483
+ configure_nydus_snapshotter () {
484
+ echo " Configure nydus snapshotter"
485
+ sed -i " s/export_mode = .*/export_mode = \" $EXPORT_MODE \" /" $NYDUS_SNAPSHOTTER_CONFIG
486
+ restart_nydus_snapshotter
442
487
}
0 commit comments