def safe_accept(target, tgt_type='glob'):
    '''
    .. versionchanged:: 2017.7.0
        The ``expr_form`` argument has been renamed to ``tgt_type``, earlier
        releases must use ``expr_form``.

    Accept a minion's public key after checking the fingerprint over salt-ssh

    CLI Example:

    .. code-block:: bash

        salt-run manage.safe_accept my_minion
        salt-run manage.safe_accept minion1,minion2 tgt_type=list
    '''
    salt_key = salt.key.Key(__opts__)
    ssh_client = salt.client.ssh.client.SSHClient()

    ret = ssh_client.cmd(target, 'key.finger', tgt_type=tgt_type)

    failures = {}
    for minion, finger in six.iteritems(ret):
        if not FINGERPRINT_REGEX.match(finger):
            failures[minion] = finger
        else:
            fingerprints = salt_key.finger(minion)
            accepted = fingerprints.get('minions', {})
            pending = fingerprints.get('minions_pre', {})
            if minion in accepted:
                del ret[minion]
                continue
            elif minion not in pending:
                failures[minion] = ("Minion key {0} not found by salt-key"
                                    .format(minion))
            elif pending[minion] != finger:
                failures[minion] = ("Minion key {0} does not match the key in "
                                    "salt-key: {1}"
                                    .format(finger, pending[minion]))
            else:
                subprocess.call(["salt-key", "-qya", minion])

        if minion in failures:
            del ret[minion]

    if failures:
        print('safe_accept failed on the following minions:')
        for minion, message in six.iteritems(failures):
            print(minion)
            print('-' * len(minion))
            print(message)
            print('')

    __jid_event__.fire_event({'message': 'Accepted {0:d} keys'.format(len(ret))}, 'progress')
    return ret, failures
def safe_accept ( target , tgt_type = 'glob' ) : salt_key = salt . key . Key ( __opts__ ) ssh_client = salt . client . ssh . client . SSHClient ( ) ret = ssh_client . cmd ( target , 'key.finger' , tgt_type = tgt_type ) failures = { } for minion , finger in six . iteritems ( ret ) : if not FINGERPRINT_REGEX . match ( finger ) : failures [ minion ] = finger else : fingerprints = salt_key . finger ( minion ) accepted = fingerprints . get ( 'minions' , { } ) pending = fingerprints . get ( 'minions_pre' , { } ) if minion in accepted : del ret [ minion ] continue elif minion not in pending : failures [ minion ] = ( "Minion key {0} not found by salt-key" . format ( minion ) ) elif pending [ minion ] != finger : failures [ minion ] = ( "Minion key {0} does not match the key in " "salt-key: {1}" . format ( finger , pending [ minion ] ) ) else : subprocess . call ( [ "salt-key" , "-qya" , minion ] ) if minion in failures : del ret [ minion ] if failures : print ( 'safe_accept failed on the following minions:' ) for minion , message in six . iteritems ( failures ) : print ( minion ) print ( '-' * len ( minion ) ) print ( message ) print ( '' ) __jid_event__ . fire_event ( { 'message' : 'Accepted {0:d} keys' . format ( len ( ret ) ) } , 'progress' ) return ret , failures
.. versionchanged:: 2017.7.0
        The ``expr_form`` argument has been renamed to ``tgt_type``, earlier
        releases must use ``expr_form``.

    Accept a minion's public key after checking the fingerprint over salt-ssh

    CLI Example:

    .. code-block:: bash

        salt-run manage.safe_accept my_minion
        salt-run manage.safe_accept minion1,minion2 tgt_type=list