#include <chrono>
typedef std::chrono::system_clock Clock;
auto now = Clock::now();
auto seconds = std::chrono::time_point_cast<std::chrono::seconds>(now);
auto fraction = now - seconds;
time_t cnow = Clock::to_time_t(now);
Затем вы можете распечатать time_t с точностью до секунд, а затем распечатать любую фракцию. Может быть миллисекунды, микросекунды или что-то еще. Чтобы конкретно получить миллисекунды:
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(fraction);
std::cout << milliseconds.count() << '\n';
Отказ от ответственности: я запускаю Ansible только на хостах Linux, поэтому я полагаю, что на хостах Windows все по-другому.
Вы не указываете ansible_facts
, а вместо этого просто начинаете с определенного корневого факта.
В первом случае факт, к которому вы пытаетесь добраться, не поможет вам, потому что он возвращает список всех IP-адресов в системе. Даже если есть только один, он все равно возвращает список, с которым вы не можете просто сравнить строки.
Это должно сделать то, что вы хотите в первую очередь:
- name: Change the hostname to newname2
win_hostname:
name: newname2
register: res
when: "ansible_default_ipv4.address == '10.0.0.1'"
Вы собираетесь дублировать этот блок кода, по одному на хост? Если это так, рассмотрите возможность установки переменной для поиска IP и нового имени:
- hosts: all
vars:
ip_newname:
10.0.0.1: newname1
10.0.0.2: newname2
10.0.0.3: newname3
tasks:
- name: Change the hostname
win_hostname:
name: "{{ ip_newname[ansible_default_ipv4.address] }}"
register: res
when: ansible_default_ipv4.address in ip_newname.keys()
- name: Reboot
win_reboot:
when: res is defined and res.reboot_required