1
resposta

Script gera erro no define

exec { "apt-update":
        command => "/usr/bin/apt-get update"
}

exec { "dbcreate":
        command => "/usr/bin/mysqladmin -u root -p create musicjungle",
        require => Service["mysql"],
        unless => "/usr/bin/mysql -u root musicjungle"
}

exec { "securedb":
        command => "mysql -uroot -e \"GRANT ALL PRIVILEGES ON * TO 'musicjungle'@'%' IDENTIFIED BY 'minha-senha';\" musicjungle",
        unless  => "mysql -umusicjungle -pminha-senha musicjungle",
        path => "/usr/bin",
        require => Exec["dbcreate"]
}

file_line { "production":
        file => "/etc/default/tomcat7",
        line => "JAVA_OPTS=\"\$JAVA_OPTS -Dbr.com.caelum.vraptor.enviroment=production\"",
        require => Package["tomcat7"],
        notify => Service["tomcat7]
}

define file_line($file, $line) {
    exec { "/bin/echo '$line' >> '$file'":
        unless => "/bin/grep -qfx '$(line) '$(file)'"
    }
}


package { ["openjdk-7-jre", "tomcat7", "mysql-server"]:
        ensure => installed,
        require => Exec["apt-update"]
}
service { "tomcat7":
        ensure => running,
        enable => true,
        hasstatus => true,
        require => Package["tomcat7"]
}

service { "mysql":
        ensure => running,
        enable => true,
        hasstatus => true,
        require => Package["mysql-server"]
}

Após a execução, o seguinte erro é exibido:

Error: Could not parse for environment production: Syntax error at '$line'; expected '}' at /vagrant/manifests/web.pp:26 on node precise32.domain.name
1 resposta

Olá Felipe!

Na linha com o código unless => "/bin/grep -qfx '$(line) '$(file)'" você colocou a variável $(line) entre aspas, mas a variável $(file) não está. Só tem uma aspas simples depois desta última variável. Tanto que observando esta linha com defeito, as variáveis enter aspas simples devem ficar verdes. :)

Colocando mais uma aspas simples para envolver a variável, o código deve funcionar.

Espero ter ajudado! Bons estudos!