Install MySQL using Ansible, using an idempotent script
This Ansible role will install MySQL on a *nix and may be run multiple times without failure, even though root’s password is changed when running it.
The order is important and here are some tips:
- The 'etc.my.cnf’ template does not include user and password entries
- The '.my.cnf’ template only includes user and password entries and is copied to root’s home directory (since my script runs as root), not the deploy’s home directory.
- Root’s password is set for security reasons
- Deploy’s only granted access to the application’s databases. I use db1 and db2 as examples here.
Put the below section in your /tasks/main.yml file.
---
- name: Install MySQL packages apt: pkg= state=installed with_items: - bundler - mysql-server-core-5.5 - mysql-client-core-5.5 - libmysqlclient-dev - python-mysqldb - mysql-server - mysql-client - build-essential- name: Remove the MySQL test database
action: mysql_db db=test state=absent- name: Create global my.cnf
template: src=etc.my.cnf dest=/etc/mysql/my.cnf- name: Create databases
mysql_db: name= state=present collation=utf8_general_ci encoding=utf8
with_items:
- db1
- db2- name: Add deploy DB user and allow access to news_* databases
mysql_user: name= password= host="%" priv=db1.*:ALL/db2.*:ALL,GRANT state=present- name: Set root password
mysql_user: name=root password= host="" priv=*.*:ALL,GRANT state=present
with_items:
- ""
- 127.0.0.1
- ::1
- localhost- name: Create local my.cnf for root user
template: src=my.cnf dest=/root/.my.cnf owner=root mode=0600- name: Restart the MySQL service
action: service name=mysql state=restarted enabled=true
References: