Variables Ansible仅从第二次执行中获取变量
我发现Ansible“copy”模块在处理变量时有一种奇怪的行为。 因此,我: 1.Config.yml:Variables Ansible仅从第二次执行中获取变量,variables,copy,ansible,ansible-playbook,Variables,Copy,Ansible,Ansible Playbook,我发现Ansible“copy”模块在处理变量时有一种奇怪的行为。 因此,我: 1.Config.yml: - hosts: temp vars_prompt: - name: server_name prompt: "Enter server number: 1, 2, 3..." private: no default: 5 - name: server_role prompt: "Enter server role: ap
- hosts: temp
vars_prompt:
- name: server_name
prompt: "Enter server number: 1, 2, 3..."
private: no
default: 5
- name: server_role
prompt: "Enter server role: app, admin"
private: no
default: admin
- name: server_type
prompt: "Enter server type: stage, prod"
private: no
default: stage
pre_tasks:
- name: Types and roles
set_fact:
servername: "{{ server_name }}"
serverrole: "{{ server_role }}"
servertype: "{{ server_type }}"
vars_files:
- "vars/variables"
roles:
- configs
---
- set_fact: folder=server
when: serverrole == "app"
- set_fact: folder=admin-server
when: serverrole == "admin"
- set_fact: stageorprod=stage01
when: servertype == "stage"
- set_fact: stageorprod=prod
when: servertype == "prod"
- set_fact: fast={{ stageorprod }}/{{ folder }}/{{ servername }}
- name: Base copying admin-server
copy: src=admin-server/config dest=/home/tomcat/config/{{ fast }}/
when: serverrole == "admin"
TASK: [configs | set_fact fast={{stageorprod}}/{{folder}}/{{servername}}] *****
ok: [testcen04] => {"ansible_facts": {"fast": "stage01/admin-server/5"}, "item": ""}
TASK: [configs | Base copying admin-server] ***********************************
failed: [testcen04] => {"failed": true, "item": "", "md5sum": "cb2547d6235c078cfda365a5fb3c27c3",
"path": "/home/tomcat/config/stage01/admin-server/config", "state": "absent"}
msg: path /home/tomcat/config/stage01/admin-server/config does not exist
正如您所看到的,变量“fast”得到了正确的值,但不知何故,“servername”的值消失了。您的问题对于如何执行playbook以及如何使用提示的变量来完成任务是非常模糊的。如果您试图启动服务器,最好在没有提示的情况下在清单中声明它们。如果您试图访问特定的组,则可能需要使用组来限制其范围 如果您正在使用ansible为您生成一组主机。在启动主机并引导它们之前,您可能希望将这些信息一致地存储在某个位置,可能是在实例标记、键值存储(如redis、数据库)或文件中。然后运行第二个剧本以包含该角色 如果您不在公共云中,并且由于某些原因无法标记实例或将其分组到资源清册中,那么您还可以尝试使用设置服务器上的事实,并使它们在运行中保持不变,而不仅仅是在播放中。请注意,一旦您写入facts.d文件,您应该重新运行
setup
模块以再次收集事实。即使我使用公共云,我也经常利用事实