I'm a little confused about best practices for indempotence in Ansible.   
 Here's a quick playbook that does the following:

   - installs mysql-server on a minimal debian system, preseeding the 
   questions (ugh) the package asks to set the mysql password
   - installs zoneminder
   - conditionally copies in a gzipped dumpfile of a pre-configured 
   zoneminder setup, unzips it, restores it
   - and links the zoneminder stuff into the apache2 web configuration


Where I'm confused is the convoluted gymnastics needed to do things 
conditionally, only if there was something done above.   The playbook below 
works fine, but it sure seems like a lot of work to do to make each step 
indempotent.  Am I missing something in best practices or syntax ?

Note - yes I set a db password to 'root' in this example, and I'm keying 
off stuff stashed in /tmp existing or not.  Don't sweat that part, it's 
just an example.  I'm interested in better understanding best practices re: 
how to do the playbook structure and logic/flow.  Thanks.

 

---

 ### unfortunately, this one always comes up as changed

- name: mysql | set debconf values
  debconf: name='mysql-server-5.5' question={{ item.question}} value={{ 
item.value }} vtype={{ item.vtype }}
  with_items:
     - { question: 'mysql-server/root_password',       value: 'root', 
vtype: 'password' }
     - { question: 'mysql-server/root_password_again', value: 'root', 
vtype: 'password' }

- name: Install Mysql
  apt: package={{ item }} state=present
  with_items:

          - mysql-server
 

- name: install zoneminder
  apt: package={{ item }} state=present
  with_items:
     - zoneminder

### check to see if we ran before by looking for the extracted db dump 

- name: check for previous database dumpfile
  stat: path=/tmp/zm.dump
  register: dumpfile

### if the extracted file isn't there, we need to copy the gzipped file in 

- name: copy db dump into place
  copy: src=zm.dump.gz dest=/tmp
  when: dumpfile.stat.exists == False
  register: zipped_dumpfile


### if we took action in the previous step, we need to unzip what we copied 
in

- name: unzip db dump
  command: gunzip -f /tmp/zm.dump.gz
  when: zipped_dumpfile.changed == True
  register: dumpfile_unzipped

 

### and that also means we need to restore the db dump to put it into place
- name: restore configured database
  shell: mysql -uroot -proot zm < /tmp/zm.dump
  when: dumpfile_unzipped.changed == True
  notify: restart zoneminder

### similarly, we link zoneminder into the apache web and restart apache, 
only if needed 

- stat: path=/etc/apache2/sites-enabled/001-zm
  register: apache_zm_site

- name: symlink zoneminder into web
  file: src=/etc/zm/apache.conf dest=/etc/apache2/sites-enabled/001-zm 
state=link
  when: apache_zm_site.stat.exists == False
  notify: restart apache


-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/b63af770-6277-4f2e-846b-69b1178591ed%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to