【问题标题】:ansible vagrant windows and localhostansible vagrant windows 和 localhost
【发布时间】:2021-06-18 19:38:29
【问题描述】:

我有一个使用 win_rm 的 vagrant box,但是,我需要从中获取一个文件并 在我的 localhost (MacO) 上使用 blockinfile,然后将文件复制回 vagrant box。

Ansible 不喜欢库存中有两个 127.0.0.1 项目。我已经尝试了几乎所有我能想到的都无法让它们一起工作的方法。

在 VirtualBox 上运行的 vagrant 设置了 NAT,但除了通过环回地址外,我似乎无法访问它。这可能会解决我的问题。

我也尝试在 Vagrantfile 中设置不同的 IP,但也没有成功。

以下是我一直在使用的库存文件。

[win]
127.0.0.1


[localhost]
control_machine ansible_host=local

[win:vars]
ansible_port=55985
ansible_winrm_transport=basic
ansible_winrm_scheme=http
ansible_user=vagrant
ansible_password="{{ lookup('env', 'WIN_GUEST_PASSWORD') }}"
nsible_connection=winrm


[localhost:vars]
ansible_user=test
ansible_connection=local
ansible_python_interpreter="/Library/Frameworks/Python.framework/Versions/3.8/bin/python3"

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    关于您的库存有几点要说:

    1. 您似乎混淆了组和主机的概念
    2. 您正在定义一个与隐式主机同名的组(即localhost)(可能是因为第 1 点)
    3. 您正在为您的 ansible 控制器显式定义一个主机,而这实际上可能不是您想要的,因为 ansible defines an implicit localhost for you。请注意,显式定义使您的控制器匹配 all 魔术组,这在大多数情况下通常是不需要的。

    根据您提供的信息,这是我编写库存的方式。下面的示例使用 ansible 功能在单独的文件/文件夹中组织变量。请查看inventory documentation 了解更多信息。我还为库存使用了 yaml 格式,因为它更容易理解 IMO。如果您愿意,请随意翻译回 ini

    inventories/my_env/hosts.yml(任何文件名都可以)

    ---
    all:
      hosts:
        my.windows.vagrant:
    

    inventories/my_env/host_vars/my.windows.vagrant.yml

    ---
    ansible_host: 127.0.0.1
    ansible_port: 55985
    ansible_winrm_transport: basic
    ansible_winrm_scheme: http
    ansible_user: vagrant
    ansible_password: "{{ lookup('env', 'WIN_GUEST_PASSWORD') }}"
    ansible_connection: winrm
    

    inventories/my_env/host_vars/localhost.yml

    ---
    ansible_python_interpreter: "/Library/Frameworks/Python.framework/Versions/3.8/bin/python3"
    

    请注意,我没有(重新)定义清单中的隐式 localhost,只定义了您在该主机上使用的(非标准)python 解释器。另请注意,我将 localhost 的其他变量删除为:

    1. 隐式本地主机默认使用local连接插件
    2. 本地连接插件不考虑ansible_user,而是使用已经登录的用户(即在控制器上启动 playbook 的用户)

    完成此操作后,您可以使用 my.windows.vagrant 目标来处理您的 vagrant windows 框,并使用 localhost 在控制器上运行东西。

    适应您的确切需求。

    【讨论】:

    • 感谢您周到而详细的回复。为了跟进这一点,在尝试在远程和本地主机之间委托某些任务时,我应该注意哪些问题?例如,我的远程主机使用 win_rm 和其他 *win 相关的 ansible 模块进行复制和获取,但是,我需要使用 blockinfile 解析带有 localhost 的 XML 文件,以便对该文件进行一些操作。
    • 在这种情况下我真的没有看到任何问题。唯一的要求是在使用 blockinfile 之前将文件获取到本地主机并在完成后将其推回,这远非理想,但应该可以工作并且我无法想到任何解决方法。
    猜你喜欢
    • 2016-07-19
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2014-08-09
    相关资源
    最近更新 更多