Example #1
0
    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
Example #2
0
    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
Example #3
0
    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