YannickB / odoo-hosting

Other
64 stars 50 forks source link

[DEBUG] Debug oneclick engine mode #208

Closed YannickB closed 7 years ago

YannickB commented 7 years ago

Hello guys,

Finished my test on the oneclick : with this PR THE ONECLICK WORKS IN ENGINE MODE! We correctly get a working Odoo instance after the end of the deployment, please feel free to test it.

We still have the problem in swarm mode with bind because of port 53 not correctly exposed in UDP, but the engine mode works now like it works in 0.9.0.

Enjoy :)

codecov-io commented 7 years ago

Current coverage is 31.44% (diff: 13.63%)

Merging #208 into master will decrease coverage by 0.07%

@@             master       #208   diff @@
==========================================
  Files            73         73          
  Lines          5723       5747    +24   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits           1804       1807     +3   
- Misses         3919       3940    +21   
  Partials          0          0          

Powered by Codecov. Last update 2ae5aa3...6cf5c54

lasley commented 7 years ago

Hrmm I'm getting a singleton error (traceback at bottom). Following are my steps:

If I switch to master, restart odoo, then click deploy again - positive result (until the connection refused that we know about).

Traceback (most recent call last):
  File "/opt/odoo/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/addons/web/controllers/main.py", line 866, in call_button
    action = self._call_kw(model, method, args, {})
  File "/opt/odoo/addons/web/controllers/main.py", line 854, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo/api.py", line 681, in call_kw
    return call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo/odoo/api.py", line 672, in call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/media/sf_Repos/clouder/clouder/models/node.py", line 537, in oneclick_deploy
    self.do('oneclick_deploy', 'oneclick_deploy_exec')
  File "/media/sf_Repos/clouder/clouder/models/node.py", line 354, in do
    return super(ClouderNode, self).do(name, action, where=where)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 335, in do
    getattr(self, 'do_exec')(action, job_id)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()
  File "/media/sf_Repos/clouder/clouder_template_odoo/oneclick.py", line 39, in oneclick_deploy_exec
    super(ClouderNode, self).oneclick_deploy_exec()
  File "/media/sf_Repos/clouder/clouder_template_gitlab/oneclick.py", line 44, in oneclick_deploy_exec
    bind = self.oneclick_deploy_element('service', 'bind', ports=[53])
  File "/media/sf_Repos/clouder/clouder/models/node.py", line 495, in oneclick_deploy_element
    'application_id': application.id,
  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/template.py", line 84, in create
    return super(ClouderService, self).create(vals)
  File "/media/sf_Repos/clouder/clouder/models/service.py", line 984, in create
    res = super(ClouderService, self).create(vals)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 434, in create
    res.do('create', 'deploy_frame')
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 335, in do
    getattr(self, 'do_exec')(action, job_id)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 362, in deploy_frame
    self.deploy()
  File "/media/sf_Repos/clouder/clouder/clouder_template_salt/template.py", line 175, in deploy
    super(ClouderService, self).deploy()
  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1366, in deploy
    child.create_child_exec()
  File "/media/sf_Repos/clouder/clouder/models/service_child.py", line 64, in create_child_exec
    'node_id': self.node_id.id or service.node_id.id
  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/template.py", line 84, in create
    return super(ClouderService, self).create(vals)
  File "/media/sf_Repos/clouder/clouder/models/service.py", line 984, in create
    res = super(ClouderService, self).create(vals)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 434, in create
    res.do('create', 'deploy_frame')
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 335, in do
    getattr(self, 'do_exec')(action, job_id)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 365, in deploy_frame
    self.purge()
  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1437, in purge
    self.hook_purge_one()
  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/runner.py", line 445, in hook_purge_one
    self.name + '-' + volume.name])
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 595, in execute
    ssh = self.connect(node_name, username=username)
  File "/media/sf_Repos/clouder/clouder/models/model.py", line 476, in connect
    self.ensure_one()
  File "/opt/odoo/odoo/models.py", line 4789, in ensure_one
    raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: clouder.node()
YannickB commented 7 years ago

Hum I'm trying to understand what's your error, I never met this one before.

