Ansible设置mysql root密码

Mad*_*ing 5 ansible

你们中有人有想法构建一个 yml 用于 mysql 更新 root 密码并授予权限吗?我已经创建了我的剧本,并且在全新安装时它按预期工作,完全没有问题。但是,当我再次进行 vagrant 配置时,它现在无法设置 root 密码,并且出现错误。下面是我的代码

mysql.yml

---
- name: Install the MySQL packages
  apt: name={{ item }} state=installed update_cache=yes
  with_items:
    - mysql-server
    - mysql-client
    - python-mysqldb
    - libmysqlclient-dev

- name: drop database {{ dbname }}
  mysql_db:
    name: "{{ dbname }}"
    login_user: "{{ dbuser }}"
    login_password: "{{ dbpass }}"
    state: absent
  delegate_to: "{{ dbhost }}"
  run_once: true

- name: create database {{ dbname }}
  mysql_db:
    name: "{{ dbname }}"
    login_user: "{{ dbuser }}"
    login_password: "{{ dbpass }}"
    state: present
  delegate_to: "{{ dbhost }}"
  run_once: true

- name: ensure mysql is running and starts on boot
  service: name=mysql state=started enabled=true

- name: copy .my.cnf file with root password credentials
  template: src=my.cnf.j2 dest=/root/.my.cnf owner=root mode=0600

- name: update mysql root password for all root accounts "{{ dbpass }}"
  mysql_user: name={{ dbuser }} host={{ item }} password="{{ dbpass }}" priv="{{ dbname }}.*:ALL,GRANT"
  with_items:
    - localhost
    - 127.0.0.1

- name: grant privilege on "{{ dbname }}" to "{{ dbuser }}"
  mysql_user:
    name: "{{ item.user }}"
    host: "{{ item.host }}"
    password: "{{ dbpass }}"
    login_user: "{{ dbuser }}"
    login_password: "{{ dbpass }}"
    priv: "{{ dbname }}.*:ALL"
    state: present
  with_items:
    - { user: "{{ dbuser }}" , host: localhost }
    - { user: "{{ dbuser }}" , host: 127.0.0.1 }
  delegate_to: "{{ dbhost }}"
  run_once: true

- name: ensure anonymous users are not in the database
  mysql_user: name='' host={{ item }} state=absent
  with_items:
    - 127.0.0.1
    - localhost

- name: remove the test database
  mysql_db: name=test state=absent
Run Code Online (Sandbox Code Playgroud)

my.cnf.j2

[client]
user=root
password={{ dbpass }}
Run Code Online (Sandbox Code Playgroud)

默认值/main.yml

---
dbhost: localhost
dbname: mydb
dbuser: root
dbpass: root
Run Code Online (Sandbox Code Playgroud)

如果是全新安装,我可以做所有事情,但第二次运行它会出现以下错误

在此输入图像描述

Kon*_*rov 4

似乎您在尝试通过下一个任务更改密码之前更新.my.cnf新密码。

并且您可能希望host_all在更新密码时使用选项,因为with_items多次运行模块,并且有可能出现相同的错误:在第一项上更改密码,但在第二项上无法连接。