Commit to master [RIFT 15737] Remove logic for deletion of folder on deletion of...
[osm/SO.git] / rwlaunchpad / plugins / rwpkgmgr / rift / tasklets / rwpkgmgr / rwpkgmgr.py
1 """
2 #
3 # Copyright 2016 RIFT.IO Inc
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #
17
18 @file rwpkgmgr.py
19 @author Varun Prasad (varun.prasad@riftio.com)
20 @date 18-Sep-2016
21
22 """
23
24 import asyncio
25
26 import gi
27 gi.require_version('RwDts', '1.0')
28 gi.require_version('RwPkgMgmtYang', '1.0')
29
30
31 from gi.repository import (
32 RwDts as rwdts,
33 RwPkgMgmtYang)
34 import rift.tasklets
35
36
37 from . import rpc
38 from .proxy import filesystem
39 from . import publisher as pkg_publisher
40 from . import subscriber
41
42 class PackageManagerTasklet(rift.tasklets.Tasklet):
43 def __init__(self, *args, **kwargs):
44 try:
45 super().__init__(*args, **kwargs)
46 self.rwlog.set_category("rw-mano-log")
47 self.endpoint_rpc = None
48 self.schema_rpc = None
49 except Exception as e:
50 self.log.exception(e)
51
52 def start(self):
53 super().start()
54
55 self.log.debug("Registering with dts")
56
57 self.dts = rift.tasklets.DTS(
58 self.tasklet_info,
59 RwPkgMgmtYang.get_schema(),
60 self.loop,
61 self.on_dts_state_change
62 )
63
64 proxy = filesystem.FileSystemProxy(self.loop, self.log)
65
66 args = [self.log, self.dts, self.loop]
67 self.job_handler = pkg_publisher.DownloadStatusPublisher(*args)
68
69 # create catalog subscribers
70 self.vnfd_catalog_sub = subscriber.VnfdStatusSubscriber(*args)
71 self.nsd_catalog_sub = subscriber.NsdStatusSubscriber(*args)
72
73 args.append(proxy)
74 self.endpoint_rpc = rpc.EndpointDiscoveryRpcHandler(*args)
75 self.schema_rpc = rpc.SchemaRpcHandler(*args)
76 self.delete_rpc = rpc.PackageDeleteOperationsRpcHandler(*args)
77
78 args.append(self.job_handler)
79 self.pkg_op = rpc.PackageOperationsRpcHandler(*args)
80
81 def stop(self):
82 try:
83 self.dts.deinit()
84 except Exception as e:
85 self.log.exception(e)
86
87 @asyncio.coroutine
88 def init(self):
89 yield from self.endpoint_rpc.register()
90 yield from self.schema_rpc.register()
91 yield from self.pkg_op.register()
92 yield from self.job_handler.register()
93 yield from self.delete_rpc.register()
94 yield from self.vnfd_catalog_sub.register()
95 yield from self.nsd_catalog_sub.register()
96
97 @asyncio.coroutine
98 def run(self):
99 pass
100
101 @asyncio.coroutine
102 def on_dts_state_change(self, state):
103 """Handle DTS state change
104
105 Take action according to current DTS state to transition application
106 into the corresponding application state
107
108 Arguments
109 state - current dts state
110
111 """
112 switch = {
113 rwdts.State.INIT: rwdts.State.REGN_COMPLETE,
114 rwdts.State.CONFIG: rwdts.State.RUN,
115 }
116
117 handlers = {
118 rwdts.State.INIT: self.init,
119 rwdts.State.RUN: self.run,
120 }
121
122 # Transition application to next state
123 handler = handlers.get(state, None)
124 if handler is not None:
125 yield from handler()
126
127 # Transition dts to next state
128 next_state = switch.get(state, None)
129 if next_state is not None:
130 self.dts.handle.set_state(next_state)