<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Oct 16, 2016 at 9:11 PM, Adrian Turjak <span dir="ltr"><<a href="mailto:adriant@catalyst.net.nz" target="_blank">adriant@catalyst.net.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The problem I'm running into is for some of our custom plugins we<br>
require the commands to run in all regions. We do this by getting the<br>
region list from keystone, and then doing the command in each region.<br>
</blockquote><div>... </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Is there a way to explicitly reinitialise the client_manager?<br>
'client_mananger.reinitialise(<wbr>)' or something as easy? Maybe even a<br>
clear cache command?<br></blockquote><div><br></div><div>There is not a way to re-init the ClientManager, and really, you don't want to do that, but you do want a new compute client for each region.  OSC sets up the ClientManager client attributes with descriptors in common/clientmanager.py get_plugin_modules().  At this point we do not have any region information, so to do that you would have to do it later, but it is simple enough to return whatever you want from your plugin's make_client().  Normally that will be a client object for the desired API, for your plugin it could be a dict of client objects keyed off region_name.  Then your consuming code would need to deref those with:</div><div><br></div><div><span style="font-size:12.8px">  for region in regions:</span><br style="font-size:12.8px"><span style="font-size:12.8px">      nova_client = self.app.client_manager.</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">compute[region]</span><br style="font-size:12.8px"><span style="font-size:12.8px">      do_something(nova_client)</span><br style="font-size:12.8px"></div><div> </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
While explicitly initialising clients isn't exactly difficult, it is<br>
something that would make more sense to simply work in the base<br>
openstackclient code as multi-region commands can and will be useful for<br>
a lot of people.<br></blockquote><div><br></div><div>Generalizing this to all of the existing plugins would be an enormous change, but doable.  We would need to think hard about how many of these things we need to handle, not just region, but cell or whatever else may be out there that a command would want to iterate on.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Not to mention adding multi-region support to some commands so you don't<br>
have to change OS_REGION_NAME or your region in clouds.yaml could be<br>
very useful. A command to list your instances across all regions could<br>
be quite useful and easy to do.<br></blockquote><div><br></div><div>It would, and would be near-trivial to do in a plugin with the clients initialized as I showed above.  Note that we currently can not reliably hook existing commands to extend them, for example to support a 'server create' that uses --ram, --vcpu and --disk in place of --flavor.  That will be discussed next week in BCN.</div><div><br></div><div>dt </div></div><div><br></div>-- <br><div class="gmail_signature"><br>Dean Troyer<br><a href="mailto:dtroyer@gmail.com" target="_blank">dtroyer@gmail.com</a><br></div>
</div></div>