Ansible在控制计算机中创建目录,即使在使用本地连接运行playbook时委托_设置为remote
我正在运行一个ansible playbook,配置为配置ec2和配置机器。我将playbook的连接设置为local,因为在脚本运行之前没有要管理的机器。设置后,我应该在远程服务器中创建目录。由于playbook在本地连接中运行,所以我设置为delete_to:{{remote_host}},所以这个目录创建在远程主机中执行,但它仍然在控制计算机中创建目录Ansible在控制计算机中创建目录,即使在使用本地连接运行playbook时委托_设置为remote,ansible,Ansible,我正在运行一个ansible playbook,配置为配置ec2和配置机器。我将playbook的连接设置为local,因为在脚本运行之前没有要管理的机器。设置后,我应该在远程服务器中创建目录。由于playbook在本地连接中运行,所以我设置为delete_to:{{remote_host}},所以这个目录创建在远程主机中执行,但它仍然在控制计算机中创建目录 - name: provision instance for Apache hosts: localhost connection
- name: provision instance for Apache
hosts: localhost
connection: local
remote_user: ubuntu
gather_facts: false
vars_files:
- vars/env.yml
vars:
allow_world_readable_tmpfiles: true
key_name: ansible-test
region: us-east-2
image: ami-0e82959d4ed12de3f # Ubuntu 18.04
id: "practice-akash-ajay"
sec_group: "{{ id }}-sec"
remote_host: ansible-test
remaining_days: 20
acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
# acme_directory: https://acme-v02.api.letsencrypt.org/directory
cert_name: "{{ app_slug }}.{{ app_domain}}"
intermediate_path: /etc/pki/letsencrypt/intermediate.pem
cert:
common_name: "{{ app_slug }}.{{ app_domain}}"
organization_name: PearlThoughts
email_address: "{{ letsencrypt_email }}"
subject_alt_name:
- "DNS:{{ app_slug }}.{{ app_domain}}"
roles:
- aws
当您在播放中明确设置连接时,它将用于该播放中的所有任务。所以不要那样做。Ansible默认情况下将使用
local
连接来连接localhost
,除非您在清单中明确更改了该连接(同样,不要这样做)
如果您删除了播放中的连接
设置,委托给
可能会按照您预期的方式工作……但我认为您不想这样做
如果您的playbook为您配置了一个新主机,那么使用Ansible将该主机作为目标主机的方法是将该主机(或其对应的组)作为一个新的播放,该播放的目标hosts:
中列出了该主机。从概念上讲,您需要:
- host: localhost
tasks:
- name: provisiong an AWS instance
aws_ec2: [...]
register: hostinfo
- add_host:
name: myhost
ansible_host: "{{ hostinfo... }}"
- hosts: myhost
tasks:
- name: do something on the new host
command: uptime
在配置主机和针对主机执行任务之间,您可能需要一些逻辑,以确保主机已启动并准备好为请求提供服务
与其使用
add\u host
模块,一个更好的解决方案通常是依靠适当的清单插件。任务选项是delegate\u to
而不是delete\u to
,但我在你的剧本/任务中都没有看到。谢谢,我检查了我的剧本,它已设置为delegate\u to。我修正了标题和描述的打字错误,结果仍然一样。知道吗?我越来越近了。我在playbook.yml中提到了主机到本地主机,因此所有任务都限制在本地主机上。更改为all
会将代理选择到主机,但仍会选择控制机器。我已经在我的~/.ssh目录中配置了ansible测试,并将其添加到清单中,因此我没有任何线索。有单独的主机看起来很干净,但我必须混合本地和远程操作,因此我更喜欢委托给。授权的目的是什么?这是授权的目的,是的。如果您想更新您的问题,以包括您试图完成的特定任务,我们可能可以为您提供更好的答案。我只是尝试在远程主机中创建一个目录,但它一直在控制计算机(我的Mac)中创建。请检查问题中的任务,如果我们设置connection:local,它将期望所有主机都有127.0.0.1。我必须把它移走才能让它工作。我计划在localhost和remote的所有任务中都提到delegate_to,直到我找到一个解决方案删除连接:local使所有东西都在远程主机中运行。我需要有90%的任务在本地运行,但很少在远程主机上完成。是否有办法在本地运行所有任务,并在远程主机上有选择地执行任务?
- host: localhost
tasks:
- name: provisiong an AWS instance
aws_ec2: [...]
register: hostinfo
- add_host:
name: myhost
ansible_host: "{{ hostinfo... }}"
- hosts: myhost
tasks:
- name: do something on the new host
command: uptime