neoave / mrack

Multicloud use-case based multihost async provisioner for CIs and testing during development
Apache License 2.0
11 stars 14 forks source link

feat(Podman): Add possibility to run post provisioning commands #143

Closed Tiboris closed 2 years ago

Tiboris commented 2 years ago

Now there is a possibility to specify extra post provisioning commands with using 'extra_commands' section in podman config. podman: extra_commands:

Fixes: https://github.com/neoave/mrack/issues/142

Signed-off-by: Tibor Dudlák tdudlak@redhat.com

abbra commented 2 years ago

I updated abbra/mrack COPR with this patch and it breaks for me in a different place. I am using the provisioning config @Tiboris pointed me to.

$ /usr/bin/mrack -c ~/.mrack/mrack.conf up -p podman -m ~/todo/fedora-systemd/master-client.yaml 
Podman: Initializing provider
Podman: Init duration 0:00:00.000007
Provisioning started
Podman: Created requirement(s): [
    {
        "domain": "testrealm.test",
        "hostname": "master.testrealm.test",
        "image": "fedora-35",
        "name": "master.testrealm.test"
    },
    {
        "domain": "testrealm.test",
        "hostname": "client.testrealm.test",
        "image": "fedora-35",
        "name": "client.testrealm.test"
    }
]
Podman: Preparing provider resources
Podman: Preparing network(s) {'mrack-testrealm-test'}
Podman: Pulling missing images {'fedora-35'}
Podman: Pulling image 'fedora-35'. This may take a while...
Podman: Pull of image 'fedora-35' failed
Podman: Pulling of missing images failed
Podman: Validating hosts definitions
Podman: Host definitions valid
Podman: Checking available resources
Podman: Resource availability: OK
Podman: Issuing provisioning of 2 host(s)
Podman: Creating container for host: master.testrealm.test
Podman: Creating container for host: client.testrealm.test
Podman: Provisioning issued
Podman: Waiting for all hosts to be active
An unexpected exception occurred while provisioning
'str' object has no attribute 'get'
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 201, in handle
    ret_code = func(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 225, in run
    mrackcli(obj={})  # pylint: disable=no-value-for-parameter,unexpected-keyword-arg
  File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 62, in wrapper
    return loop.run_until_complete(func(*args, **kwargs))
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 122, in up
    await up_action.provision()
  File "/usr/lib/python3.9/site-packages/mrack/actions/up.py", line 106, in provision
    raise results
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 298, in provision_hosts
    success_hosts, error_hosts, _missing_reqs = await self.strategy_abort(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 353, in strategy_abort
    return await self._provision_base(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 219, in _provision_base
    host_id=response.args[SPECS].get("host_id"),
AttributeError: 'str' object has no attribute 'get'
Traceback (most recent call last):
  File "/usr/bin/mrack", line 23, in <module>
    run.run()
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 214, in handle
    raise exc
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 201, in handle
    ret_code = func(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 225, in run
    mrackcli(obj={})  # pylint: disable=no-value-for-parameter,unexpected-keyword-arg
  File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 62, in wrapper
    return loop.run_until_complete(func(*args, **kwargs))
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 122, in up
    await up_action.provision()
  File "/usr/lib/python3.9/site-packages/mrack/actions/up.py", line 106, in provision
    raise results
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 298, in provision_hosts
    success_hosts, error_hosts, _missing_reqs = await self.strategy_abort(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 353, in strategy_abort
    return await self._provision_base(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 219, in _provision_base
    host_id=response.args[SPECS].get("host_id"),
AttributeError: 'str' object has no attribute 'get'
abbra commented 2 years ago

I thought this might be because I have used an image reference that is undefined (provisioning-config.yaml only has fedora-33, not something newer) but the same issue repeatable with a proper reference as well:

$ /usr/bin/mrack -c ~/.mrack/mrack.conf up -p podman -m ~/todo/fedora-systemd/master-client.yaml 
Podman: Initializing provider
Podman: Init duration 0:00:00.000007
Provisioning started
Podman: Created requirement(s): [
    {
        "domain": "testrealm.test",
        "hostname": "master.testrealm.test",
        "image": "quay.io/neoave/snappeas:fedora-33",
        "name": "master.testrealm.test"
    },
    {
        "domain": "testrealm.test",
        "hostname": "client.testrealm.test",
        "image": "quay.io/neoave/snappeas:fedora-33",
        "name": "client.testrealm.test"
    }
]
Podman: Preparing provider resources
Podman: Preparing network(s) {'mrack-testrealm-test'}
Podman: Pulling missing images {'quay.io/neoave/snappeas:fedora-33'}
Podman: Pulling image 'quay.io/neoave/snappeas:fedora-33'. This may take a while...
Podman: Pull of image 'quay.io/neoave/snappeas:fedora-33' succeeded
Podman: All required images present
Podman: Validating hosts definitions
Podman: Host definitions valid
Podman: Checking available resources
Podman: Resource availability: OK
Podman: Issuing provisioning of 2 host(s)
Podman: Creating container for host: master.testrealm.test
Podman: Creating container for host: client.testrealm.test
Podman: Provisioning issued
Podman: Waiting for all hosts to be active
An unexpected exception occurred while provisioning
'str' object has no attribute 'get'
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 201, in handle
    ret_code = func(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 225, in run
    mrackcli(obj={})  # pylint: disable=no-value-for-parameter,unexpected-keyword-arg
  File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 62, in wrapper
    return loop.run_until_complete(func(*args, **kwargs))
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 122, in up
    await up_action.provision()
  File "/usr/lib/python3.9/site-packages/mrack/actions/up.py", line 106, in provision
    raise results
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 298, in provision_hosts
    success_hosts, error_hosts, _missing_reqs = await self.strategy_abort(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 353, in strategy_abort
    return await self._provision_base(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 219, in _provision_base
    host_id=response.args[SPECS].get("host_id"),
AttributeError: 'str' object has no attribute 'get'
Traceback (most recent call last):
  File "/usr/bin/mrack", line 23, in <module>
    run.run()
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 214, in handle
    raise exc
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 201, in handle
    ret_code = func(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 225, in run
    mrackcli(obj={})  # pylint: disable=no-value-for-parameter,unexpected-keyword-arg
  File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 62, in wrapper
    return loop.run_until_complete(func(*args, **kwargs))
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/lib/python3.9/site-packages/mrack/run.py", line 122, in up
    await up_action.provision()
  File "/usr/lib/python3.9/site-packages/mrack/actions/up.py", line 106, in provision
    raise results
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 298, in provision_hosts
    success_hosts, error_hosts, _missing_reqs = await self.strategy_abort(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 353, in strategy_abort
    return await self._provision_base(reqs)
  File "/usr/lib/python3.9/site-packages/mrack/providers/provider.py", line 219, in _provision_base
    host_id=response.args[SPECS].get("host_id"),
AttributeError: 'str' object has no attribute 'get'
Tiboris commented 2 years ago

Hello @abbra thanks to your inputs i found several issues in the code i am trying to fix in above fix commits. Could you please try if this works for you?

Tiboris commented 2 years ago

I spoke with Alexander and it helped to solve some of his issues, thus merging.