<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def vlan_pvlan_association_add(self, **kwargs):
 """Add a secondary PVLAN to a primary PVLAN. Args: name (str):
 VLAN number (1-4094). sec_vlan (str):
 The secondary PVLAN. callback (function):
 A function executed upon completion of the method. The only parameter passed to `callback` will be the ``ElementTree`` `config`. Returns: Return value of `callback`. Raises: KeyError: if `name` or `sec_vlan` is not specified. ValueError: if `name` or `sec_vlan` is invalid. Examples: Traceback (most recent call last):
 KeyError """

        name = kwargs.pop('name')
        sec_vlan = kwargs.pop('sec_vlan')
        callback = kwargs.pop('callback', self._callback)

        if not pynos.utilities.valid_vlan_id(name):
            raise InvalidVlanId("Incorrect name value.")
        if not pynos.utilities.valid_vlan_id(sec_vlan):
            raise InvalidVlanId("`sec_vlan` must be between `1` and `8191`.")

        pvlan_args = dict(name=name, sec_assoc_add=sec_vlan)
        pvlan_assoc = getattr(self._interface,
                              'interface_vlan_interface_vlan_'
                              'private_vlan_association_sec_assoc_add')
        config = pvlan_assoc(**pvlan_args)
        return callback(config)