Ansible 当我迭代jinja2生成的字符串列表时,;我得到的是一系列字符而不是字符串。为什么会这样?
我一直在尝试通过ansible部署ceph集群。当我试图将deploy_ceph_cluster.sh.j2呈现到shell脚本中时,遇到了一些问题。为了更好地说明,我将提供一个最小的工作示例 这是我的库存文件:Ansible 当我迭代jinja2生成的字符串列表时,;我得到的是一系列字符而不是字符串。为什么会这样?,ansible,jinja2,ceph,Ansible,Jinja2,Ceph,我一直在尝试通过ansible部署ceph集群。当我试图将deploy_ceph_cluster.sh.j2呈现到shell脚本中时,遇到了一些问题。为了更好地说明,我将提供一个最小的工作示例 这是我的库存文件: #库存 [本地] localhost ansible\u host=127.0.0.1 ansible\u connection=local [ceph_osd] node1 ansible_host=192.168.1.2 rules=“{'rule1':{'bcache':'non
#库存
[本地]
localhost ansible\u host=127.0.0.1 ansible\u connection=local
[ceph_osd]
node1 ansible_host=192.168.1.2 rules=“{'rule1':{'bcache':'none','disks':'[“/dev/sda”、“/dev/sdc”、“/dev/sdd”、“/dev/sde”]'}”
node2 ansible_host=192.168.1.3 rules=“{'rule1':{'bcache':'none','disks':'[“/dev/sda”、“/dev/sdc”、“/dev/sdd”、“/dev/sde”]'}”
node3 ansible_host=192.168.1.4 rules=“{'rule1':{'bcache':'none','disks':'[“/dev/sda”、“/dev/sdc”、“/dev/sdd”、“/dev/sde”]'}”
我的jinja2模板文件:
#!/bin/sh
createOSD() {
{% for host in groups['ceph_osd'] %}
{% for rule in hostvars[host].rules.values() %}
{% if rule.bcache != 'none' %}
ssh {{ host }} make-bcache -B {{ rule.disks | join(' ') }} -C {{ rule.bcache }} --wipe-bcache
bcache_name=$(lsblk -o KNAME {{ rule.bcache }} | grep bcache)
ssh {{ host }} echo writeback > /sys/block/$bcache_name/bcache/cache_mode
ceph-deploy osd create --data /dev/$bcache_name {{ host }}
{% else %}
echo {{rule.disks}}
{% for disk in rule.disks %}
ceph-deploy osd create --data {{ disk }} {{ host }}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
}
createOSD
最后,我的deploy.yml如下所示:
#deploy.yml文件
---
-主持人:127.0.0.1
连接:本地
收集事实:错误
名称:渲染jinja2模板
任务:
-名称:在本地渲染所有模板文件
模板:src=./deploy\u ceph\u cluster.sh.j2 dest=deploy\u ceph\u cluster.sh
...
可以使用以下命令渲染我的模板文件:
$ansible playbook deploy.yml-i目录
播放[渲染jinja2模板]**************************************************
任务[以本地方式呈现所有模板文件]*************************
确定:[本地主机]
重演*********************************************************************
localhost:ok=1已更改=0无法访问=0失败=0跳过=0已获救=0已忽略=0
到目前为止还不错。但是deploy_ceph_cluster.sh的上下文是错误的。其背景如下:
#/垃圾箱/垃圾箱
createOSD(){
echo[/dev/sda,/dev/sdc,/dev/sdd,/dev/sde]
ceph部署osd创建--数据[node1]
ceph部署osd创建--数据/节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据e节点1
ceph部署osd创建——数据v节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建--数据s节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据a节点1
ceph部署osd创建--数据,节点1
ceph部署osd创建--数据节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据e节点1
ceph部署osd创建——数据v节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建--数据s节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据c节点1
ceph部署osd创建--数据,节点1
ceph部署osd创建--数据节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据e节点1
ceph部署osd创建——数据v节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建--数据s节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建--数据,节点1
ceph部署osd创建--数据节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据e节点1
ceph部署osd创建——数据v节点1
ceph部署osd创建--数据/节点1
ceph部署osd创建--数据s节点1
ceph部署osd创建——数据d节点1
ceph部署osd创建——数据e节点1
ceph部署osd创建--数据]节点1
echo[/dev/sda,/dev/sdc,/dev/sdd,/dev/sde]
ceph部署osd创建--数据[node2]
ceph部署osd创建--数据/节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据e节点2
ceph部署osd创建--数据v节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建--数据s节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据a节点2
ceph部署osd创建--数据,节点2
ceph部署osd创建--数据节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据e节点2
ceph部署osd创建--数据v节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建--数据s节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据c节点2
ceph部署osd创建--数据,节点2
ceph部署osd创建--数据节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据e节点2
ceph部署osd创建--数据v节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建--数据s节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建--数据,节点2
ceph部署osd创建--数据节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据e节点2
ceph部署osd创建--数据v节点2
ceph部署osd创建--数据/节点2
ceph部署osd创建--数据s节点2
ceph部署osd创建——数据d节点2
ceph部署osd创建——数据e节点2
ceph部署osd创建--数据]节点2
echo[/dev/sda,/dev/sdc,/dev/sdd,/dev/sde]
ceph部署osd创建--数据[node3]
ceph部署osd创建--数据/节点3
ceph部署osd创建——数据d节点3
ceph部署osd创建——数据e节点3
ceph部署osd创建——数据v节点3
ceph部署osd创建--数据/节点3
ceph部署osd创建--数据s节点3
ceph部署osd创建——数据d节点3
ceph部署osd创建——数据a节点3
ceph部署osd创建--数据,节点3
ceph部署osd创建--数据节点3
ceph部署osd创建--数据/节点3
ceph部署osd创建——数据d节点3
ceph部署osd创建——数据e节点3
ceph部署osd创建——数据v节点3
createOSD() {
{% for host in groups['ceph_osd'] %}
{% for rule in hostvars[host].rules.values() %}
... omit some irrelevant code
{% for disk in rule.disks %}
ceph-deploy osd create --data {{ disk }} {{ host }}
{% endfor %}
{% endfor %}
{% endfor %}
}