Add timeouts to murano-agent calls

Now there is no way to be sure that the agent successfully started execution on a VM. Also there is no control of the execution time of scripts on agent. This process should be more controllable. It can be done by adding timeouts in Murano engine.

Problem description

  • During the agent`s work could be some problems with execution of scripts and VM may hang. In this case user will wait indefinitely without knowing what’s happend.
  • Currently there is no feedback from agent so, it`s impossible to determine whether agent is ready to accept execution plans or not.

It is proposed to provide mechanism of timeouts which solve these problems.

Proposed change

  1. First of all add timeout to method call of agent on engine-side.

Optional parameter timeout will be added to method call of class Agent in This parameter is the time in seconds with default value 600. Developer can set up custom value during developing apps for example in this way:

- $$template, $resources, 300)

If the agent plan execution time exceeds the limit, it will be terminated.

  1. Add method waitReady in Agent class.

Method will be added to Agent class in It has optional parameter timeout with default value 100. waitReady creates test plan with trivial body:

template = {'Body': 'return', 'FormatVersion': '2.0.0', 'Scripts': {}}

and sends this plan once to agent by method call. It can be uses by developer to stop deployment before sending template of app if agent is inaccessible as follows:

- $.instance.agent.waitReady()
- $$template, $resources)

If the agent test plan execution time exceeds the time limit, TimeoutException will be raised and deployment terminates. TimeoutException will be created in murano/common/

  1. Add new method isReady in Agent class.

This method will be simply call the waitReady. Method isReady returns:

  • True, if test plan is executed on time;
  • False, if the agent plan execution time exceeds the limit.
  • and raise PolicyViolationException, which will be created in murano/coommon/exceptions,py, if the agent disabled by the server.

The method can be used during development Murano-applications. For example, developer can check if the agent is running and ready to execute templates before sending the execution plan of application:

- If: $.instance.agent.isReady()
    - $$this, 'Murano Agent is ready')

The message in above example will be reported to Murano Dashboard.



Data model impact


REST API impact


Versioning impact


Other end user impact


Deployer impact


Developer impact


Murano-dashboard / Horizon impact




Primary assignee:lk

Work Items

The change is simple and can be done in one Gerrit patch. Implementation is acutally completed.




Unit and integration tests must be done.

Documentation Impact

MuranoPL specification should be updated.