← Back to team overview

fuel-dev team mailing list archive

[Fuel] Problem with diagnostic snapshot in case of services containerization

 

Hi,

How diagnostic snapshot works right now.

* user clicks "diagnostic snapshot" button
* nailgun creates a task and sends it to orchestrator [0]
* orchestrator via mcollective runs 'execute_shell_commad' and mcollective
plugin runs `/opt/nailgun/bin/nailgun_dump` command on the master node [1]
* nailgun_dump is a part of nailgun codebase and it makes db calls to
retrieve nodes and other configs [2] [3]
* then it calls imported module shotgun, passes config and it generates
snapshot [3]

[0]
https://github.com/stackforge/fuel-web/blob/0b10ed5fae7a8b140917c6b5381e1d14a2b0e727/nailgun/nailgun/task/task.py#L652-L666
[1]
https://github.com/stackforge/fuel-web/blob/0b10ed5fae7a8b140917c6b5381e1d14a2b0e727/nailgun/nailgun/task/task.py#L652-L666
[2]
https://github.com/stackforge/fuel-web/blob/0b10ed5fae7a8b140917c6b5381e1d14a2b0e727/nailgun/nailgun/task/task.py#L626-L650
[3]
https://github.com/stackforge/fuel-web/blob/0b10ed5fae7a8b140917c6b5381e1d14a2b0e727/nailgun/nailgun/task/task.py#L724

As result nailgun and shotgun use each other's codebase, and we cannot
install mcollective and nailgun in separate containers.

How we can solve this problem

1. fast workaround, install mcollective and nailgun in a single container
2. shotgun can retrieve all necessary data via nailgun api
3. shotgun must have it's own executable endpoints and it should have
nothing in common with nailgun.
When nailgun creates task, it can send this config to orchestrator,
orchestrator can save this config into the file [4] and then execute
shotgun's endpoint and pass path to config file as a parameter.

[4]
https://github.com/stackforge/fuel-astute/blob/master/mcagents/uploadfile.rb

I like third solustion but it will take some time to refactor our code.
So, what do you think?

Thanks