0
respostas

Dúvida no Ex. 1 da Aula 2 - Deployando uma aplicação web

Olá, tudo bem?

Eu entendi o conceito para os scripts puppet, mas pesquisando vi que dá para trabalhar com módulos, que é até uma forma mais segura e de boas práticas assim como código em outras linguagens. Bom estou tentando trabalhar com o vagrant e puppet mas para um projeto python com django, assim é dieferente de um projeto java.

estou tentando fazer um script puppet que vai instalar o django, fazer o clone do projeto no github, instalar o requirements do projeto python com pip install requirements.txt, instalar o my sql, criar o banco, instalar o uwsgi, o nginx, virtualenv e intalar e configurar o jenkis

Até agora eu tenho as pastas organizadas em módulos da seguinte forma:

files
         (diretório vazio)
      manifests
          nodes.pp
          web.pp
       modules
           django
               manifests
                   init.pp
               files
                   (diretório vazio)
            git
                manifests
                    init.pp
                files
                    (diretório vazio)
             postgres

Para executar os scripts do puppet eu uso o comando:

sudo puppet apply --modulepath=/vagrant/modules /vagrant/manifests/web.pp

No arquivo init.pp da pasta git eu tenho o script:

class git{
    include git::install
}

class git::install{
    package { 'git:':
        ensure => present
    }
}

define git::clone ( $path, $dir){
    exec { "clone-$name-$path":
        command => "/usr/bin/git clone git@github.com:$name $path/$dir",
        creates => "$path/$dir",
        require => [Class["git"], File[$path]],
    }
}

No arquivo init.pp da pasta django eu tenho o script:

class django{
    include django::install, django::clone, django::environment
}

class django::install {
    package { [ "python", "python-dev", "python-virtualenv", "python-pip",
                "python-psycopg2", "python-imaging"]:
        ensure => present,
    }
}

class django::clone {
    git::clone { 'My GitHub repository name':
        path => '/home/vagrant/',
        dir => 'django',
    }
}

 define django::virtualenv( $path ){
     exec { "create-ve-$path":
         command => "/usr/bin/virtualenv -q $name",
         cwd => $path,
         creates => "$path/$name",
         require => [Class["django::install"]],
     }
 }

class django::environment {
    django::virtualenv{ 've':
        path => '/usr/local/app',
    }
}

No arquivo nodes.pp eu chamo os outros da seguinte forma:

node default {
        include postgres
        include git
        include django
    }

e no web.pp eu eu importo o que tem no nodes:

import ' nodes.pp '

só que ta dando problema e não está clonando o projeto do git, quando executo o comando ele dá erro:

Could not find dependency File[/home/vagrant/] for Exec[clone-radar-parlamentar/radar-/home/vagrant/] at /vagrant/modules/git/manifests/init.pp:16

Não estou conseguindo resolver, como faço para tal?

Obs: onde está como o nome 'My GitHub repository name' eu coloco o nome do projeto do github corretamente.

Como faço para resolver?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software