我正在使用Paramiko的SFTPClient class编写Ansible模块.我有以下代码片段
import paramiko
from ansible.module_utils.basic import *
def get_sftp_client(host, port, user, password):
# Open a transport
transport = paramiko.Transport((host,port))
# Auth
transport.connect(None,user,password)
# Get a client object
sftp = paramiko.SFTPClient.from_transport(transport)
return (transport, sftp)
def transfer_file(params):
has_changed = False
meta = {"upload": "not yet implemented"}
user = params['user']
password = params['password']
host = params['host']
port = params['port']
direction = params['direction']
src = params['src']
dest = params['dest']
transport, sftp = get_sftp_client(host, port, user, password)
stdout = None
stderr = None
if direction == 'download':
sftp.get(src, dest)
else:
sftp.put(src, dest)
meta = {
"source": src,
"destination": dest,
"direction": direction,
"stdout": stdout,
"stderr": stderr
}
# Close
if sftp: sftp.close()
if transport: transport.close()
return (has_changed, meta)
def main():
fields = {
"user": {"required": True, "type": "str"},
"password": {"required": True, "type": "str", "no_log": True},
"host": {"required": True, "type": "str"},
"port": {"type": "int", "default": 22},
"direction": {
"type": "str",
"choices": ["upload", "download"],
"default": "upload",
},
"src": {"type": "path", "required": True},
"dest": {"type": "path", "required": True},
}
module = AnsibleModule(argument_spec=fields)
# Do the work
has_changed, result = transfer_file(module.params)
module.exit_json(changed=has_changed, meta=result)
if __name__ == '__main__':
main()
如何捕获get()
和put()
函数的通过/失败结果?文档没有提到get()
的返回值,而put()
的返回值是SFTPAttribute
类,这是我不需要的.我只想知道事务是通过了还是失败了,如果失败了,就会得到错误.谢谢.