通过 Ansible 移动超过 2 天的文件夹
Move folders older than 2 days via Ansible
给定以下目录:
/tmp/testing/test_ansible
├── [Sep 20 8:53] 2014-05-10
├── [Sep 20 8:53] 2014-05-11
├── [Sep 20 8:53] 2014-05-12
└── [Sep 22 9:48] 2016-09-22
4 directories
我正在尝试移动 早于2 天 的目录。为了
为此,我正在使用 Ansible 的 find
模块:
- name: Find the test dirs created in the past
find:
paths: /tmp/testing/test_ansible
age: 2d
file_type: directory
register: gold_data
- debug: var="{{ item }}"
with_items: "{{ gold_data.files }}"
以上代码从 4 个文件夹中输出 3 个结果,我在下面只显示 1 个结果:
TASK [debian-linux-move : debug] ***********************************************
ok: [localhost] => (item={u'uid': 1000, u'woth': False, u'mtime': 1474350802.827127, u'inode': 3937540, u'isgid': False, u'size': 4096, u'roth': True, u'isuid'
: False, u'isreg': False, u'gid': 1000, u'ischr': False, u'wusr': True, u'xoth': True, u'rusr': True, u'nlink': 2, u'issock': False, u'rgrp': True, u'path': u'
/tmp/testing/test_ansible/2014-05-11', u'xusr': True, u'atime': 1474529596.5034406, u'isdir': True, u'ctime': 1474350802.827127, u'isblk': False, u'xgrp': True
, u'dev': 2055, u'wgrp': True, u'isfifo': False, u'mode': u'0775', u'islnk': False}) => {
"<type 'dict'>": "VARIABLE IS NOT DEFINED!",
"item": {
"atime": 1474529596.5034406,
"ctime": 1474350802.827127,
"dev": 2055,
"gid": 1000,
"inode": 3937540,
"isblk": false,
"ischr": false,
"isdir": true,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": false,
"issock": false,
"isuid": false,
"mode": "0775",
"mtime": 1474350802.827127,
"nlink": 2,
"path": "/tmp/testing/test_ansible/2014-05-11",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 4096,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": true,
"xoth": true,
"xusr": true
}
}
还有 2 个与此有些相似的结果。
我想要实现的目标
我认为如果我将所有 path 存储在一个变量中,
然后我可以 移动 存储变量中的那些目录,
然后 创建一个符号链接 回到它们被带走的目录。所以我必须要
循环项目并提取 path
.
这就是我需要 路径 的原因。但是当我尝试访问它时,出现错误:
(debug) p list(vars['gold_data']['files']['path'])
***TypeError:TypeError('list indices must be integers, not str',)
还有哪些其他选择?我怎样才能实现这样的操作?
感谢出色的#ansible IRC 社区,设法修复了
错误。
我在调试模块中打印错误的项目:
我是怎么做到的(不好):
- debug: var={{ item['path'] }}
with_items: "{{ gold_data.files }}"
他们的建议如何(好):
- debug: var=item.path
with_items: "{{ gold_data.files }}"
因此,通过删除双括号,它现在可以正确打印路径:
TASK [debian-linux-move : debug] ***********************************************
ok: [localhost] => (item={u'uid': 1000, u'woth': False, u'mtime': 1474350802.827127, u'inode': 3937540, u'isgid': False, u'size': 4096, u'roth': True, u'isuid'
: False, u'isreg': False, u'gid': 1000, u'ischr': False, u'wusr': True, u'xoth': True, u'rusr': True, u'nlink': 2, u'issock': False, u'rgrp': True, u'path': u'
/tmp/testing/test_ansible/2014-05-11', u'xusr': True, u'atime': 1474529596.5034406, u'isdir': True, u'ctime': 1474350802.827127, u'isblk': False, u'xgrp': True
, u'dev': 2055, u'wgrp': True, u'isfifo': False, u'mode': u'0775', u'islnk': False}) => {
"item": {
"atime": 1474529596.5034406,
"ctime": 1474350802.827127,
"dev": 2055,
"gid": 1000,
"inode": 3937540,
"isblk": false,
"ischr": false,
"isdir": true,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": false,
"issock": false,
"isuid": false,
"mode": "0775",
"mtime": 1474350802.827127,
"nlink": 2,
"path": "/tmp/testing/test_ansible/2014-05-11",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 4096,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": true,
"xoth": true,
"xusr": true
},
"item.path": "/tmp/testing/test_ansible/2014-05-11"
}
给定以下目录:
/tmp/testing/test_ansible
├── [Sep 20 8:53] 2014-05-10
├── [Sep 20 8:53] 2014-05-11
├── [Sep 20 8:53] 2014-05-12
└── [Sep 22 9:48] 2016-09-22
4 directories
我正在尝试移动 早于2 天 的目录。为了
为此,我正在使用 Ansible 的 find
模块:
- name: Find the test dirs created in the past
find:
paths: /tmp/testing/test_ansible
age: 2d
file_type: directory
register: gold_data
- debug: var="{{ item }}"
with_items: "{{ gold_data.files }}"
以上代码从 4 个文件夹中输出 3 个结果,我在下面只显示 1 个结果:
TASK [debian-linux-move : debug] ***********************************************
ok: [localhost] => (item={u'uid': 1000, u'woth': False, u'mtime': 1474350802.827127, u'inode': 3937540, u'isgid': False, u'size': 4096, u'roth': True, u'isuid'
: False, u'isreg': False, u'gid': 1000, u'ischr': False, u'wusr': True, u'xoth': True, u'rusr': True, u'nlink': 2, u'issock': False, u'rgrp': True, u'path': u'
/tmp/testing/test_ansible/2014-05-11', u'xusr': True, u'atime': 1474529596.5034406, u'isdir': True, u'ctime': 1474350802.827127, u'isblk': False, u'xgrp': True
, u'dev': 2055, u'wgrp': True, u'isfifo': False, u'mode': u'0775', u'islnk': False}) => {
"<type 'dict'>": "VARIABLE IS NOT DEFINED!",
"item": {
"atime": 1474529596.5034406,
"ctime": 1474350802.827127,
"dev": 2055,
"gid": 1000,
"inode": 3937540,
"isblk": false,
"ischr": false,
"isdir": true,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": false,
"issock": false,
"isuid": false,
"mode": "0775",
"mtime": 1474350802.827127,
"nlink": 2,
"path": "/tmp/testing/test_ansible/2014-05-11",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 4096,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": true,
"xoth": true,
"xusr": true
}
}
还有 2 个与此有些相似的结果。
我想要实现的目标
我认为如果我将所有 path 存储在一个变量中,
然后我可以 移动 存储变量中的那些目录,
然后 创建一个符号链接 回到它们被带走的目录。所以我必须要
循环项目并提取 path
.
这就是我需要 路径 的原因。但是当我尝试访问它时,出现错误:
(debug) p list(vars['gold_data']['files']['path'])
***TypeError:TypeError('list indices must be integers, not str',)
还有哪些其他选择?我怎样才能实现这样的操作?
感谢出色的#ansible IRC 社区,设法修复了 错误。
我在调试模块中打印错误的项目:
我是怎么做到的(不好):
- debug: var={{ item['path'] }}
with_items: "{{ gold_data.files }}"
他们的建议如何(好):
- debug: var=item.path
with_items: "{{ gold_data.files }}"
因此,通过删除双括号,它现在可以正确打印路径:
TASK [debian-linux-move : debug] ***********************************************
ok: [localhost] => (item={u'uid': 1000, u'woth': False, u'mtime': 1474350802.827127, u'inode': 3937540, u'isgid': False, u'size': 4096, u'roth': True, u'isuid'
: False, u'isreg': False, u'gid': 1000, u'ischr': False, u'wusr': True, u'xoth': True, u'rusr': True, u'nlink': 2, u'issock': False, u'rgrp': True, u'path': u'
/tmp/testing/test_ansible/2014-05-11', u'xusr': True, u'atime': 1474529596.5034406, u'isdir': True, u'ctime': 1474350802.827127, u'isblk': False, u'xgrp': True
, u'dev': 2055, u'wgrp': True, u'isfifo': False, u'mode': u'0775', u'islnk': False}) => {
"item": {
"atime": 1474529596.5034406,
"ctime": 1474350802.827127,
"dev": 2055,
"gid": 1000,
"inode": 3937540,
"isblk": false,
"ischr": false,
"isdir": true,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": false,
"issock": false,
"isuid": false,
"mode": "0775",
"mtime": 1474350802.827127,
"nlink": 2,
"path": "/tmp/testing/test_ansible/2014-05-11",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 4096,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": true,
"xoth": true,
"xusr": true
},
"item.path": "/tmp/testing/test_ansible/2014-05-11"
}