使用ansible(HDFS存储)在命令行中创建文件夹

使用ansible(HDFS存储)在命令行中创建文件夹,ansible,Ansible,我正在尝试在HDFS存储上创建文件夹结构。我有3个主文件夹,每个都有子文件夹 我在更新子文件夹时遇到问题-我希望执行以下命令 hadoop fs-mkdir/ibm/it hadoop fs-mkdir/ibm/logistic hadoop fs-mkdir/hp hadoop fs-mkdir/dell/it hadoop fs-mkdir/dell/logistic 但是,执行以下命令(我使用debug msg打印失败的第二个任务的命令) 看来我需要在部门上运行一个循环,这是一个字典

我正在尝试在HDFS存储上创建文件夹结构。我有3个主文件夹,每个都有子文件夹

我在更新子文件夹时遇到问题-我希望执行以下命令

  • hadoop fs-mkdir/ibm/it
  • hadoop fs-mkdir/ibm/logistic
  • hadoop fs-mkdir/hp
  • hadoop fs-mkdir/dell/it
  • hadoop fs-mkdir/dell/logistic
但是,执行以下命令(我使用debug msg打印失败的第二个任务的命令) 看来我需要在部门上运行一个循环,这是一个字典

ok: [10.201.51.16] => (item={u'department': [u'it', u'logistic'], u'company_folder_name': u'/ibm'}) => {
    "msg": "hadoop fs -mkdir /company//ibm/[u'it', u'logistic']"
}
ok: [10.201.51.16] => (item={u'department': None, u'company_folder_name': u'/hp'}) => {
    "msg": "hadoop fs -mkdir /company//hp/"
}
ok: [10.201.51.16] => (item={u'department': [u'it'], u'company_folder_name': u'/dell'}) => {
    "msg": "hadoop fs -mkdir /company//dell/[u'it']"
多谢各位

配置文件:

companies:
     - company_folder_name: /ibm
       department:
            - it
            - logistic
     - company_folder_name: /hp
       department:
     - company_folder_name: /dell
       department:
            - it
剧本:

## Createing the main folders - working fine ##
   - name: create company folders
     shell: hadoop fs -mkdir {{ item.company_folder_name }}
     register: result
     ignore_errors: yes
     with_items:
            - "{{ companies }}"

## Create subfolders - Not working ##
   - name: create department folders
     shell: hadoop fs -mkdir {{ item.company_folder_name }}/{{item.department}}
     register: result
     ignore_errors: yes
     with_items:
            - "{{ companies }}"

在创建公司基础目录的第一个任务中,第一部分是正确的

对于下一个,我们首先在列表中选择具有非空
department
字段的对象。下面使用

然后,我们使用循环表在这个列表上循环,所以我们得到每个公司/部门组合的一个迭代

结果手册如下:

---
-主机:本地主机
收集事实:错误
变量:
公司:
-公司\文件夹\名称:/ibm
部门:
-它
-后勤
-公司\文件夹\名称:/hp
部门:
-公司\文件夹\名称:/dell
部门:
-它
任务:
-名称:创建公司文件夹
调试:
msg:“hadoop fs-mkdir{{item.company_folder_name}”
带_项:“{{companys}}”
-名称:创建部门文件夹
调试:
msg:“hadoop fs-mkdir{{item.0.company_folder_name}}/{{item.1}”
带_子元素:
-“{{companys | selectattr('department')| list}”
-系
其中:

PLAY [localhost] ***************************************************************************************************************************************

TASK [create company folders] **************************************************************************************************************************
ok: [localhost] => (item={'company_folder_name': '/ibm', 'department': ['it', 'logistic']}) => {
    "msg": "hadoop fs -mkdir /ibm"
}
ok: [localhost] => (item={'company_folder_name': '/hp', 'department': None}) => {
    "msg": "hadoop fs -mkdir /hp"
}
ok: [localhost] => (item={'company_folder_name': '/dell', 'department': ['it']}) => {
    "msg": "hadoop fs -mkdir /dell"
}

TASK [create department folders] ***********************************************************************************************************************
ok: [localhost] => (item=[{'company_folder_name': '/ibm'}, 'it']) => {
    "msg": "hadoop fs -mkdir /ibm/it"
}
ok: [localhost] => (item=[{'company_folder_name': '/ibm'}, 'logistic']) => {
    "msg": "hadoop fs -mkdir /ibm/logistic"
}
ok: [localhost] => (item=[{'company_folder_name': '/dell'}, 'it']) => {
    "msg": "hadoop fs -mkdir /dell/it"
}

PLAY RECAP *********************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

在创建公司基础目录的第一个任务中,第一部分是正确的

对于下一个,我们首先在列表中选择具有非空
department
字段的对象。下面使用

然后,我们使用循环表在这个列表上循环,所以我们得到每个公司/部门组合的一个迭代

结果手册如下:

---
-主机:本地主机
收集事实:错误
变量:
公司:
-公司\文件夹\名称:/ibm
部门:
-它
-后勤
-公司\文件夹\名称:/hp
部门:
-公司\文件夹\名称:/dell
部门:
-它
任务:
-名称:创建公司文件夹
调试:
msg:“hadoop fs-mkdir{{item.company_folder_name}”
带_项:“{{companys}}”
-名称:创建部门文件夹
调试:
msg:“hadoop fs-mkdir{{item.0.company_folder_name}}/{{item.1}”
带_子元素:
-“{{companys | selectattr('department')| list}”
-系
其中:

PLAY [localhost] ***************************************************************************************************************************************

TASK [create company folders] **************************************************************************************************************************
ok: [localhost] => (item={'company_folder_name': '/ibm', 'department': ['it', 'logistic']}) => {
    "msg": "hadoop fs -mkdir /ibm"
}
ok: [localhost] => (item={'company_folder_name': '/hp', 'department': None}) => {
    "msg": "hadoop fs -mkdir /hp"
}
ok: [localhost] => (item={'company_folder_name': '/dell', 'department': ['it']}) => {
    "msg": "hadoop fs -mkdir /dell"
}

TASK [create department folders] ***********************************************************************************************************************
ok: [localhost] => (item=[{'company_folder_name': '/ibm'}, 'it']) => {
    "msg": "hadoop fs -mkdir /ibm/it"
}
ok: [localhost] => (item=[{'company_folder_name': '/ibm'}, 'logistic']) => {
    "msg": "hadoop fs -mkdir /ibm/logistic"
}
ok: [localhost] => (item=[{'company_folder_name': '/dell'}, 'it']) => {
    "msg": "hadoop fs -mkdir /dell/it"
}

PLAY RECAP *********************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

您的确切问题是什么?第二个任务的输出命令应该是这样的:1.hadoop fs-mkdir/ibm/it 2.hadoop fs-mkdir/ibm/logistic 3.hadoop fs-mkdir/hp 4.hadoop fs-mkdir/dell/it 5.hadoop fs-mkdir/dell/logistic,但我得到的是不同的。我需要环游一下实际上是一本字典的部门。(我使用debug msg–为了打印命令)ok:[10.201.51.16]=>(item={u'department':[u'it',u'logistic'],u'company\u folder\u name':u'/ibm'})=>{msg:“hadoop fs-mkdir/company//ibm/[u'it',u'logistic']”请编辑您的问题并在此处添加此信息。您的确切问题是什么?第二个任务的输出命令应该是这样的:1.hadoop fs-mkdir/ibm/it 2.hadoop fs-mkdir/ibm/logistic 3.hadoop fs-mkdir/hp 4.hadoop fs-mkdir/dell/it 5.hadoop fs-mkdir/dell/logistic,但我得到的是不同的。我需要循环部门实际上是一本字典。(我使用debug msg–为了打印命令)ok:[10.201.51.16]=>(item={u'department':[u'it',u'logistic'],u'company\u folder\u name':u'/ibm'}=>{msg:“hadoop fs-mkdir/company//ibm/[u'it',u'logistic']”请编辑您的问题并在那里添加此信息。