name
        Name of the state

    requester_vpc_id
        ID of the requesting VPC. Exclusive with requester_vpc_name.

    requester_vpc_name
        Name tag of the requesting VPC.  Exclusive with requester_vpc_id.

    peer_vpc_id
        ID of the VPC tp crete VPC peering connection with. This can be a VPC in
        another account. Exclusive with peer_vpc_name.

    peer_vpc_name
        Name tag of the VPC tp crete VPC peering connection with. This can only
        be a VPC in the same account, else resolving it into a vpc ID will fail.
        Exclusive with peer_vpc_id.

    conn_name
        The name to use for this VPC peering connection.

    peer_owner_id
        ID of the owner of the peer VPC. Defaults to your account ID, so a value
        is required if peering with a VPC in a different account.

    peer_region
        Region of peer VPC. For inter-region vpc peering connections. Not required
        for intra-region peering connections.

    region
        Region to connect to.

    key
        Secret key to be used.

    keyid
        Access key to be used.

    profile
        A dict with region, key and keyid, or a pillar key (string) that
        contains a dict with region, key and keyid.

    .. versionadded:: 2016.11.0

    Example:

    .. code-block:: yaml

        ensure peering twixt local vpc and the other guys:
          boto_vpc.vpc_peering_connection_present:
            - requester_vpc_name: my_local_vpc
            - peer_vpc_name: some_other_guys_vpc
            - conn_name: peering_from_here_to_there
            - peer_owner_id: 012345654321

def vpc_peering_connection_present(name, requester_vpc_id=None, requester_vpc_name=None,
                                   peer_vpc_id=None, peer_vpc_name=None, conn_name=None,
                                   peer_owner_id=None, peer_region=None, region=None,
                                   key=None, keyid=None, profile=None):
    '''
    name
        Name of the state

    requester_vpc_id
        ID of the requesting VPC. Exclusive with requester_vpc_name.

    requester_vpc_name
        Name tag of the requesting VPC.  Exclusive with requester_vpc_id.

    peer_vpc_id
        ID of the VPC tp crete VPC peering connection with. This can be a VPC in
        another account. Exclusive with peer_vpc_name.

    peer_vpc_name
        Name tag of the VPC tp crete VPC peering connection with. This can only
        be a VPC in the same account, else resolving it into a vpc ID will fail.
        Exclusive with peer_vpc_id.

    conn_name
        The name to use for this VPC peering connection.

    peer_owner_id
        ID of the owner of the peer VPC. Defaults to your account ID, so a value
        is required if peering with a VPC in a different account.

    peer_region
        Region of peer VPC. For inter-region vpc peering connections. Not required
        for intra-region peering connections.

    region
        Region to connect to.

    key
        Secret key to be used.

    keyid
        Access key to be used.

    profile
        A dict with region, key and keyid, or a pillar key (string) that
        contains a dict with region, key and keyid.

    .. versionadded:: 2016.11.0

    Example:

    .. code-block:: yaml

        ensure peering twixt local vpc and the other guys:
          boto_vpc.vpc_peering_connection_present:
            - requester_vpc_name: my_local_vpc
            - peer_vpc_name: some_other_guys_vpc
            - conn_name: peering_from_here_to_there
            - peer_owner_id: 012345654321


    '''
    ret = {'name': name,
           'result': True,
           'comment': '',
           'changes': {}
           }
    if __salt__['boto_vpc.is_peering_connection_pending'](conn_name=conn_name, region=region,
                                                          key=key, keyid=keyid, profile=profile):
        if __salt__['boto_vpc.peering_connection_pending_from_vpc'](conn_name=conn_name,
                                                                    vpc_id=requester_vpc_id,
                                                                    vpc_name=requester_vpc_name,
                                                                    region=region, key=key,
                                                                    keyid=keyid, profile=profile):
            ret['comment'] = ('VPC peering {0} already requested - pending '
                              'acceptance by {1}'.format(conn_name, peer_owner_id
                                                         or peer_vpc_name or peer_vpc_id))
            log.info(ret['comment'])
            return ret
        return accept_vpc_peering_connection(name=name, conn_name=conn_name,
                                             region=region, key=key, keyid=keyid,
                                             profile=profile)
    return request_vpc_peering_connection(name=name, requester_vpc_id=requester_vpc_id,
                                          requester_vpc_name=requester_vpc_name,
                                          peer_vpc_id=peer_vpc_id, peer_vpc_name=peer_vpc_name,
                                          conn_name=conn_name, peer_owner_id=peer_owner_id,
                                          peer_region=peer_region, region=region, key=key,
                                          keyid=keyid, profile=profile)