Use stevedore for handlers

Change-Id: Icfb5e3c2c5062bc646303ffc268b8c102073cea3
This commit is contained in:
Jedrzej Nowak 2016-01-12 10:25:39 +01:00
parent c922e90c18
commit 5d9561327c
2 changed files with 23 additions and 22 deletions

View File

@ -39,3 +39,13 @@ solar.transports.sync =
rsync = solar.core.transports.rsync:RsyncSyncTransport
solar_agent = solar.core.transports.solar_agent_transport:SolarAgentSyncTransport
torrent = solar.core.transports.torrent:TorrentSyncTransport
solar.handlers =
ansible = solar.core.handlers.ansible_template:AnsibleTemplate
ansible_local = solar.core.handlers.ansible_template_local:AnsibleTemplateLocal
ansible_playbook = solar.core.handlers.ansible_playbook:AnsiblePlaybook
ansible_playbook_local = solar.core.handlers.ansible_playbook_local:AnsiblePlaybookLocal
shell = solar.core.handlers.shell:Shell
puppet = solar.core.handlers.puppet:Puppet
none = solar.core.handlers.base:Empty
puppetv2 = solar.core.handlers.puppet:PuppetV2
naive_sync = solar.core.handlers.naive_sync:NaiveSync

View File

@ -13,29 +13,20 @@
# License for the specific language governing permissions and limitations
# under the License.
from solar.core.handlers.ansible_template import AnsibleTemplate
from solar.core.handlers.ansible_template_local import AnsibleTemplateLocal
from solar.core.handlers.ansible_playbook import AnsiblePlaybook
from solar.core.handlers.ansible_playbook_local import AnsiblePlaybookLocal
from solar.core.handlers.base import Empty
from solar.core.handlers.puppet import Puppet, PuppetV2
from solar.core.handlers.shell import Shell
from solar.core.handlers.naive_sync import NaiveSync
from stevedore import driver
from threading import RLock
HANDLERS = {'ansible': AnsibleTemplate,
'ansible_playbook': AnsiblePlaybook,
'ansible_local': AnsibleTemplateLocal,
'ansible_playbook_local': AnsiblePlaybookLocal,
'shell': Shell,
'puppet': Puppet,
'none': Empty,
'puppetv2': PuppetV2,
'naive_sync': NaiveSync}
_lock = RLock()
_handlers = {}
def get(handler_name):
handler = HANDLERS.get(handler_name, None)
if handler:
return handler
raise Exception('Handler {0} does not exist'.format(handler_name))
with _lock:
if handler_name not in _handlers:
handler = driver.DriverManager(namespace='solar.handlers',
name=handler_name,
invoke_on_load=False).driver
_handlers[handler_name] = handler
else:
handler = _handlers[handler_name]
return handler