3 # Copyright 2016 RIFT.IO Inc
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
19 @author Varun Prasad (varun.prasad@riftio.com)
27 gi
.require_version('RwDts', '1.0')
28 gi
.require_version('RwLaunchpadYang', '1.0')
31 from gi
.repository
import (
36 from rift
.mano
.utils
.project
import (
42 from .proxy
import filesystem
43 from . import publisher
as pkg_publisher
44 from . import subscriber
46 class PackageManagerProject(ManoProject
):
48 def __init__(self
, name
, tasklet
, **kw
):
49 super(PackageManagerProject
, self
).__init
__(tasklet
.log
, name
)
53 args
= [self
.log
, self
.dts
, self
.loop
, self
]
55 # create catalog publishers
56 self
.job_handler
= pkg_publisher
.DownloadStatusPublisher(*args
)
57 self
.copy_publisher
= pkg_publisher
.CopyStatusPublisher(*args
)
59 # create catalog subscribers
60 self
.vnfd_catalog_sub
= subscriber
.VnfdStatusSubscriber(*args
)
61 self
.nsd_catalog_sub
= subscriber
.NsdStatusSubscriber(*args
)
64 self
.copy_rpc
= rpc
.PackageCopyOperationsRpcHandler(*(args
+ [self
.copy_publisher
]))
69 yield from self
.vnfd_catalog_sub
.register()
70 yield from self
.nsd_catalog_sub
.register()
71 yield from self
.copy_rpc
.register()
72 yield from self
.copy_publisher
.register()
73 yield from self
.job_handler
.register()
74 except Exception as e
:
75 self
.log
.exception("Exception registering project {}: {}".
78 def deregister (self
):
79 self
.job_handler
.deregister()
80 self
.copy_rpc
.deregister()
81 self
.copy_publisher
.deregister()
82 self
.vnfd_catalog_sub
.deregister()
83 self
.nsd_catalog_sub
.deregister()
86 class PackageManagerTasklet(rift
.tasklets
.Tasklet
):
87 def __init__(self
, *args
, **kwargs
):
89 super().__init
__(*args
, **kwargs
)
90 self
.rwlog
.set_category("rw-mano-log")
91 self
.endpoint_rpc
= None
92 self
.schema_rpc
= None
94 self
._project
_handler
= None
97 except Exception as e
:
102 self
.log
.debug("Registering with dts")
107 self
.dts
= rift
.tasklets
.DTS(
109 RwLaunchpadYang
.get_schema(),
111 self
.on_dts_state_change
114 proxy
= filesystem
.FileSystemProxy(self
.loop
, self
.log
, self
.dts
)
115 args
= [self
.log
, self
.dts
, self
.loop
]
118 self
.endpoint_rpc
= rpc
.EndpointDiscoveryRpcHandler(*args
)
119 self
.schema_rpc
= rpc
.SchemaRpcHandler(*args
)
120 self
.delete_rpc
= rpc
.PackageDeleteOperationsRpcHandler(*args
)
123 self
.pkg_op
= rpc
.PackageOperationsRpcHandler(*args
)
125 self
.project_handler
= ProjectHandler(self
, PackageManagerProject
,
127 except Exception as e
:
128 self
.log
.exception("Exception caught rwpkgmgr start: %s", str(e
))
130 self
.log
.debug("rwpkgmgr started successfully!")
135 except Exception as e
:
136 self
.log
.exception(e
)
141 yield from self
.endpoint_rpc
.register()
142 yield from self
.schema_rpc
.register()
143 yield from self
.pkg_op
.register()
144 yield from self
.delete_rpc
.register()
146 self
.log
.debug("creating project handler")
147 self
.project_handler
.register()
148 except Exception as e
:
149 self
.log
.error("Exception caught rwpkgmgr init %s", str(e
))
156 def on_dts_state_change(self
, state
):
157 """Handle DTS state change
159 Take action according to current DTS state to transition application
160 into the corresponding application state
163 state - current dts state
167 rwdts
.State
.INIT
: rwdts
.State
.REGN_COMPLETE
,
168 rwdts
.State
.CONFIG
: rwdts
.State
.RUN
,
172 rwdts
.State
.INIT
: self
.init
,
173 rwdts
.State
.RUN
: self
.run
,
176 # Transition application to next state
177 handler
= handlers
.get(state
, None)
178 if handler
is not None:
181 # Transition dts to next state
182 next_state
= switch
.get(state
, None)
183 if next_state
is not None:
184 self
.dts
.handle
.set_state(next_state
)