def _state_merged(self, want, have): """ The requests generator when state is merged :rtype: A list :returns: the requests necessary to merge the provided into the current configuration """ requests = [] request_patch = deepcopy(self.VLAN_PATCH) for w in want: if w.get('vlan_id'): h = search_obj_in_list(w['vlan_id'], have, 'vlan_id') if h: if dict_diff(w, h): request_body = self._update_patch_request(w) request_patch["data"]["openconfig-vlan:vlans"][ "vlan"].append(request_body) else: request_post = self._update_post_request(w) requests.append(request_post) if len(request_patch["data"]["openconfig-vlan:vlans"]["vlan"]): request_patch["data"] = json.dumps(request_patch["data"]) requests.append(request_patch) return requests
def _state_deleted(self, want, have): """ The requests generator when state is deleted :rtype: A list :returns: the requests necessary to remove the current configuration of the provided objects """ requests = [] if want: for w in want: if w.get('vlan_id'): h = search_obj_in_list(w['vlan_id'], have, 'vlan_id') if h: request_delete = self._update_delete_request(h) requests.append(request_delete) else: if not have: return requests for h in have: if h['vlan_id'] == 1: continue else: request_delete = self._update_delete_request(h) requests.append(request_delete) return requests
def _state_overridden(self, want, have): """ The request generator when state is overridden :rtype: A list :returns: the requests necessary to migrate the current configuration to the desired configuration """ requests = [] request_patch = deepcopy(self.VLAN_PATCH) have_copy = [] for w in want: if w.get('vlan_id'): h = search_obj_in_list(w['vlan_id'], have, 'vlan_id') if h: if dict_diff(w, h): request_body = self._update_patch_request(w) request_patch["data"]["openconfig-vlan:vlans"][ "vlan"].append(request_body) have_copy.append(h) else: request_post = self._update_post_request(w) requests.append(request_post) for h in have: if h not in have_copy and h['vlan_id'] != 1: request_delete = self._update_delete_request(h) requests.append(request_delete) if len(request_patch["data"]["openconfig-vlan:vlans"]["vlan"]): request_patch["data"] = json.dumps(request_patch["data"]) requests.append(request_patch) return requests
def _state_overridden(self, want, have): """ The request generator when state is overridden :rtype: A list :returns: the requests necessary to migrate the current configuration to the desired configuration """ requests = [] have_copy = [] for w in want: if w.get("name"): h = search_obj_in_list(w['name'], have, 'name') if h: have_copy.append(h) diff = dict_diff(h, w) if diff: if w.get("virtual_ports"): if h.get("virtual_ports"): existing_vports = self._compare_vports( w["virtual_ports"], h["virtual_ports"]) for vport in w["virtual_ports"]: self._compare_dedicated_ports(vport, have) if vport["name"] not in existing_vports: request_post_vport = self._update_vport_request( vport, w["name"], have) request_post_vport["data"] = json.dumps( request_post_vport["data"]) requests.append(request_post_vport) request_patch = self._update_existing_config( diff, h, w, have) requests.extend(request_patch) else: request_post = self._create_vm(w, have) requests.extend(request_post) for h in have: if h not in have_copy: if h['operational_state'] == 'started': request_stop = self._update_stop_request(h) request_stop["data"]["extreme-virtual-service:input"][ "forceful"] = str(True).lower() request_stop["data"] = json.dumps(request_stop["data"]) requests.append(request_stop) request_delete = self._update_delete_request(h) request_delete["data"] = json.dumps(request_delete["data"]) requests.append(request_delete) return requests
def _state_replaced(self, want, have): """ The request generator when state is replaced :rtype: A list :returns: the requests necessary to migrate the current configuration to the desired configuration """ requests = [] for w in want: if w.get("name"): h = search_obj_in_list(w['name'], have, 'name') if h: diff = dict_diff(h, w) if diff: if w.get("virtual_ports"): if h.get("virtual_ports"): existing_vports = self._compare_vports( w["virtual_ports"], h["virtual_ports"]) for vport in w["virtual_ports"]: self._compare_dedicated_ports(vport, have) if vport["name"] not in existing_vports: request_post_vport = self._update_vport_request( vport, w["name"], have) request_post_vport["data"] = json.dumps( request_post_vport["data"]) requests.append(request_post_vport) for vport in h["virtual_ports"]: if vport["name"] not in existing_vports: request_delete_vport = self._update_vport_delete_request( vport, w["name"]) requests.append(request_delete_vport) request_patch = self._update_existing_config( diff, h, w, have) requests.extend(request_patch) else: request_post = self._create_vm(w, have) requests.extend(request_post) return requests