DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

29
DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

Transcript of DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

Page 1: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

DevOps: Falando um pouco sobredesenvolvimento orientado a testes

com Puppet

DevOps: Falando um pouco sobredesenvolvimento orientado a testes

com Puppet

Page 2: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

http://about.me/mfandrade

Quem sou eu?

Page 3: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

Puppet?

Page 4: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

MANIFEST

MANIFEST

MANIFEST

Page 5: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

MANIFEST

RESOURCE

RESOURCE

RESOURCE

MANIFEST

RESOURCE

RESOURCE

MANIFEST

RESOURCE

Page 6: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

MANIFEST

CATALOG

RESOURCE

RESOURCE

RESOURCE

MANIFEST

RESOURCE

RESOURCE

MANIFEST

RESOURCE

compile

Page 7: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

DECLARATIVA

Page 8: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

IDEMPOTENTE

Page 9: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// rpm basedpackage { 'mysql':  ensure => installed,}

file { '/etc/my.cnf':  ensure  => present,  source  => 'puppet:///modules/mysql/my.cnf',   require => Package['mysql'],}

service { 'mysqld':  ensure    => running,  enabled   => true,  subscribe => File['/etc/my.cnf'],}

1

Page 10: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// deb basedpackage { 'mysql­server':  ensure => installed,}

file { '/etc/mysql/my.cnf':  ensure  => present,  source  => 'puppet:///modules/mysql/my.cnf',   require => Package['mysql­server'],}

service { 'mysql':  ensure    => running,  enabled   => true,  subscribe => File['/etc/mysql/my.cnf'],}

2

Page 11: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// mysql.pp // rpm and deb based$pkg = 'mysql'$cfg = '/etc/my.cnf'$srv = 'mysqld'

if $::osfamily == 'Debian' {  $pkg = 'mysql­server'  $cfg = '/etc/mysql/my.cnf'  $srv = 'mysql'

}

// cont...

Page 12: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// mysql.pp // rpm and deb based$pkg = 'mysql'$cfg = '/etc/my.cnf'$srv = 'mysqld'

if $::osfamily == 'Debian' {  $pkg = 'mysql­server'  $cfg = '/etc/mysql/my.cnf'  $srv = 'mysql'

}

// cont...

Page 13: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

3// mysql.pp // rpm and deb basedif $::osfamily == 'Debian' {  $pkg = 'mysql­server'  $cfg = '/etc/mysql/my.cnf'  $srv = 'mysql'

} elsif $::osfamily == 'RedHat' {  $pkg = 'mysql'  $cfg = '/etc/my.cnf'  $srv = 'mysqld'

} else fail('Unsupported osfamily')

// cont...

Page 14: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

3// cont...package { $pkg:  ensure => installed,}

file { $cfg:  ensure  => present,  source  => 'puppet:///modules/mysql/my.cnf',   require => Package[$pkg],}

service { $srv:  ensure    => running,  enabled   => true,  subscribe => File[$cfg],}

Page 15: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

Como testar isso?

Page 16: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

Como testar isso?

cucumber-puppethttp://projects.puppetlabs.com/projects/cucumber-puppet/

rspec-puppethttp://rspec-puppet.com/tutorial/

puppet-lint * http://puppet-lint.com/

Page 17: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

rspec-puppet

Page 18: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

rspec-puppetrequire 'rspec'require 'rspec­puppet'

describe 'when installing mysql' do  it { should contain_package('mysql').with {    :ensure => 'installed'  }}

  it { should contain_file('/etc/my.cnf').with {    :ensure => 'present',    :source => 'puppet:///modules/mysql/my.cnf',  }}

  it { should contain_service('mysqld').with {    :ensure => 'running',    :enable => true  }}end

Page 19: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

rspec-puppetrequire 'rspec'require 'rspec­puppet'

describe 'when installing mysql' do  it { should compile }

end

Page 20: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

rspec-puppetrequire 'rspec'require 'rspec­puppet'

describe 'when installing mysql' do  it { should compile }

end

SMOKE TE

STSMOK

E TEST

Page 21: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

$ puppet apply ­­noop ­­verbose mysql.pp

Page 22: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

$ puppet apply ­­noop ­­verbose mysql.ppError: Syntax error at 'fail'; expected '}' at mysql.pp:13 on localhostError: Invalid parameter enabled on Service[mysql] at mysql.pp:28 on localhost

Page 23: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// mysql.pp // rpm and deb basedif $::osfamily == 'Debian' {  $pkg = 'mysql­server'  $cfg = '/etc/mysql/my.cnf'  $srv = 'mysql'

} elsif $::osfamily == 'RedHat' {  $pkg = 'mysql'  $cfg = '/etc/my.cnf'  $srv = 'mysqld'

} else fail('Unsupported osfamily')

// cont...

Page 24: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// mysql.pp // rpm and deb basedif $::osfamily == 'Debian' {  $pkg = 'mysql­server'  $cfg = '/etc/mysql/my.cnf'  $srv = 'mysql'

} elsif $::osfamily == 'RedHat' {  $pkg = 'mysql'  $cfg = '/etc/my.cnf'  $srv = 'mysqld'

} else { fail('Unsupported osfamily') }

// cont...

Page 25: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// cont...package { $pkg:  ensure => installed,}

file { $cfg:  ensure  => present,  source  => 'puppet:///modules/mysql/my.cnf',   require => Package[$pkg],}

service { $srv:  ensure    => running,  enabled   => true,  subscribe => File[$cfg],}

Page 26: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

// cont...package { $pkg:  ensure => installed,}

file { $cfg:  ensure  => present,  source  => 'puppet:///modules/mysql/my.cnf',   require => Package[$pkg],}

service { $srv:  ensure    => running,  enable    => true,  subscribe => File[$cfg],}

Page 27: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

$ puppet apply ­­noop ­­verbose mysql.ppNotice: Compiled catalog for notebook in environment production in 3.30 secondsInfo: Applying configuration version '1444280295'Notice: /Stage[main]/Mysql/Package[mysql­server]/ensure: current_value purged, should be present (noop)Notice: /Stage[main]/Mysql/Service[mysql]/ensure: current_value stopped, should be running (noop)Info: /Stage[main]/Mysql/Service[mysql]: Unscheduling refresh on Service[mysql]Notice: Class[Mysql]: Would have triggered 'refresh' from 2 eventsNotice: Stage[main]: Would have triggered 'refresh' from 1 eventsNotice: Finished catalog run in 0.53 seconds

Page 28: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

Características

Simplicidade

Curva de aprendizado

Pouca profundidade

Design evolutivo

https://docs.puppetlabs.com/

Page 29: DevOps: Falando um pouco sobre desenvolvimento orientado a testes com Puppet

OBRIGADOOBRIGADO