我正在编写如下的ansible代码
-
gather_facts: false
hosts: localhost # "{{ servername }} "
remote_user: raahool
vars:
BOOK_NAME: "RAHUL ANIKET PRAG VISHAL SANDY BONGO MARIO"
books: "{% for book in BOOK_NAME -%}
{{ book }}
{%- endfor %}"
tasks:
-
name: "something HAPPEN TO MY CODE "
register: ia_feed_delay
shell: |
echo " SELECT QUERY 3 in {{ books }} "
-
debug: var=ia_feed_delay.stdout_lines
我希望输出为
SELECT QUERY 3 in 'RAHUL','ANIKET','PRAG','VISHAL','SANDY','BONGO','MARIO'
我尝试了大多数jinja2过滤器,如地图,列表,加入,但仍然没有运气。
答案 0 :(得分:0)
不确定为什么要像这样声明BOOK_NAME
变量。你可以把它作为列表变量更高效地完成:
vars:
BOOK_NAME:
- RAHUL
- ANIKET
- PRAG
- VISHAL
- SANDY
- BONGO
- MARIO
以下是如何从此列表中获取您声明要结束的sql字符串:
- hosts: localhost
gather_facts: false
vars:
sql_string:
BOOK_NAME:
- RAHUL
- ANIKET
- PRAG
- VISHAL
- SANDY
- BONGO
- MARIO
tasks:
- name: prepare sql string
set_fact:
sql_string: "SELECT QUERY 3 in '{{ \"','\".join(BOOK_NAME)}}'"
- name: print variable
debug:
var: sql_string
输出:
[root@optima-ansible ILIAS]# ansible-playbook 50201629.yml
PLAY [localhost] ****************************************************************************************************************************************************************************************************
TASK [prepare sql string] *******************************************************************************************************************************************************************************************
ok: [localhost]
TASK [print variable] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"sql_string": "SELECT QUERY 3 in 'RAHUL','ANIKET','PRAG','VISHAL','SANDY','BONGO','MARIO'"
}
PLAY RECAP **********************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
[root@optima-ansible ILIAS]#
答案 1 :(得分:0)
我建议使用here
中的clean插件代码段是:
# Import modules
import unittest
import re
import unicodedata
import textwrap
def _string_sanity_check(string):
if string is None:
return ''
if not isinstance(string, basestring):
return str(string)
return string
def clean(string):
sanitzed_string = _string_sanity_check(string)
return " ".join(sanitzed_string.split())
将其复制到plugin/filters
目录并按以下方式使用:
---
- name: String Test
gather_facts: False
hosts: localhost
vars:
BOOK_NAME: "RAHUL ANIKET PRAG VISHAL SANDY BONGO MARIO"
tasks:
- name: debug without filter
debug:
var: BOOK_NAME
- name: debug with filter
debug:
var: BOOK_NAME | clean
- name: Fact
set_fact:
new_books: "{{ BOOK_NAME | clean }}"
- name: debug split
debug:
var: new_books.split(" ")
你会得到:
PLAY [String Test] *************************************************************************************************************************
TASK [debug without filter] ****************************************************************************************************************
ok: [localhost] => {
"BOOK_NAME": "RAHUL ANIKET PRAG VISHAL SANDY BONGO MARIO"
}
TASK [debug with filter] *******************************************************************************************************************
ok: [localhost] => {
"BOOK_NAME | clean": "RAHUL ANIKET PRAG VISHAL SANDY BONGO MARIO"
}
TASK [Fact] ********************************************************************************************************************************
ok: [localhost]
TASK [debug split] *************************************************************************************************************************
ok: [localhost] => {
"new_books.split(\" \")": [
"RAHUL",
"ANIKET",
"PRAG",
"VISHAL",
"SANDY",
"BONGO",
"MARIO"
]
}
PLAY RECAP *********************************************************************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0
答案 2 :(得分:0)
谢谢大家: - )
下面的脚本解决了我的问题:
---
- name: String Test
gather_facts: False
hosts: localhost
vars:
BOOK_NAME: RAHUL ANIKET PRAG VISHAL SANDY BONGO MARIO
tasks:
- name: debug without filter
shell: |
echo "SELECT * FROM TABLE_NAME WHERE COLUMN IN ('{{ BOOK_NAME.split()| list | join("', '") }}') ;"
register: status_book
-
...
输出:
TASK [debug]************************************************************************************************************************************************
ok: [localhost] => {
"status_book.stdout_lines": [
"SELECT * FROM TABLE_NAME WHERE COLUMN IN ('RAHUL', 'ANIKET', 'PRAG', 'VISHAL', 'SANDY', 'BONGO', 'MARIO') ;"
]
}