@@ -913,6 +913,16 @@ class BeakerGuestData(tmt.steps.provision.GuestSshData):
913
913
Submitting user must be a submission delegate for the ``USERNAME``.
914
914
""" )
915
915
916
+ public_key : list [str ] = field (
917
+ default_factory = list ,
918
+ option = '--public-key' ,
919
+ metavar = 'PUBKEY' ,
920
+ help = """
921
+ Public keys to add among authorized SSH keys.
922
+ """ ,
923
+ multiple = True ,
924
+ normalize = tmt .utils .normalize_string_list )
925
+
916
926
917
927
@dataclasses .dataclass
918
928
class ProvisionBeakerData (BeakerGuestData , tmt .steps .provision .ProvisionStepData ):
@@ -948,6 +958,7 @@ class CreateJobParameters:
948
958
kickstart : dict [str , str ]
949
959
whiteboard : Optional [str ]
950
960
beaker_job_owner : Optional [str ]
961
+ public_key : list [str ]
951
962
group : str = 'linux'
952
963
953
964
def to_mrack (self ) -> dict [str , Any ]:
@@ -966,6 +977,8 @@ def to_mrack(self) -> dict[str, Any]:
966
977
# see kickstart if it was just metadata.
967
978
if kickstart :
968
979
data ['beaker' ]['ks_append' ] = kickstart
980
+ if self .public_key :
981
+ data ['beaker' ]['pubkeys' ] = self .public_key
969
982
970
983
return data
971
984
@@ -1077,6 +1090,7 @@ class GuestBeaker(tmt.steps.provision.GuestSsh):
1077
1090
# Timeouts and deadlines
1078
1091
provision_timeout : int
1079
1092
provision_tick : int
1093
+ public_key : list [str ]
1080
1094
api_session_refresh_tick : int
1081
1095
1082
1096
_api : Optional [BeakerAPI ] = None
@@ -1145,7 +1159,8 @@ def _create(self, tmt_name: str) -> None:
1145
1159
os = self .image ,
1146
1160
name = f'{ self .image } -{ self .arch } ' ,
1147
1161
whiteboard = self .whiteboard or tmt_name ,
1148
- beaker_job_owner = self .beaker_job_owner )
1162
+ beaker_job_owner = self .beaker_job_owner ,
1163
+ public_key = self .public_key )
1149
1164
1150
1165
try :
1151
1166
response = self .api .create (data )
0 commit comments