ansible - 使用 ansible(HDFS 存储)在命令行中创建文件夹
问题描述
我正在尝试在 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 }}"
解决方案
您的第一项任务是创建公司基本目录。
对于下一个,我们首先在列表中选择具有非空departement
字段的对象。这是在下面使用selectattr
过滤器完成的
然后我们使用subelements
查找在此列表上循环,以便我们为每个公司/部门组合获得一次迭代。
结果剧本如下:
---
- hosts: localhost
gather_facts: false
vars:
companies:
- company_folder_name: /ibm
department:
- it
- logistic
- company_folder_name: /hp
department:
- company_folder_name: /dell
department:
- it
tasks:
- name: create company folders
debug:
msg: "hadoop fs -mkdir {{ item.company_folder_name }}"
with_items: "{{ companies }}"
- name: create department folders
debug:
msg: "hadoop fs -mkdir {{ item.0.company_folder_name }}/{{ item.1 }}"
with_subelements:
- "{{ companies | selectattr('department') | list }}"
- department
这使:
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
推荐阅读
- python - 在 fasta 数据集中搜索可变氨基酸基序
- jquery - JQuery Widget Factory - 初始化后绑定事件侦听器不起作用 -
- excel - 带反斜杠的 xpath 查询返回空
- backend - 如何创建没有分段名称的新分段报价?
- c++ - 如何将多个可变参数模板元组类组合成一个类?
- python - 在python中处理mongodb中的请求超时的最佳方法是什么
- google-apps-script - 消除 Ref# 参考不存在问题
- python - 带有 E+01 的 numpy savetxt 输出
- excel - 如何实例化一个动态的空数组并添加它的第一个元素?
- angular - 如何从 p 日历中删除清除按钮?