36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import replace
|
|
|
|
from host_agent.client import HostAgentEnrollmentClient
|
|
from host_agent.config import HostAgentConfig, HostAgentConfigurationError
|
|
from host_agent.identity import HostIdentityStore
|
|
|
|
|
|
def resolve_host_identity(
|
|
config: HostAgentConfig,
|
|
*,
|
|
identity_store: HostIdentityStore,
|
|
client: HostAgentEnrollmentClient,
|
|
) -> HostAgentConfig:
|
|
if config.host_id and config.token:
|
|
return config
|
|
state = identity_store.load_or_create()
|
|
if state.host_id is None:
|
|
if not config.enrollment_token:
|
|
raise HostAgentConfigurationError(
|
|
"HOST_AGENT_ENROLLMENT_TOKEN is required to complete enrollment"
|
|
)
|
|
response = client.enroll_host(
|
|
agent_instance_id=state.agent_instance_id,
|
|
host_token=state.token,
|
|
display_name=config.display_name,
|
|
)
|
|
state = identity_store.complete(state, response.host_id)
|
|
return replace(
|
|
config,
|
|
host_id=state.host_id or "",
|
|
token=state.token,
|
|
enrollment_managed=True,
|
|
)
|