Назад | Перейти на главную страницу

Puppet EXEC: выполнять часть кода только после выполнения другой части

У меня есть следующий код марионетки:

  exec { 'set mysql root password':
    user    => root,
    path   => "/usr/bin:/usr/sbin:/bin",
    command => "/usr/bin/mysqladmin -u root password \'${root_pwd}\'",
    onlyif  => 'grep /etc/mysql_root_password_setup.cf -nrw -e \'0\'', 
  }

  exec { 'set mysql hostname password':
    user    => root,
    path   => "/usr/bin:/usr/sbin:/bin",
    command => "/usr/bin/mysqladmin -u root -h ${::fqdn} password \'${root_pwd}\'",
    onlyif  => 'grep /etc/mysql_root_password_setup.cf -nrw -e \'0\'',
  }

  exec { 'Modify the Breadcrumb':
    user    => root,
    path   => "/usr/bin:/usr/sbin:/bin",
    command => "echo 1 > /etc/mysql_root_password_setup.cf",
    onlyif  => 'grep /etc/mysql_root_password_setup.cf -nrw -e \'0\'',
  }

Как видите, я выполняю три команды exec. Первый устанавливает пароль Mysql, второй делает то же самое, третий, однако, записывает 1 в файл хлебных крошек /etc/mysql_root_password_setup.cf.

Я хочу, чтобы третий exec выполнялся только после завершения первых двух exec.

Как я могу указать марионетке выполнить их в том порядке, в котором они определены в файле класса.

Вы можете использовать Puppet's require параметр.

Например:

  exec { 'set mysql root password':
    ... 
  }

  exec { 'set mysql hostname password':
    require => Exec['set mysql root password'],
    ...
  }

  exec { 'Modify the Breadcrumb':
    require => Exec['set mysql hostname password'],
    ...
  }