Ansible仅从第二次执行

时间:2015-07-06 12:54:32

标签: 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: 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
  1. " CONFIGS" main.yml的作用:

    ---
    - 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"
    
  2. 在ansible / roles / configs / files / admin-server / config中配置文件。 当我使用默认值变量(5,admin,stage)运行playbook时,我得到了:

    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
    
  3. 当我再次使用相同的值运行此任务时,一切正常。但如果我改变一些变量,它会再次出现。 我注意到,其他模块,比如" Template",在这个变量的同一个剧本中运行良好。也许有什么问题" copy"? 如你所见,变量"快速"获得正确的价值,但不知何故,"服务器名称"消失了。

1 个答案:

答案 0 :(得分:0)

您的问题对于如何执行您的剧本以及您尝试使用提示变量完成的内容非常模糊。如果您正在尝试启动服务器,最好在没有提示的情况下在清单中声明它们。如果您尝试访问特定的组,则应该使用组来限制其范围。

如果您使用ansible为您生成一组主机。您可能希望将这些信息保存在某个地方,可能是在实例标记,键值存储(如redis,数据库或文件)中, 之前,您可以启动主机并引导它们。然后运行第二个剧本以包括角色。

如果您不在公共云中,并且由于某种原因无法标记实例或将其归类到库存,您还可以尝试使用facts.d在服务器上设置事实并让它们在运行中保持不变,而不仅仅是播放。请注意,一旦您写入facts.d文件,您应该重新运行setup模块以再次收集事实。即使我使用公共云,我仍然经常使用facts.d。