使用Ansible执行Python脚本
此文是《Ansible Advent Calendar 2023》的第五篇文章。
首先
当使用Ansible通过Python命令在目标系统上执行脚本时,如果安装了多个版本的Python并且处理不按预期执行,可能会遇到问题。本次将介绍Ansible引用的Python以及在该Python中执行脚本的方法。
获取Ansible使用的Python路径
获取Ansible获取的Python路径。
- name: Gather facts from remote host
ansible.builtin.setup:
register: results
- name: Execute selenium on remote host
ansible.builtin.command:
cmd: "{{ results.ansible_facts.ansible_python.executable }} script.py"
- name: Gather facts
ansible.builtin.setup:
register: results
delegate_to: localhost
- name: Execute selenium
ansible.builtin.command:
cmd: "{{ results.ansible_facts.ansible_python.executable }} script.py"
delegate_to: localhost
你可以通过这种方法限定使用的Python版本。
使用Ansible执行Selenium的实践示例
这是一个使用 Ansible 来执行 Selenium 的样例。我们在 Ubuntu 22.04 lts 上进行了测试验证。请提前在 Ubuntu 上安装 Docker,并使用 pip 安装 ansible、docker 和 selenium。
---
- name: Create
hosts: localhost
connection: local
tasks:
- name: Setup Selenium container
community.docker.docker_container:
name: selenium
image: selenium/standalone-firefox:latest
ports:
- '4444:4444'
state: started
- name: Gather facts
ansible.builtin.setup:
register: results
- name: Execute selenium
ansible.builtin.command:
cmd: "{{ results.ansible_facts.ansible_python.executable }} selenium.py"
args:
chdir: files
changed_when: false
import os
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# Setting up headless Firefox options
options = Options()
driver = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
options=options
)
driver.get(target_url)
w = driver.execute_script("return document.body.scrollWidth;")
h = driver.execute_script("return document.body.scrollHeight;")
driver.set_window_rect(width=w, height=h)
filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "./screenshot.png")
driver.save_screenshot(filename)
driver.quit()
Selenium在远程容器中运行。在需要定期截取目标服务器屏幕截图的情况下,以及在执行Ansible playbook时需要进行UI测试的情况下,它会非常有用。
请提供一个相关网站
ansible-playbooks-mamono210/wordpress_install | GitHub これらの処理を実際に導入しているAnsible playbook のコードサンプル