Ansible модуль mysql_user не принимает зашифрованный пароль

При написании сборника игр для настройки MySQL и администратора я столкнулся с проблемой добавления зашифрованного пароля root.

При использовании простого текстового пароля и не включая encrypted=yes кажется, все работает.

Я хотел бы включить зашифрованный пароль [SELECT password('test')] в моей пьесе.

Как видно из приведенного ниже кода, я добавил зашифрованный пароль в поле пароля и к своему ~/.my.cnf файл и добавил encrypted=yes к игре.

Но после запуска playbook я получаю ошибку. Пожалуйста, помогите мне выяснить, где я делаю ошибку, или укажите мне соответствующую документацию или исправление. Я обыскал сеть StackExchange и посмотрел на официальную документацию Ansible и его модуль mysql_user, но безуспешно.

Система: Debian 8.1

Сообщение об ошибке:

msg: unsupported parameter for module: encrypted

Код Playbook:

---
- hosts: Databases
remote_user: admin
sudo: yes
tasks:

#Get current hostname
- name: Getting current hostname.
raw: "hostname"register: current_hostname

# Update all installed packages to the latest version
- name: Update all installed packages to the latest version.
apt:  upgrade=dist update_cache=yes

# Installing software
- name: Installing HTTP Server.
apt: name=apache2 state=latest

- name: Installing MySQL Server.
apt: name={{ item }} state=latest
with_items:
- mysql-server
- python-mysqldb

- name: Start the MySQL service
service:
name: mysql
state: started
enabled: true

- name: update mysql root password for all root accounts
mysql_user:
name=root
host={{ item }}
password="*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29"encrypted=yes
login_user=root
login_password=""check_implicit_admin=yes
priv="*.*:ALL,GRANT"with_items:
- "{{ current_hostname.stdout }}"- 127.0.0.1
- ::1
- localhost

- name: Copy the root credentials as .my.cnf file
template: src=files/home/admin/my.cnf dest=~/.my.cnf mode=0600

- name: Installing php5
apt: name={{ item }} state=latest
with_items:
- php5
- php5-mysql

# Config adminer
- name: Making new adminer folder
file: path=/usr/share/adminer state=directory

- name: Downloading latest version of adminer
command: 'wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php'

- name: Making symbolic link. latest.php --> adminer.php
file: path=/usr/share/adminer/adminer.php src=/usr/share/adminer/latest.php state=link

- name: Writing alias to apache2 adminer.conf
raw: 'echo "Alias /adminer.php /usr/share/adminer/adminer.php" | sudo tee /etc/apache2/conf-available/adminer.conf'

- name: Enabling adminer.conf in apache2
command: 'a2enconf adminer.conf'

- name: Restarting Apache2
command: '/etc/init.d/apache2 restart'

мой ~/.my.conf файл выглядит так

[client]
user=root
password=*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29

——————Оригинальные вопросы заканчиваются здесь ——————

С помощью @ydaetskcoR ниже и пользователей в разделе комментариев я смог выяснить, что проблема была в ANSIBLE 1.7 (по умолчанию в Debian 8.1), не имеющем зашифрованный модуль. Я смог обойти это с помощью командного модуля.

мой рабочий код:

---
- hosts: Database
remote_user: admin
sudo: yes
tasks:

#Get current hostname
- name: Getting current hostname.
command: hostname
register: current_hostname

# Update all installed packages to the latest version
- name: Update all installed packages to the latest version.
apt:  upgrade=dist update_cache=yes

# Installing software
- name: Installing HTTP Server.
apt: name=apache2 state=latest

- name: Installing MySQL Server.
apt: name={{ item }} state=latest
with_items:
- mysql-server
- python-mysqldb

- name: Start the MySQL service
service:
name: mysql
state: started
enabled: true

- name: Check if root pass is blank
shell: mysql -u root -e ";"register: blank_root_pass
failed_when: false
- name: update mysql root password for all root accounts
shell: mysql -u root -e "SET PASSWORD FOR 'root'@'{{ item }}' = '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';"with_items:
- "{{ current_hostname.stdout }}"- 127.0.0.1
- ::1
- localhost
when: 'blank_root_pass.stderr==""'

- name: Installing php5
apt: name={{ item }} state=latest
with_items:
- php5
- php5-mysql

# Config adminer
- name: Making new adminer folder
file: path=/usr/share/adminer state=directory

- name: Downloading latest version of adminer
command: 'wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php'

- name: Making symbolic link. latest.php --> adminer.php
file: path=/usr/share/adminer/adminer.php src=/usr/share/adminer/latest.php state=link

- name: Writing alias to apache2 adminer.conf
shell: 'echo "Alias /adminer.php /usr/share/adminer/adminer.php" | sudo tee /etc/apache2/conf-available/adminer.conf'

- name: Enabling adminer.conf in apache2
command: 'a2enconf adminer.conf'

- name: Restarting Apache2
command: '/etc/init.d/apache2 restart'

Если вы видите что-то опасное или неуместное, пожалуйста, оставьте комментарий. Пожалуйста, прекратите редактировать мой звонок для обратной связи.

1

Решение

Как udondan упомянуто, зашифрованный вариант mysql_user был добавлен в Ansible 2.0.

Очевидно, что если вы обновитесь до Ansible 2.0, вы можете использовать его, как и сейчас.

В качестве альтернативы вам придется добавить пользователя напрямую через модуль оболочки.

- name: check if root pass is blank

shell: mysql -uroot -e ";"
register: blank_root_pass

failed_when: false

changed_when: false

########################################################

- name: update mysql root password for all root accounts

shell: mysql -uroot -e "SET PASSWORD FOR 'root'@'{{ item }}' = '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';"
with_items:
- "{{ current_hostname.stdout }}"- 127.0.0.1
- ::1
- localhost

#Error 1045 returned when unable to login with user/pass combo
when: 'ERROR 1045' in blank_root_pass.stderr

Я также добавил предварительную проверку того, что пароль root на самом деле пуст, и использовал это как условие для второй задачи. Поскольку вы входите в систему как пользователь root и меняете пароль, вторая задача не выполнится при втором запуске без этой проверки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]