如何在Ansible任务中复用Python Requests生成的HTTP Session?
Ansible 任务复用 Python Requests 的 HTTP 会话
场景:
- Web 服务登录流程复杂,涉及多次重定向,需通过 BeautifulSoup 完成表单抓取
- 已有的 Python 脚本使用 Requests 模块的 Session 存储登录成功后的 token 与 cookie,用于后续 Web 服务 API 调用
期望实现目标:
- Ansible 任务1:执行负责 Web 服务认证的 Python 脚本,将 HTTPS Session 返回给 Ansible
- Ansible 任务2~n:使用 Ansible 内置的
uri模块,复用前述获取的 HTTPS Session 调用 Web 服务 API
现有疑问:
- 暂不清楚如何在 Ansible 中高效实现该逻辑,是否适合将整套认证 Python 脚本封装为 Ansible 模块?
简化版 Python 认证脚本示例:
def main(): import requests # 为请求创建Session,所有cookie都会存储在该对象中 https_session = requests.Session() if 'page_1' not in globals(): page_1 = https_session.get( 'https://login.test.com', allow_redirects=True ) ... ... ... if 'redirect_8' not in globals(): redirect_8 = https_session.post( 'https://login.test.com/authenticate', allow_redirects=True, data = { "token": response_7['token'] } ) # 返回Cookie Jar return https_session.cookies main()
Ansible 调用示例:
- name: test1 script: login.py args: executable: python3 environment: username: "{{ input_user }}" password: "{{ input_pwd }}" ignore_errors: yes register: login_test - debug: msg: "{{ login_test }}.stdout"
Ansible 返回结果示例:
" { "results": [ { "changed": True, "rc": 0, "stdout": "<RequestsCookieJar[<Cookie TOKEN=wxyz-wxyz for .home.test.com/>, <Cookie USER_ID=123456789 for .home.test.com/>\n", "stdout_lines": [ "<RequestsCookieJar[<Cookie TOKEN=wxyz-wxyz for .home.test.com/>, <Cookie USER_ID=123456789 for .home.test.com/>, " ], "stderr": "", "stderr_lines": [], "failed": False, "ansible_loop_var": "item", } ], "skipped": False, "changed": True, "msg": "All items completed", } .stdout"
内容的提问来源于stack exchange,提问作者seafre
相关产品推荐
相关产品推荐

