Evaluate variable immediately, save for later

Hey, so I have the following sequence where I first register a variable, then want to evaluate stats from it later but I want the stats from when the variable was first created. What is the best way to do this?

I could see registering a second variable immedeatly that evaulates properties of the variable that was just registered, but it doesn’t seem too ‘clean’ of a method.

What I am trying to do here is register a variable about a directory path, and only ‘mysql_install_db’ if that directory doesn’t exist. However, I have to create that directory at some point, so by the time I run ‘mysql_install_db’ that ‘p.stat.isdir’ will evaluate to true every time, even if it didn’t exist a second ago. So I somehow need to define and cache a variable one step ahead.

`

  • stat: path=/mnt/mysql
    register: p

  • name: Create /mnt/mysql directory for database
    file:
    path: /mnt/mysql
    state: directory
    mode: 0750
    owner: mysql
    group: mysql

  • name: Install mysql database in atypical datadir

command: mysql_install_db --user=mysql --datadir=/mnt/mysql
when: p.stat.isdir is defined and p.stat.isdir == False
`

Thanks for any help. It is greatly appriciated!

Hi,

try use handler:

  • stat: path=/mnt/mysql
    register: p

  • name: Create /mnt/mysql directory for database
    file:
    path: /mnt/mysql
    state: directory
    mode: 0750
    owner: mysql
    group: mysql
    when: not p.stat.exists
    notify:

  • create database

handlers:

  • name: create database
    command: mysql_install_db --user=mysql --datadir=/mnt/mysql

First time, there will not be /mnt/mysql, so we will create it in second task. It has changed state, therefore we will call handler and create a database. To be sure, we will skip it every time, the path already exists.

Thanks! For some reason I was stuck on using exclusively handlers or registered variables. Using them in combination is definitely the way to go.
-C