If cloud-config contains list of user:password pairs as in example below
chpasswd:
list:
- user1:pwd001
- user2:pwd002
cc_set_passwords module fails to change passwords with error:
Feb 17 15:52:48 si-man [CLOUDINIT] stages.py[DEBUG]: Running module set-passwords (<module 'cloudinit.config.cc_set_passwords' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_set_passwords.py'>) with frequency once-per-instance
Feb 17 15:52:48 si-man [CLOUDINIT] handlers.py[DEBUG]: start: modules-config/config-set-passwords: running config-set-passwords with frequency once-per-instance
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Writing to /var/lib/cloud/instances/6d822e81-98a1-4b43-bed2-db8d0cf045bb/sem/config_set_passwords - wb: [420] 25 bytes
Feb 17 15:52:48 si-man [CLOUDINIT] helpers.py[DEBUG]: Running config-set-passwords using lock (<FileLock using file '/var/lib/cloud/instances/6d822e81-98a1-4b43-bed2-db8d0cf045bb/sem/config_set_passwords'>)
Feb 17 15:52:48 si-man [CLOUDINIT] cc_set_passwords.py[DEBUG]: Changing password for ["['user1"]:
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Running command ['chpasswd'] with allowed return codes [0] (shell=False, capture=True)
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[WARNING]: Failed to set passwords with chpasswd for ["['user1"]
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Failed to set passwords with chpasswd for ["['user1"]#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_set_passwords.py", line 121, in handle#012 util.subp(['chpasswd'], ch_in)#012 File "/usr/lib/python3/dist-packages/cloudinit/util.py", line 1836, in subp#012 cmd=args)#012cloudinit.util.ProcessExecutionError: Unexpected error while running command.#012Command: ['chpasswd']#012Exit code: 1#012Reason: -#012Stdout: ''#012Stderr: "chpasswd: (user ['user1) pam_chauthtok() failed, error:\nAuthentication token manipulation error\nchpasswd: (line 1, user ['user1) password not changed\n"
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Running command ['passwd', '--expire', "['user1"] with allowed return codes [0] (shell=False, capture=True)
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[WARNING]: Failed to set 'expire' for ['user1
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Failed to set 'expire' for ['user1#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_set_passwords.py", line 136, in handle#012 util.subp(['passwd', '--expire', u])#012 File "/usr/lib/python3/dist-packages/cloudinit/util.py", line 1836, in subp#012 cmd=args)#012cloudinit.util.ProcessExecutionError: Unexpected error while running command.#012Command: ['passwd', '--expire', "['user1"]#012Exit code: 1#012Reason: -#012Stdout: ''#012Stderr: "passwd: user '['user1' does not exist\n"
Feb 17 15:52:48 si-man [CLOUDINIT] cc_set_passwords.py[DEBUG]: 2 errors occured, re-raising the last one
If cloud-config contains list of user:password pairs as in example below
chpasswd:
list:
- user1:pwd001
- user2:pwd002
cc_set_passwords module fails to change passwords with error: config. cc_set_ passwords' from '/usr/lib/ python3/ dist-packages/ cloudinit/ config/ cc_set_ passwords. py'>) with frequency once-per-instance config/ config- set-passwords: running config- set-passwords with frequency once-per-instance cloud/instances /6d822e81- 98a1-4b43- bed2-db8d0cf045 bb/sem/ config_ set_passwords - wb: [420] 25 bytes set-passwords using lock (<FileLock using file '/var/lib/ cloud/instances /6d822e81- 98a1-4b43- bed2-db8d0cf045 bb/sem/ config_ set_passwords' >) passwords. py[DEBUG] : Changing password for ["['user1"]: ]#012Traceback (most recent call last):#012 File "/usr/lib/ python3/ dist-packages/ cloudinit/ config/ cc_set_ passwords. py", line 121, in handle#012 util.subp( ['chpasswd' ], ch_in)#012 File "/usr/lib/ python3/ dist-packages/ cloudinit/ util.py" , line 1836, in subp#012 cmd=args) #012cloudinit. util.ProcessExe cutionError: Unexpected error while running command. #012Command: ['chpasswd' ]#012Exit code: 1#012Reason: -#012Stdout: ''#012Stderr: "chpasswd: (user ['user1) pam_chauthtok() failed, error:\ nAuthentication token manipulation error\nchpasswd: (line 1, user ['user1) password not changed\n" 012Traceback (most recent call last):#012 File "/usr/lib/ python3/ dist-packages/ cloudinit/ config/ cc_set_ passwords. py", line 136, in handle#012 util.subp( ['passwd' , '--expire', u])#012 File "/usr/lib/ python3/ dist-packages/ cloudinit/ util.py" , line 1836, in subp#012 cmd=args) #012cloudinit. util.ProcessExe cutionError: Unexpected error while running command. #012Command: ['passwd', '--expire', "['user1"]#012Exit code: 1#012Reason: -#012Stdout: ''#012Stderr: "passwd: user '['user1' does not exist\n" passwords. py[DEBUG] : 2 errors occured, re-raising the last one
Feb 17 15:52:48 si-man [CLOUDINIT] stages.py[DEBUG]: Running module set-passwords (<module 'cloudinit.
Feb 17 15:52:48 si-man [CLOUDINIT] handlers.py[DEBUG]: start: modules-
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Writing to /var/lib/
Feb 17 15:52:48 si-man [CLOUDINIT] helpers.py[DEBUG]: Running config-
Feb 17 15:52:48 si-man [CLOUDINIT] cc_set_
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Running command ['chpasswd'] with allowed return codes [0] (shell=False, capture=True)
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[WARNING]: Failed to set passwords with chpasswd for ["['user1"]
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Failed to set passwords with chpasswd for ["['user1"
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Running command ['passwd', '--expire', "['user1"] with allowed return codes [0] (shell=False, capture=True)
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[WARNING]: Failed to set 'expire' for ['user1
Feb 17 15:52:48 si-man [CLOUDINIT] util.py[DEBUG]: Failed to set 'expire' for ['user1#
Feb 17 15:52:48 si-man [CLOUDINIT] cc_set_
The issue affects cloud-init installed in xenial- server- cloudimg- amd64-disk1. img g9e904bb- 0ubuntu1~ 16.04.4 g9e904bb- 0ubuntu1~ 16.04.4 g9e904bb- 0ubuntu1~ 16.04.4 500 zone-1. clouds. archive. ubuntu. com/ubuntu xenial-updates/main amd64 Packages dpkg/status 7.7~bzr1212- 0ubuntu1 500 zone-1. clouds. archive. ubuntu. com/ubuntu xenial/main amd64 Packages
# apt-cache policy cloud-init
cloud-init:
Installed: 0.7.8-49-
Candidate: 0.7.8-49-
Version table:
*** 0.7.8-49-
500 http://
100 /var/lib/
0.
500 http://
cc_set_passwords converts list of user:password lists to str and as result user names get corrupted.