Assign image keyname and pubkey at vnf level
[ccsdk/apps.git] / sdnr / wireless-transport / code-Carbon-SR1 / apps / devicemanager / impl / src / main / java / org / opendaylight / mwtn / aaiConnector / impl / AaiProviderClient.java
1 package org.opendaylight.mwtn.aaiConnector.impl;
2
3 import java.util.List;
4
5 import org.opendaylight.mwtn.base.http.BaseHTTPResponse;
6 import org.opendaylight.mwtn.base.internalTypes.InventoryInformation;
7 import org.opendaylight.mwtn.base.netconf.ONFCoreNetworkElementRepresentation;
8 import org.opendaylight.mwtn.config.impl.AaiConfig;
9 import org.opendaylight.mwtn.config.impl.HtDevicemanagerConfiguration;
10 import org.opendaylight.mwtn.config.impl.HtDevicemanagerConfiguration.IConfigChangedListener;
11 import org.opendaylight.mwtn.devicemanager.impl.DeviceManagerImpl;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 public class AaiProviderClient implements AutoCloseable {
16
17         private static Logger LOG = LoggerFactory.getLogger(AaiProviderClient.class);
18         private static boolean reloadConfigFlag;
19         private AaiConfig config;
20         private DeviceManagerImpl deviceManager;
21         private HtDevicemanagerConfiguration htconfig;
22         private final IConfigChangedListener configChangedListener = new IConfigChangedListener() {
23
24                 @Override
25                 public void onConfigChanged() {
26                         reloadConfigFlag=true;
27                 }
28         };
29
30
31         public AaiConfig getConfig() {return this.config;}
32
33         private class AaiCreateRequestRunnable implements Runnable {
34
35                 private static final int RESPCODE_NOTFOUND = BaseHTTPResponse.CODE404;
36                 private static final int RESPCODE_FOUND = BaseHTTPResponse.CODE200;
37                 private final AaiWebApiClient mClient;
38                 private final String pnfId;
39                 private final String type;
40                 private final String model;
41                 private final String vendor;
42                 private final String oamIp;
43                 private final List<String> ifaces;
44                 private int timeout;
45                 public AaiCreateRequestRunnable(String pnfId, String type, String model, String vendor, String oamIp,
46                                 List<String> ifaces) {
47                         this.pnfId = pnfId;
48                         this.type = type;
49                         this.model = model;
50                         this.vendor = vendor;
51                         this.oamIp = oamIp;
52                         this.ifaces = ifaces;
53                         this.timeout=AaiProviderClient.this.config.getConnectionTimeout();
54                         this.mClient = new AaiWebApiClient(
55                                         AaiProviderClient.this.config.getBaseUrl(),
56                                         AaiProviderClient.this.config.getHeaders(),
57                                         AaiProviderClient.this.config.getTrustAll(),
58                                         AaiProviderClient.this.config.getPcks12CertificateFilename(),
59                                         AaiProviderClient.this.config.getPcks12CertificatePassphrase()
60                                         );
61                 }
62
63                 @Override
64                 public void run() {
65                         LOG.debug("check if pnfid "+pnfId+" exists");
66                         this.mClient.setTimeout(timeout);
67                         BaseHTTPResponse response=this.mClient.pnfCheckIfExists(pnfId);
68                         if(response.code==RESPCODE_NOTFOUND)
69                         {
70                                 LOG.debug("do pnfCreate for "+pnfId);
71                                 this.mClient.pnfCreate(pnfId, type, model, vendor, oamIp, ifaces);
72                         }
73                         else if(response.code==RESPCODE_FOUND)
74                         {
75                                 LOG.debug("pnfid "+pnfId+" found, nothing to do");
76                         }
77                         else
78                         {
79                                 LOG.warn("unhandled response code: "+response.toString());
80                         }
81                 }
82         };
83
84         private class AaiDeleteRequestRunnable implements Runnable {
85
86                 private final AaiWebApiClient mClient;
87                 private final String pnfId;
88                 private int timeout;
89
90
91                 public AaiDeleteRequestRunnable(String pnfId) {
92                         this.pnfId = pnfId;
93                         this.timeout=AaiProviderClient.this.config.getConnectionTimeout();
94                         this.mClient = new AaiWebApiClient(
95                                         AaiProviderClient.this.config.getBaseUrl(),
96                                         AaiProviderClient.this.config.getHeaders(),
97                                         AaiProviderClient.this.config.getTrustAll(),
98                                         AaiProviderClient.this.config.getPcks12CertificateFilename(),
99                                         AaiProviderClient.this.config.getPcks12CertificatePassphrase()
100                                         );
101                 }
102
103                 @Override
104                 public void run() {
105                         this.mClient.setTimeout(this.timeout);
106                         this.mClient.pnfDelete(pnfId);
107                 }
108         };
109
110         public AaiProviderClient(HtDevicemanagerConfiguration cfg,DeviceManagerImpl devMgr) {
111                 this.config = cfg.getAai();
112                 this.htconfig=cfg;
113                 this.htconfig.registerConfigChangedListener(configChangedListener);
114                 this.deviceManager = devMgr;
115
116         }
117
118         private void _reload()
119         {
120                 if(reloadConfigFlag)
121                 {
122                         this.config=AaiConfig.reload();
123                         LOG.info("config reloaded:"+config==null?"null":config.toString());
124                 }
125                 reloadConfigFlag=false;
126         }
127         public void onDeviceRegistered(String mountPointName) {
128                 this._reload();
129                 if(this.config.isOff())
130                         return;
131                 ONFCoreNetworkElementRepresentation ne =this.deviceManager!=null?this.deviceManager.getNeByMountpoint(mountPointName):null;
132                 this.onDeviceRegistered(mountPointName,ne!=null?ne.getInventoryInformation("MWPS"):InventoryInformation.DEFAULT);
133
134         }
135         public void onDeviceRegistered(String mountPointName,InventoryInformation i) {
136                 this._reload();
137                 if(this.config.isOff())
138                         return;
139                 new Thread(new AaiCreateRequestRunnable(mountPointName, i.getType(), i.getModel(), i.getVendor(), i.getDeviceIpv4(), i.getInterfaceUuidList())).start();
140         }
141         public void onDeviceUnregistered(String mountPointName) {
142                 this._reload();
143                 if(this.config.isOff())
144                         return;
145                 if(this.config.doDeleteOnMountPointRemoved())
146                         new Thread(new AaiDeleteRequestRunnable(mountPointName)).start();
147                 else
148                         LOG.debug("prevent deleting device "+mountPointName+" by config");
149         }
150
151         @Override
152         public void close() throws Exception {
153                 this.htconfig.unregisterConfigChangedListener(configChangedListener);
154         }
155 }