Exemple #1
0
    def _state_deleted(self, want, have):
        """The command generator when state is deleted

        :rtype: A list
        :returns: the commands necessary to remove the current configuration
                  of the provided objects
        """
        commands = []

        for key, value in iteritems(
                flatten_dict(dict_delete(have, remove_empties(want))), ):
            commands.append(self._compute_commands(key, value, remove=True))

        if commands:
            pad_commands(commands, have["name"])

        return commands
Exemple #2
0
    def _state_merged(self, want, have):
        """ The command generator when state is merged

        :rtype: A list
        :returns: the commands necessary to merge the provided into
                  the current configuration
        """
        commands = []
        if not have:
            have = {"name": want["name"]}

        for key, value in iteritems(
                flatten_dict(remove_empties(dict_diff(have, want)))):
            commands.append(self._compute_commands(key, value))

        if commands:
            pad_commands(commands, want["name"])

        return commands
Exemple #3
0
    def _state_replaced(self, want, have):
        """ The command generator when state is replaced

        :rtype: A list
        :returns: the commands necessary to migrate the current configuration
                  to the desired configuration
        """
        commands = []
        if have:
            commands.extend(self._render_bundle_del_commands(want, have))
        commands.extend(self._render_bundle_updates(want, have))

        if commands or have == {}:
            pad_commands(commands, want["name"])

        if have:
            commands.extend(self._render_interface_del_commands(want, have))
        commands.extend(self._render_interface_updates(want, have))

        return commands
Exemple #4
0
    def _render_interface_del_commands(self, want, have):
        """ The command generator for delete commands
            w.r.t member interfaces
        :rtype: A list
        :returns: the commands necessary to update member
                  interfaces
        """
        commands = []
        if not want:
            want = {}
        have_members = have.get('members')

        if have_members:
            have_members = param_list_to_dict(deepcopy(have_members), unique_key='member')
            want_members = param_list_to_dict(deepcopy(want).get('members', []), unique_key='member')

            for key in have_members:
                if key not in want_members:
                    member_cmd = ['no bundle id']
                    pad_commands(member_cmd, key)
                    commands.extend(member_cmd)

        return commands
Exemple #5
0
    def _state_merged(self, want, have):
        """ The command generator when state is merged

        :rtype: A list
        :returns: the commands necessary to merge the provided into
                  the current configuration
        """
        commands = []

        want = remove_empties(want)

        for want_afi in want.get('access_groups', []):
            have_afi = search_obj_in_list(want_afi['afi'],
                                          have.get('access_groups', []),
                                          key='afi') or {}
            delta = diff_list_of_dicts(want_afi['acls'],
                                       have_afi.get('acls', []),
                                       key='direction')
            commands.extend(self._compute_commands(want_afi['afi'], delta))

        if commands:
            pad_commands(commands, want['name'])

        return commands