зеркало из https://github.com/microsoft/lisa.git
Remove repo installer
This commit is contained in:
Родитель
6210604aa5
Коммит
fd10d583d2
|
@ -15,22 +15,26 @@ from lisa.util.logger import Logger, get_logger
|
||||||
@dataclass_json()
|
@dataclass_json()
|
||||||
@dataclass
|
@dataclass
|
||||||
class UpgradeInstallerSchema(schema.TypedSchema, schema.ExtendableSchemaMixin):
|
class UpgradeInstallerSchema(schema.TypedSchema, schema.ExtendableSchemaMixin):
|
||||||
...
|
repo_url: str = field(
|
||||||
|
default="http://azure.archive.ubuntu.com/ubuntu/",
|
||||||
|
metadata=field_metadata(required=True),
|
||||||
|
)
|
||||||
|
|
||||||
|
proposed: bool = field(
|
||||||
|
default=True,
|
||||||
|
metadata=field_metadata(required=True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass_json
|
@dataclass_json
|
||||||
@dataclass
|
@dataclass
|
||||||
class UpgradeInstallerTransformerSchema(schema.Transformer):
|
class UpgradeTransformerSchema(schema.Transformer):
|
||||||
# SSH connection information to the node
|
# SSH connection information to the node
|
||||||
connection: Optional[schema.RemoteNode] = field(
|
connection: Optional[schema.RemoteNode] = field(
|
||||||
default=None, metadata=field_metadata(required=True)
|
default=None, metadata=field_metadata(required=True)
|
||||||
)
|
)
|
||||||
repo_updater: Optional[UpgradeInstallerSchema] = field(
|
|
||||||
default=None, metadata=field_metadata(required=False)
|
|
||||||
)
|
|
||||||
# installer's parameters.
|
|
||||||
installer: Optional[UpgradeInstallerSchema] = field(
|
installer: Optional[UpgradeInstallerSchema] = field(
|
||||||
default=None, metadata=field_metadata(required=False)
|
default=None, metadata=field_metadata(required=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,21 +58,21 @@ class UpgradeInstaller(subclasses.BaseClassWithRunbookMixin):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
|
||||||
class UpgradeInstallerTransformer(Transformer):
|
class UpgradeTransformer(Transformer):
|
||||||
@classmethod
|
@classmethod
|
||||||
def type_name(cls) -> str:
|
def type_name(cls) -> str:
|
||||||
return "upgrade_installer"
|
return "upgrade"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def type_schema(cls) -> Type[schema.TypedSchema]:
|
def type_schema(cls) -> Type[schema.TypedSchema]:
|
||||||
return UpgradeInstallerTransformerSchema
|
return UpgradeTransformerSchema
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _output_names(self) -> List[str]:
|
def _output_names(self) -> List[str]:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def _internal_run(self) -> Dict[str, Any]:
|
def _internal_run(self) -> Dict[str, Any]:
|
||||||
runbook: UpgradeInstallerTransformerSchema = self.runbook
|
runbook: UpgradeTransformerSchema = self.runbook
|
||||||
assert runbook.connection, "connection must be defined."
|
assert runbook.connection, "connection must be defined."
|
||||||
assert runbook.installer, "installer must be defined."
|
assert runbook.installer, "installer must be defined."
|
||||||
|
|
||||||
|
@ -79,19 +83,12 @@ class UpgradeInstallerTransformer(Transformer):
|
||||||
f"kernel version before install: {uname.get_linux_information()}"
|
f"kernel version before install: {uname.get_linux_information()}"
|
||||||
)
|
)
|
||||||
factory = subclasses.Factory[UpgradeInstaller](UpgradeInstaller)
|
factory = subclasses.Factory[UpgradeInstaller](UpgradeInstaller)
|
||||||
if runbook.repo_updater:
|
|
||||||
repo_updater = factory.create_by_runbook(
|
|
||||||
runbook=runbook.repo_updater, node=node, parent_log=self._log
|
|
||||||
)
|
|
||||||
repo_updater.validate()
|
|
||||||
repo_updater.install()
|
|
||||||
|
|
||||||
if runbook.installer:
|
installer = factory.create_by_runbook(
|
||||||
installer = factory.create_by_runbook(
|
runbook=runbook.installer, node=node, parent_log=self._log
|
||||||
runbook=runbook.installer, node=node, parent_log=self._log
|
)
|
||||||
)
|
installer.validate()
|
||||||
installer.validate()
|
installer.install()
|
||||||
installer.install()
|
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
@ -122,6 +119,31 @@ class UnattendedUpgradeInstaller(UpgradeInstaller):
|
||||||
)
|
)
|
||||||
|
|
||||||
def install(self) -> None:
|
def install(self) -> None:
|
||||||
|
self._update_repo()
|
||||||
|
self._update_packages()
|
||||||
|
|
||||||
|
def _update_repo(self) -> None:
|
||||||
|
node: Node = self._node
|
||||||
|
runbook: UpgradeInstallerSchema = self.runbook
|
||||||
|
repo_url = runbook.repo_url
|
||||||
|
assert isinstance(node.os, Ubuntu)
|
||||||
|
release = node.os.information.codename
|
||||||
|
|
||||||
|
assert (
|
||||||
|
release
|
||||||
|
), f"cannot find codename from the os version: {node.os.information}"
|
||||||
|
|
||||||
|
if runbook.proposed:
|
||||||
|
version_name = f"{release}-proposed"
|
||||||
|
else:
|
||||||
|
version_name = release
|
||||||
|
|
||||||
|
repo_entry = (
|
||||||
|
f"deb {repo_url} {version_name} " f"restricted main multiverse universe"
|
||||||
|
)
|
||||||
|
node.os.add_repository(repo_entry)
|
||||||
|
|
||||||
|
def _update_packages(self) -> None:
|
||||||
node: Node = self._node
|
node: Node = self._node
|
||||||
assert isinstance(node.os, Debian)
|
assert isinstance(node.os, Debian)
|
||||||
|
|
||||||
|
@ -169,47 +191,3 @@ class UnattendedUpgradeInstaller(UpgradeInstaller):
|
||||||
)
|
)
|
||||||
|
|
||||||
self._log.debug(f"Packages updated: {result.stdout}")
|
self._log.debug(f"Packages updated: {result.stdout}")
|
||||||
|
|
||||||
|
|
||||||
class AddProposedRepoInstaller(UpgradeInstaller):
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
runbook: Any,
|
|
||||||
node: Node,
|
|
||||||
parent_log: Logger,
|
|
||||||
*args: Any,
|
|
||||||
**kwargs: Any,
|
|
||||||
) -> None:
|
|
||||||
super().__init__(runbook, node, parent_log, *args, **kwargs)
|
|
||||||
self.repo_url = "http://azure.archive.ubuntu.com/ubuntu/"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def type_name(cls) -> str:
|
|
||||||
return "add_proposed_repo"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def type_schema(cls) -> Type[schema.TypedSchema]:
|
|
||||||
return UpgradeInstallerSchema
|
|
||||||
|
|
||||||
def validate(self) -> None:
|
|
||||||
assert isinstance(self._node.os, Ubuntu), (
|
|
||||||
f"The '{self.type_name()}' installer only supports Ubuntu family. "
|
|
||||||
f"The current os is {self._node.os.name}"
|
|
||||||
)
|
|
||||||
|
|
||||||
def install(self) -> None:
|
|
||||||
node: Node = self._node
|
|
||||||
assert isinstance(node.os, Ubuntu)
|
|
||||||
release = node.os.information.codename
|
|
||||||
|
|
||||||
assert (
|
|
||||||
release
|
|
||||||
), f"cannot find codename from the os version: {node.os.information}"
|
|
||||||
|
|
||||||
version_name = f"{release}-proposed"
|
|
||||||
|
|
||||||
repo_entry = (
|
|
||||||
f"deb {self.repo_url} {version_name} "
|
|
||||||
f"restricted main multiverse universe"
|
|
||||||
)
|
|
||||||
node.os.add_repository(repo_entry)
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче