Ansible 时区模块失败(不同操作系统上的不同原因)
Ansible timezone module fails (different reasons on different OSes)
我决定重构一些剧本并尝试新的 timezone
module。
我尝试的任务是手册页中给出的示例的逐字副本:
- name: set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
它在我尝试过的每个系统上都失败了。 Vagrant 机器的结果:
在 Debian 8 (debian/jessie64
) 上:
TASK [set timezone to Asia/Tokyo] **********************************************
fatal: [debian]: FAILED! => {"changed": false, "cmd": "/usr/bin/timedatectl set-timezone Asia/Tokyo", "failed": true, "msg": "Failed to set time zone: The name org.freedesktop.PolicyKit1 was not provided by any .service files", "rc": 1, "stderr": "Failed to set time zone: The name org.freedesktop.PolicyKit1 was not provided by any .service files\n", "stdout": "", "stdout_lines": []}
在 CentOS 7 (centos/7
) 上 - 不同于 Debian:
TASK [set timezone to Asia/Tokyo] **********************************************
fatal: [centos]: FAILED! => {"changed": false, "cmd": "/usr/bin/timedatectl set-timezone Asia/Tokyo", "failed": true, "msg": "Failed to set time zone: Interactive authentication required.", "rc": 1, "stderr": "Failed to set time zone: Interactive authentication required.\n", "stdout": "", "stdout_lines": []}
在 Ubuntu 16.04 (ubuntu/xenial64
) - 与 CentOS 相同,与 Debian 不同:
TASK [set timezone to Asia/Tokyo] **********************************************
fatal: [ubuntu]: FAILED! => {"changed": false, "cmd": "/usr/bin/timedatectl set-timezone Asia/Tokyo", "failed": true, "msg": "Failed to set time zone: Interactive authentication required.", "rc": 1, "stderr": "Failed to set time zone: Interactive authentication required.\n", "stdout": "", "stdout_lines": []}
我错过了什么吗?是否需要一些依赖性?
timedatectl
需要 sudo
权限。
- name: set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
become: yes
become_method: sudo
检查是否安装了 dbus 包(在 Ubuntu 上测试):
dpkg -l dbus
并安装:
apt-get install -y dbus
否则会出现错误:
# /usr/bin/timedatectl
Failed to create bus connection: No such file or directory
我决定重构一些剧本并尝试新的 timezone
module。
我尝试的任务是手册页中给出的示例的逐字副本:
- name: set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
它在我尝试过的每个系统上都失败了。 Vagrant 机器的结果:
在 Debian 8 (
debian/jessie64
) 上:TASK [set timezone to Asia/Tokyo] **********************************************
fatal: [debian]: FAILED! => {"changed": false, "cmd": "/usr/bin/timedatectl set-timezone Asia/Tokyo", "failed": true, "msg": "Failed to set time zone: The name org.freedesktop.PolicyKit1 was not provided by any .service files", "rc": 1, "stderr": "Failed to set time zone: The name org.freedesktop.PolicyKit1 was not provided by any .service files\n", "stdout": "", "stdout_lines": []}在 CentOS 7 (
centos/7
) 上 - 不同于 Debian:TASK [set timezone to Asia/Tokyo] **********************************************
fatal: [centos]: FAILED! => {"changed": false, "cmd": "/usr/bin/timedatectl set-timezone Asia/Tokyo", "failed": true, "msg": "Failed to set time zone: Interactive authentication required.", "rc": 1, "stderr": "Failed to set time zone: Interactive authentication required.\n", "stdout": "", "stdout_lines": []}在 Ubuntu 16.04 (
ubuntu/xenial64
) - 与 CentOS 相同,与 Debian 不同:TASK [set timezone to Asia/Tokyo] **********************************************
fatal: [ubuntu]: FAILED! => {"changed": false, "cmd": "/usr/bin/timedatectl set-timezone Asia/Tokyo", "failed": true, "msg": "Failed to set time zone: Interactive authentication required.", "rc": 1, "stderr": "Failed to set time zone: Interactive authentication required.\n", "stdout": "", "stdout_lines": []}
我错过了什么吗?是否需要一些依赖性?
timedatectl
需要 sudo
权限。
- name: set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
become: yes
become_method: sudo
检查是否安装了 dbus 包(在 Ubuntu 上测试):
dpkg -l dbus
并安装:
apt-get install -y dbus
否则会出现错误:
# /usr/bin/timedatectl
Failed to create bus connection: No such file or directory