Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 当我迭代jinja2生成的字符串列表时,;我得到的是一系列字符而不是字符串。为什么会这样?_Ansible_Jinja2_Ceph - Fatal编程技术网

Ansible 当我迭代jinja2生成的字符串列表时,;我得到的是一系列字符而不是字符串。为什么会这样?

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

我一直在尝试通过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':'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 %}
}