提问人:JDFreez 提问时间:11/4/2022 最后编辑:ZeitounatorJDFreez 更新时间:7/20/2023 访问量:1259
如何计算ansible_uptime_seconds并在操作系统中输出.csv
How to calculate ansible_uptime_seconds and output this in os.csv
问:
我正在尝试创建一个可用于查看某些系统详细信息的 csv 文件。其中一项是系统正常运行时间,它以 unix 秒为单位反映。但是在os.csv输出文件中,我希望将其视为天,HH:MM:SS。
在我的 yaml 脚本下方:
---
- name: playbook query system and output to file
hosts: OEL7_systems
vars:
output_file: os.csv
tasks:
- block:
# For permisison setup.
- name: get current user
command: whoami
register: whoami
run_once: yes
- name: clean_file
copy:
dest: "{{ output_file }}"
content: 'hostname,distribution,version,release,uptime'
owner: "{{ whoami.stdout }}"
run_once: yes
- name: fill os information
lineinfile:
path: "{{ output_file }}"
line: "{{ ansible_hostname }},\
{{ ansible_distribution }},\
{{ ansible_distribution_version }},\
{{ ansible_distribution_release }},\
{{ ansible_uptime_seconds }}"
# Tries to prevent concurrent writes.
throttle: 1
delegate_to: localhost
任何帮助都是值得赞赏的。
尝试了几次转换,但无法使其正常工作。
答:
3赞
Zeitounator
11/4/2022
#1
实际上,在官方文档中有一个(有点难以找到)关于复杂数据操作的示例,这些操作完全符合您的要求(在页面底部查看)。
下面是一个完整的示例 playbook,用于在 localhost 上运行它
---
- hosts: localhost
tasks:
- name: Show the uptime in days/hours/minutes/seconds
ansible.builtin.debug:
msg: Uptime {{ now().replace(microsecond=0) - now().fromtimestamp(now(fmt='%s') | int - ansible_uptime_seconds) }}
这在我的机器上给出:
PLAY [localhost] ************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [localhost]
TASK [Show the uptime in days/hours/minutes/seconds] ************************************************************************************************************
ok: [localhost] => {
"msg": "Uptime 1 day, 3:56:34"
}
PLAY RECAP ******************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
评论
0赞
JDFreez
11/7/2022
tnx 进行回复。我理解了这部分,但我试图实现的是将该答案输出到输出文件中。我不知道该怎么做。因此,任务的结果(在本例中为“正常运行时间 1 天,3:56:34”)需要成为 csv 文件的一部分。有什么建议吗?
1赞
Zeitounator
11/7/2022
好吧,将示例中的调试任务更改为另一个将写入文件的任务,例如或.....lineinfile
copy
1赞
user22223187
7/14/2023
#2
- name: Show the uptime in days/hours/minutes/seconds
set_fact:
uptime: "{{ ansible_facts['facter_system_uptime']['uptime'] }}"
- name: fill os information
lineinfile:
path: "{{ output_file }}"
line: "{{ ansible_hostname }},\
{{ ansible_distribution }},\
{{ ansible_distribution_version }},\
{{ ansible_distribution_release }},\
{{ ansible_facts.kernel }},\
{{ uptime }}"
throttle: 1 # to try to prevent concurrent writes
delegate_to: localhost
评论