2014-03-12 85 views
1

我正在写一个剧本,我需要执行mysql查询并以json格式传递 输出。剧本代码工作正常,只是我想面对字符串concatenate部分中的错误。如果我传递样本JSON字符串,它工作正常。如何连接YAML中的字符串?

- name: Execute php script with json parameter 
    command: php -f /path/to/php/test.php "{'colors':{'red','blue','yellow'}}" 
    register: php_output 

output.stdout_lines是在我的剧本已经设置变量,它包含{'red','blue','yellow'}格式输出。

- name: Execute php script with json parameter 
    command: php -f /path/to/php/test.php '{"stdout_lines": {{output.stdout_lines}} }' 
    register: php_output 

所以我怎么能串联在'{"stdout_lines": {{output.stdout_lines}} }'output.stdout_lines变量?任何建议

+0

当您在Ansible任务上传递数组时,它将针对数组上的每个条目执行一次。它不会像你所假设的那样连接执行过程中的值。看看http://docs.ansible.com/playbooks_loops.html –

回答

1

这将做

- name: Generate JSON output based on template 
    template: src=colors.json.j2 dest=/tmp/colors.json 
    with_items: colors 

它会产生这样

{'colors': 
    { 
     'blue', 
     'red', 
     'green', 
     } 
} 
2

stdout_lines文件为了方便创建。回到当天,我们只有stdout。这是你想要什么,我想:

command: php -f /path/to/php/test.php '{"stdout_lines": {{output.stdout}} }' 

,如果你想真正Concat的自己,说是因为你有你自己的字符串,那么你可以使用的Jinja2内置过滤器join的名单:

- hosts: localhost 
    gather_facts: False 
    tags: so9 
    vars: 
    - str_list: ['Hello', 'world', '!', ] 
    tasks: 
    - debug: msg="orig list={{ str_list }}" 
    - debug: msg="concated = {{ str_list | join(' ') }}" 
    - set_fact: concated_str="{{ str_list | join(' ') }}" 
    - debug: msg="assigned to a variable concated_str = {{ concated_str }}"