I'm conditionally (because the file may not exist) mounting the state using this snippet:
async def terraform_state(client: dagger.Client):
logger.info('Checking entries')
tf_dir = client.host().directory("terraform")
entries = await tf_dir.entries()
def add_tf_state(image: dagger.Container) -> dagger.Container:
if 'terraform.tfstate' in entries:
logger.info('Found terraform state! ')
image = image.with_file('/terraform/terraform.tfstate',
tf_dir.file("terraform.tfstate"))
return image
return add_tf_state
which I the use in a loop as:
for tf_identifier, resource_id in generate_lambda_imports():
try:
result = (
tf_image
.with_(await terraform_state(client))
.with_exec(
['-chdir=/terraform', 'import',
tf_identifier, resource_id],
)
.file("/terraform/terraform.tfstate")
)
success = await result.export("terraform/terraform.tfstate")
if result:
logger.info(
f"[green]Imported {tf_identifier} {resource_id}![/]"
)
except dagger.ExecError as err:
result = err.stderr
if 'already managed' in result:
logger.info(
f"[yellow]{tf_identifier} already imported!"
)
else:
logger.error(
f"[bold red]Caught error importing {tf_identifier}: " +
f"[/]\n {result}"
)
success = False