It's seems to happen while trying to create the bind service, probably while trying to deploy data or exec bind https://github.com/clouder-community/clouder/blob/master/clouder/models/service_child.py#L64. I can't understand how the node can be null...

lasley commented 7 years ago

Yeah I was confused too, so I even blasted the database and started fresh just to make sure.

You're right that it's in bind. Looks like maybe the container creation has failed? Here's the full log output from the bind job fail - maybe clues:

2017-01-20 19:31:08 : connect: ssh dev.dev
2017-01-20 19:31:08 : 
2017-01-20 19:31:08 : host : 192.168.69.108
2017-01-20 19:31:08 : command : docker stop dev-bind-data
2017-01-20 19:31:09 : stderr : Error response from daemon: No such container: dev-bind-data
2017-01-20 19:31:09 : connect: ssh dev.dev
2017-01-20 19:31:09 : 
2017-01-20 19:31:09 : host : 192.168.69.108
2017-01-20 19:31:09 : command : docker rm -v dev-bind-data
2017-01-20 19:31:09 : stderr : Error response from daemon: No such container: dev-bind-data
2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : FAIL! Reverting...
2017-01-20 19:31:09 :   File "/media/sf_Repos/clouder/clouder/models/model.py", line 362, in deploy_frame
    self.deploy()

  File "/media/sf_Repos/clouder/clouder/clouder_template_salt/template.py", line 175, in deploy
    super(ClouderService, self).deploy()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1359, in deploy
    super(ClouderService, self).deploy()

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 375, in deploy
    self.purge()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1437, in purge
    self.hook_purge_one()

  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/runner.py", line 445, in hook_purge_one
    self.name + '-' + volume.name])

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 595, in execute
    ssh = self.connect(node_name, username=username)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 476, in connect
    self.ensure_one()

  File "/opt/odoo/odoo/models.py", line 4789, in ensure_one
    raise ValueError("Expected singleton: %s" % self)

2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : connect: ssh dev.dev
2017-01-20 19:31:09 : 
2017-01-20 19:31:09 : host : 192.168.69.108
2017-01-20 19:31:09 : command : docker stop dev-bind-data
2017-01-20 19:31:09 : stderr : Error response from daemon: No such container: dev-bind-data
2017-01-20 19:31:09 : connect: ssh dev.dev
2017-01-20 19:31:09 : 
2017-01-20 19:31:09 : host : 192.168.69.108
2017-01-20 19:31:09 : command : docker rm -v dev-bind-data
2017-01-20 19:31:09 : stderr : Error response from daemon: No such container: dev-bind-data
2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : FAIL!
2017-01-20 19:31:09 :   File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 365, in deploy_frame
    self.purge()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1437, in purge
    self.hook_purge_one()

  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/runner.py", line 445, in hook_purge_one
    self.name + '-' + volume.name])

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 595, in execute
    ssh = self.connect(node_name, username=username)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 476, in connect
    self.ensure_one()

  File "/opt/odoo/odoo/models.py", line 4789, in ensure_one
    raise ValueError("Expected singleton: %s" % self)

2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : FAIL! Reverting...
2017-01-20 19:31:09 :   File "/media/sf_Repos/clouder/clouder/models/model.py", line 362, in deploy_frame
    self.deploy()

  File "/media/sf_Repos/clouder/clouder/clouder_template_salt/template.py", line 175, in deploy
    super(ClouderService, self).deploy()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1366, in deploy
    child.create_child_exec()

  File "/media/sf_Repos/clouder/clouder/models/service_child.py", line 64, in create_child_exec
    'node_id': self.node_id.id or service.node_id.id

  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/template.py", line 84, in create
    return super(ClouderService, self).create(vals)

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 984, in create
    res = super(ClouderService, self).create(vals)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 434, in create
    res.do('create', 'deploy_frame')

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 335, in do
    getattr(self, 'do_exec')(action, job_id)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 365, in deploy_frame
    self.purge()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1437, in purge
    self.hook_purge_one()

  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/runner.py", line 445, in hook_purge_one
    self.name + '-' + volume.name])

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 595, in execute
    ssh = self.connect(node_name, username=username)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 476, in connect
    self.ensure_one()

  File "/opt/odoo/odoo/models.py", line 4789, in ensure_one
    raise ValueError("Expected singleton: %s" % self)

