从url获取变量值

时间:2017-04-02 18:19:54

标签: ansible

我是ansible的新手,我正在努力实现以下目标,

这是示例剧本,这里我在HKLM下创建一个名为“test”的注册码:\ SOFTWARE \ myapp \ Desk \,我正在添加2个条目,其中包含名为hello和hi的项目,我正在分配单个相同的值“世界“既是你好又喜。

我想从某个文件中获取hello和hi的值,这些文件将存储在存储库或某个url中... hello和hi的值会有所不同..这可能吗?

---
 - hosts: web
   tasks:
    - name: Create and add reg entries
      win_regedit:
       path: HKLM:\SOFTWARE\myapp\Desk\Test
       entry: "{{ item }}"
       data: world
       type: string
       state: present
      with_items:
         - hello
         - hi

更新

对于新手来说,这里有一些改进,我可以使用键值迭代with_items,但我希望有一个带键:值的文件,我希望ansible遍历所有左侧键并创建它们用右边的值填充它们。这是win_Regedit中的条目应该有密钥,数据应该有值

---
 - hosts: web
   tasks:
    - name: Create and add reg entries
      win_regedit:
       path: HKLM:\SOFTWARE\myapp\Desk\Test
       entry: "{{ item.regkey }}"
       data: "{{ item.regvalue}}"
       type: string
       state: present
      with_items:
         - regkey: hello
           regvalue: world
         - regkey: hi
           regvalue: universe

2 个答案:

答案 0 :(得分:0)

要包含某个文件中的变量,您可以使用include_vars模块:

include_vars:
        file: vars.yml

编辑您想要做的事情可能就像下面一样(没有尝试win_regedit,因为我没有任何Windows节点):

创建一个vars.yml:

---
var1: 'key1'
var2: 'key2'
d1: "{
  '{{var1}}': 'val1',
  '{{var2}}': 'val2'
}"

然后启动以下playbook(参见with_dict语句):

 ---
    - hosts: localhost
      remote_user: my_user

      tasks:
        - name: pull var_file
          url: http://example.com/path/to/vars
          dest: /path/to/vars.yml
          mode: 0440 
        - name: include_vars
          include_vars:
            /path/to/vars.yml
        - name: Create and add reg entries
          win_regedit:
          path: HKLM:\SOFTWARE\myapp\Desk\Test
          entry: "{{ item.key }}"
          data: "{{ item.value}}"
          type: string
          state: present
          with_dict: "{{d1}}"

对于with_dict技巧

,感谢this answer

答案 1 :(得分:0)

使用 uri 模块。

 ---
    - hosts: localhost
      remote_user: my_user

      tasks:
        - name: pull var_file
          uri:
            url: http://example.com/path/to/vars
            method: GET
            return_content: yes
          register: vars_from_url
        - name: Create and add reg entries
          win_regedit:
          path: HKLM:\SOFTWARE\myapp\Desk\Test
          entry: "{{ item.key }}"
          data: "{{ item.value}}"
          type: string
          state: present
          with_dict: "{{ vars_from_url.content }}"
相关问题