【问题标题】:Ansible ec2: "boto required for this module"Ansible ec2:“此模块需要 boto”
【发布时间】:2021-12-23 06:43:01
【问题描述】:

当我运行这个简单的 Ansible 剧本时:

- name: EC2 Test Example
  hosts: localhost
  connection: local
  gather_facts: False

  tasks:
  - name: EC2 Instance
    ec2:
      # Amazon EC2 key pair name
      key_name: my-key-pair
      # Amazon EC2 Security Group
      group: my-security-group
      instance_type: t2.micro
      # Latest from https://wiki.debian.org/Cloud/AmazonEC2Image/Jessie
      image: ami-221ea342
      wait: yes
    register: ec2

我使用venv/bin/ansible-playbook -i localhost, playbook.yml 运行:

PLAY [EC2 Test Example] ********************************************************

TASK [EC2 Instance] ************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}
    to retry, use: --limit @/Users/admin/temp/ansec2/playbook.retry

PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1

很明显,我已经在我正在使用的 venv 以及我的默认系统 Python 中安装了 boto:

➜  ansec2 venv/bin/pip list
Package         Version 
--------------- --------
ansible         2.2.1.0 
boto            2.45.0  
boto3           1.4.4   
botocore        1.5.4   
...

我已经阅读了一些类似的帖子,但没有看到可行的解决方案。

【问题讨论】:

  • 你不再需要这个-i localhost, hack了。你确定有必要吗?啊啊啊!!!这就是你的问题的根本原因。

标签: ansible boto


【解决方案1】:

问题的根本原因是-i localhost, hack。您不再需要在 Ansible 中使用它。

你可以运行:

ansible-playbook playbook.yml

并且在剧中加上connection: local,Ansible 将使用 venv 设置的 Python 可执行文件。


当您使用-i localhost, hack 时,Ansible 调用其默认的/usr/bin/python

在这种情况下,您仍然可以添加 ansible_python_interpreter 参数来告诉 Ansible 使用这个特定的环境:

ansible-playbook -i localhost, playbook.yml --extra-vars "ansible_python_interpreter=/Users/admin/temp/ansec2/venv/bin/python" 

但我认为你应该避免它并使用第一种方法。

【讨论】:

  • ansible localhost -a "which python"
  • 同时运行ansible-playbook-vvv,你会看到一行EXEC /bin/sh -c ' .../bin/python ... - 路径是什么?
  • 激活venv,ansible localhost -a "which python"指向venv python ~/temp/ansec2/venv/bin/python,使用-vvvansible-playbook显示EXEC /bin/sh -c '/usr/bin/python。因此,ansible 在激活时似乎没有使用 virtualenv。它也没有使用我在/usr/local/bin/python 安装的普通 brew python。
  • local 连接不应该发生这种情况,无论如何,您可以指定 ansible_python_interpreter 并将其指向 venv-one。
  • 我遇到了同样的问题,ansible-playbook -vvv 显示了正确的虚拟环境——但我仍然收到“需要 boto”消息
【解决方案2】:

在我的情况下,该消息是因为我缺少 boto,尽管我有 boto3。所以我做了pip install boto 并修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2015-08-02
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多