2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : This service shall not be backupd or the backup isnt configured in conf, skipping backup service
2017-01-20 19:31:09 : connect: ssh dev.dev
2017-01-20 19:31:09 : 
2017-01-20 19:31:09 : host : 192.168.69.108
2017-01-20 19:31:09 : command : docker stop dev-bind-data
2017-01-20 19:31:09 : stderr : Error response from daemon: No such container: dev-bind-data
2017-01-20 19:31:09 : connect: ssh dev.dev
2017-01-20 19:31:09 : 
2017-01-20 19:31:09 : host : 192.168.69.108
2017-01-20 19:31:09 : command : docker rm -v dev-bind-data
2017-01-20 19:31:09 : stderr : Error response from daemon: No such container: dev-bind-data
2017-01-20 19:31:09 : ===================
2017-01-20 19:31:09 : FAIL!
2017-01-20 19:31:09 :   File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 362, in deploy_frame
    self.deploy()

  File "/media/sf_Repos/clouder/clouder/clouder_template_salt/template.py", line 175, in deploy
    super(ClouderService, self).deploy()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1366, in deploy
    child.create_child_exec()

  File "/media/sf_Repos/clouder/clouder/models/service_child.py", line 64, in create_child_exec
    'node_id': self.node_id.id or service.node_id.id

  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/template.py", line 84, in create
    return super(ClouderService, self).create(vals)

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 984, in create
    res = super(ClouderService, self).create(vals)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 434, in create
    res.do('create', 'deploy_frame')

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 335, in do
    getattr(self, 'do_exec')(action, job_id)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 349, in do_exec
    getattr(self, action)()

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 365, in deploy_frame
    self.purge()

  File "/media/sf_Repos/clouder/clouder/models/service.py", line 1437, in purge
    self.hook_purge_one()

  File "/media/sf_Repos/clouder/clouder/clouder_runner_docker/runner.py", line 445, in hook_purge_one
    self.name + '-' + volume.name])

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 595, in execute
    ssh = self.connect(node_name, username=username)

  File "/media/sf_Repos/clouder/clouder/models/model.py", line 476, in connect
    self.ensure_one()

  File "/opt/odoo/odoo/models.py", line 4789, in ensure_one
    raise ValueError("Expected singleton: %s" % self)

2017-01-20 19:31:09 : ===================
YannickB commented 7 years ago

Maybe an error when we create a new node, my own node is configured since a long time now. Gonna create a new one and test.

lasley commented 7 years ago

Mine was actually a working node before I blasted the DB. I did run a purge first if that matters?

YannickB commented 7 years ago

Interesting, I just created server1 (was working) and server2 (created now). When I launch oneclick on server2, it try to deploy on server1.

Will try to fix it, to me the problem seems to be in connection anyway.

lasley commented 7 years ago

Hahah sounds like I may have accidentally implemented a new node aggregation feature with the SSHEnvironment! Admittedly I only tried against multiple connections on the same node.

YannickB commented 7 years ago

Yeah, sound like it :(

lasley commented 7 years ago

I can handle that if you'd like seeing as I was the one that introduced it.

I don't think that's what's causing this though, do you?

YannickB commented 7 years ago

Well I'd appreciate the help here :/, still don't really checked the code of SSHEnvironnement. I am looking at it on my side too.

YannickB commented 7 years ago

I do want to make the oneclick work on your server, it should now :/

YannickB commented 7 years ago

OK. I think I got it, and looks like the cause of both our errors. Commit soon.

YannickB commented 7 years ago

Ok, you can retry I think. It was a typo, I reused a code for swarm without adapting it for engine

lasley commented 7 years ago

Success!

looks like the cause of both our errors

So SSHEnvironment wasn't the cause? Hooray! I was really stumped on that TBH 😆

YannickB commented 7 years ago

Yeah! Merging :)