ansible vagrant windows 和 localhost
ansible vagrant windows and localhost
我有一个 vagrant box,我使用 win_rm,但是,我需要从中获取一个文件并
在我的本地主机 (MacOs) 上使用 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"
关于您的库存有几点要说:
- 您似乎混淆了组和主机的概念
- 您正在定义一个与隐式主机同名的组(即
localhost
)(可能是因为第 1 点)
- 您正在为您的 ansible 控制器显式定义一个主机,而这实际上可能不是您自 ansible defines an implicit localhost for you 以来想要的。请注意,显式定义会使您的控制器匹配
all
魔术组,这在大多数情况下通常是不需要的。
根据您提供的信息,我将如何编写清单。下面的示例使用 ansible 功能在单独的 files/folders 中组织变量。请查看 inventory documentation 了解更多信息。我还为清单使用了 yaml 格式,因为它更容易理解 IMO。如果您愿意,请随时翻译回 ini
in 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"
请注意,我没有(重新)定义清单中的隐式本地主机,仅定义您在该主机上使用的(非标准)python 解释器。另请注意,我将本地主机的其他变量删除为:
- implicit localhost 默认使用
local
连接插件
- 本地连接插件不考虑
ansible_user
并使用已经登录的用户(即在控制器上启动剧本的用户)
完成此操作后,您可以使用 my.windows.vagrant
目标来处理您的 vagrant windows 框和 localhost
至 运行 控制器上的内容。
根据您的确切需求进行调整。
我有一个 vagrant box,我使用 win_rm,但是,我需要从中获取一个文件并 在我的本地主机 (MacOs) 上使用 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"
关于您的库存有几点要说:
- 您似乎混淆了组和主机的概念
- 您正在定义一个与隐式主机同名的组(即
localhost
)(可能是因为第 1 点) - 您正在为您的 ansible 控制器显式定义一个主机,而这实际上可能不是您自 ansible defines an implicit localhost for you 以来想要的。请注意,显式定义会使您的控制器匹配
all
魔术组,这在大多数情况下通常是不需要的。
根据您提供的信息,我将如何编写清单。下面的示例使用 ansible 功能在单独的 files/folders 中组织变量。请查看 inventory documentation 了解更多信息。我还为清单使用了 yaml 格式,因为它更容易理解 IMO。如果您愿意,请随时翻译回 ini
in 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"
请注意,我没有(重新)定义清单中的隐式本地主机,仅定义您在该主机上使用的(非标准)python 解释器。另请注意,我将本地主机的其他变量删除为:
- implicit localhost 默认使用
local
连接插件 - 本地连接插件不考虑
ansible_user
并使用已经登录的用户(即在控制器上启动剧本的用户)
完成此操作后,您可以使用 my.windows.vagrant
目标来处理您的 vagrant windows 框和 localhost
至 运行 控制器上的内容。
根据您的确切需求进行调整。