Continuous Delivery of yourContinuous Delivery of your
infrastructureinfrastructure
Kris Buytaert
@krisbuytaert
Kris BuytaertKris Buytaert
â—Ź I used to be a Dev,I used to be a Dev,
â—Ź Then Became an OpThen Became an Op
â—Ź Chief Trolling Officer and Open SourceChief Trolling Officer and Open Source
Consultant @inuits.euConsultant @inuits.eu
â—Ź Everything is an effing DNS ProblemEverything is an effing DNS Problem
â—Ź Building Clouds since before the bookstoreBuilding Clouds since before the bookstore
â—Ź Some books, some papers, some blogsSome books, some papers, some blogs
â—Ź Evangelizing devopsEvangelizing devops
Todays GoalsTodays Goals
â—Ź A reproducable way to deploy and upgradeA reproducable way to deploy and upgrade
(y)our infrastructure(y)our infrastructure
â—Ź AutomaticallyAutomatically
â—Ź FastFast
â—Ź ConsistentConsistent
â—Ź ContinuouslyContinuously
What's this devops thingWhat's this devops thing
anyhow ?anyhow ?
C(L)AMSC(L)AMS
â—Ź CultureCulture
â—Ź (Lean)(Lean)
â—Ź AutomationAutomation
â—Ź MeasurementMeasurement
â—Ź SharingSharing
Damon Edwards and John WillisDamon Edwards and John Willis
Gene KimGene Kim
devops (<)> continuous delilverydevops (<)> continuous delilvery
NirvanaNirvana
An “ecosystem” that supports continuous delivery, fromAn “ecosystem” that supports continuous delivery, from
infrastructure, data and configuration management toinfrastructure, data and configuration management to
business.business.
Through automation of the build, deployment, and testingThrough automation of the build, deployment, and testing
process, and improved collaboration between developers,process, and improved collaboration between developers,
testers, and operations, delivery teams can get changestesters, and operations, delivery teams can get changes
released in a matter of hours — sometimes even minutes–noreleased in a matter of hours — sometimes even minutes–no
matter what the size of a project or the complexity of its codematter what the size of a project or the complexity of its code
base.base.
Continuous Delivery , Jez HumbleContinuous Delivery , Jez Humble
How many times a day ?How many times a day ?
â—Ź 10 @ Flickr10 @ Flickr
â—Ź Deployments used to be painDeployments used to be pain
â—Ź Nobody dared to deploy a siteNobody dared to deploy a site
â—Ź Practice makes perfectPractice makes perfect
â—Ź Knowing you can vs constantly doing itKnowing you can vs constantly doing it
" Our job as engineers (and ops, dev-ops, QA," Our job as engineers (and ops, dev-ops, QA,
support, everyone in the company actually) is tosupport, everyone in the company actually) is to
enable the business goals. We strongly feel thatenable the business goals. We strongly feel that
in order to do that you must havein order to do that you must have the ability tothe ability to
deploy code quickly and safelydeploy code quickly and safely. Even if the. Even if the
business goals are to deploy strongly QA’d codebusiness goals are to deploy strongly QA’d code
once a month at 3am (it’s not for us, we push allonce a month at 3am (it’s not for us, we push all
the time), having a reliable and easy deploymentthe time), having a reliable and easy deployment
should beshould be non-negotiablenon-negotiable."."
Etsy Blog upon releasing DeployinatorEtsy Blog upon releasing Deployinator
http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/
For years we've tolerated humans to makeFor years we've tolerated humans to make
structural manual changes to the infrastructurestructural manual changes to the infrastructure
our critical applications are running on.our critical applications are running on.
Whilst at the same time demanding those criticalWhilst at the same time demanding those critical
applications to go through rigid test scenarios.applications to go through rigid test scenarios.
Who let this happen ?Who let this happen ?
Infrastructure as CodeInfrastructure as Code
â—Ź Treat configuration automation as codeTreat configuration automation as code
â—Ź Development best practicesDevelopment best practices
•
Model your infrastructureModel your infrastructure
•
Version your cookbooks / manifestsVersion your cookbooks / manifests
•
Test your cookbooks/ manifestsTest your cookbooks/ manifests
•
Dev/ test /uat / prod for your infraDev/ test /uat / prod for your infra
â—Ź Model your infrastructureModel your infrastructure
â—Ź A working service = automated ( Application Code + InfrastructureA working service = automated ( Application Code + Infrastructure
Code + Security + Monitoring )Code + Security + Monitoring )
Version all the thingsVersion all the things
No more excuses !No more excuses !• Source code ApplicationSource code Application
• Source code InfrastructureSource code Infrastructure
• BuildsBuilds
• TestsTests
• PipelinesPipelines
• ScriptsScripts
• DocumentationDocumentation
• Monitoring scriptsMonitoring scripts
A random projectA random project
[sdog@mine vagrant-graphite]$ ls
manifests modules README TODO Vagrantfile
[sdog@mine vagrant-graphite]$ tree -dL 2
.
├── manifests
│ └── hosts
└── modules
├── apache
├── collectd
├── graphite
├── jmxtrans
├── logster
├── statsd
└── tattle
10 directories
Software ReleaseSoftware Release
management is not amanagement is not a
solved problemsolved problem
Use Git SubmodulesUse Git Submodules
â—Ź Basic git,Basic git,
â—Ź No extra tools requiredNo extra tools required
Integrates with other projects too.Integrates with other projects too.
(No need for *-librarian etc ..)(No need for *-librarian etc ..)
Continuous IntegrationContinuous Integration
Continuous integration (CI) is the practice, in software engineering, of mergingContinuous integration (CI) is the practice, in software engineering, of merging
all developer working copies with a shared mainline several times a day. It wasall developer working copies with a shared mainline several times a day. It was
first named and proposed as part of extreme programming (XP). Its main aim isfirst named and proposed as part of extreme programming (XP). Its main aim is
to prevent integration problems, referred to as "integration hell"to prevent integration problems, referred to as "integration hell"
(WikiPedia)(WikiPedia)
Does the app you are deploying still work ?Does the app you are deploying still work ?
Did you break your puppet / chef code ?Did you break your puppet / chef code ?
JenkinsJenkins
â—Ź Open Source Continuous Integration ServerOpen Source Continuous Integration Server
â—Ź A zillion plugins (400)A zillion plugins (400)
â—Ź Have developers build stable and deployableHave developers build stable and deployable
codecode
â—Ź Test Infra codeTest Infra code
Jenkins PipelineJenkins Pipeline
What's in your Pipeline ?What's in your Pipeline ?
A pipelineA pipeline
â—Ź Checkout codeCheckout code
â—Ź SyntaxSyntax
â—Ź StyleStyle
â—Ź Code CoverageCode Coverage
â—Ź TestsTests
â—Ź BuildBuild
â—Ź More TestsMore Tests
â—Ź PackagePackage
Syntax and StyleSyntax and Style
â—Ź Initially ,Initially ,
all code, all the timeall code, all the time
â—Ź Now,Now,
only the changed codeonly the changed code
â—Ź Why not in post Commit Hooks ?Why not in post Commit Hooks ?
Package all the thingsPackage all the things
Artifacts:Artifacts:
â—Ź Tested artifcts that go trough a pipelineTested artifcts that go trough a pipeline
application code,application code,
Infra codeInfra code
metadatametadata
teststests
Why ops like to packageWhy ops like to package
â—Ź Packages give you featuresPackages give you features
•Consistency, security, dependenciesConsistency, security, dependencies
â—Ź Uniquely identify where files come fromUniquely identify where files come from
•Package or cfg-mgmtPackage or cfg-mgmt
â—Ź Source repo not always availableSource repo not always available
•Firewall / Cloud etc ..Firewall / Cloud etc ..
â—Ź Weird deployment locations , no easy accessWeird deployment locations , no easy access
â—Ź Little overhead when you automateLittle overhead when you automate
Jordan Sissel is a Hero !Jordan Sissel is a Hero !
#packaginlove#packaginlove
It's not really packagingIt's not really packaging
•
It's an immutable branchIt's an immutable branch
•
It's a tracable release artefactIt's a tracable release artefact
https://github.com/vStone/jenkins-https://github.com/vStone/jenkins-
puppet-scriptspuppet-scripts
â—Ź TestsTests
â—Ź Packages full tree inPackages full tree in
//
etc/puppet/environmetc/puppet/environm
ents/$environment/ents/$environment/
A pipelineA pipeline
â—Ź Checkout codeCheckout code
â—Ź SyntaxSyntax
â—Ź StyleStyle
â—Ź Code CoverageCode Coverage
â—Ź TestsTests
â—Ź BuildBuild
â—Ź More TestsMore Tests
â—Ź PackagePackage
â—Ź Upload to RepoUpload to Repo
Repository ManagementRepository Management
â—Ź PulpPulp
•
Pro : MirroringLovePro : MirroringLove
•
Con : Mongo, Stability, .debCon : Mongo, Stability, .deb
â—Ź PRM ?PRM ?
â—Ź https://github.com/ImmobilienScout24/yum-repo-sehttps://github.com/ImmobilienScout24/yum-repo-se
??
Repository ManagementRepository Management
A pipelineA pipeline
â—Ź Checkout codeCheckout code
â—Ź SyntaxSyntax
â—Ź StyleStyle
â—Ź Code CoverageCode Coverage
â—Ź TestsTests
â—Ź BuildBuild
â—Ź More TestsMore Tests
â—Ź PackagePackage
â—Ź Upload to RepoUpload to Repo
â—Ź Deploy on TestDeploy on Test
mc-packagemc-package
Repos are SLOWRepos are SLOW
â—Ź Createrepo is slow.Createrepo is slow.
â—Ź Pulp is slowPulp is slow
â—Ź Bypass repos , upload straight to appropriateBypass repos , upload straight to appropriate
PuppetMasterPuppetMaster
â—Ź Upload to repo for rebootstrappingUpload to repo for rebootstrapping
A pipelineA pipeline
â—Ź Checkout codeCheckout code
â—Ź SyntaxSyntax
â—Ź StyleStyle
â—Ź Code CoverageCode Coverage
â—Ź TestsTests
â—Ź BuildBuild
â—Ź More TestsMore Tests
â—Ź PackagePackage
â—Ź Upload to RepoUpload to Repo
â—Ź Deploy on TestDeploy on Test
â—Ź Check PuppetrunsCheck Puppetruns
â—Ź Check MonitoringCheck Monitoring
â—Ź
Testing = MonitoringTesting = Monitoring
â—Ź Deploy a host,Deploy a host,
â—Ź Add it to the monitoring frameworkAdd it to the monitoring framework
â—Ź Add collection toolsAdd collection tools
â—Ź Add check definitionsAdd check definitions
â—Ź Update the monitoring tool configUpdate the monitoring tool config
FULLY AUTOMATEDFULLY AUTOMATED
e.g. Stored Configse.g. Stored Configs
Collection and ExportCollection and Export
Export :Export :
@@resource {@@resource {
... }... }
Collect:Collect:
Resource <<| query |Resource <<| query |
>>>>
Clean out nodes that dissapearClean out nodes that dissapear
puppet node cleanpuppet node clean
Exporting and CollectingExporting and Collecting
Monitoring a VhostMonitoring a Vhost
A pipelineA pipeline
â—Ź Checkout codeCheckout code
â—Ź SyntaxSyntax
â—Ź StyleStyle
â—Ź Code CoverageCode Coverage
â—Ź TestsTests
â—Ź BuildBuild
â—Ź More TestsMore Tests
â—Ź PackagePackage
â—Ź Upload to RepoUpload to Repo
â—Ź Deploy on TestDeploy on Test
â—Ź Check PuppetrunsCheck Puppetruns
â—Ź Check MonitoringCheck Monitoring
â—Ź Promote to UATPromote to UAT
Jenkins PromotionJenkins Promotion
Done ?Done ?
â—Ź Close the feedback loop,Close the feedback loop,
â—Ź Send metric on deploymentSend metric on deployment
echo "deployed.$package_name 1 `date +%s`"echo "deployed.$package_name 1 `date +%s`"
> /dev/tcp/<%= graphite_host %>/2003> /dev/tcp/<%= graphite_host %>/2003
ContactContact
Kris BuytaertKris Buytaert
Kris.Buytaert@inuits.beKris.Buytaert@inuits.be
Further ReadingFurther Reading
@krisbuytaert@krisbuytaert
http://www.krisbuytaert.be/blog/http://www.krisbuytaert.be/blog/
http://www.inuits.be/http://www.inuits.be/
InuitsInuits
Duboistraat 50Duboistraat 50
2060 Antwerpen2060 Antwerpen
BelgiumBelgium
891.514.231891.514.231
+32 475 961221+32 475 961221

Continuous Delivery of (y)our infrastructure.

  • 1.
    Continuous Delivery ofyourContinuous Delivery of your infrastructureinfrastructure Kris Buytaert @krisbuytaert
  • 2.
    Kris BuytaertKris Buytaert â—ŹI used to be a Dev,I used to be a Dev, â—Ź Then Became an OpThen Became an Op â—Ź Chief Trolling Officer and Open SourceChief Trolling Officer and Open Source Consultant @inuits.euConsultant @inuits.eu â—Ź Everything is an effing DNS ProblemEverything is an effing DNS Problem â—Ź Building Clouds since before the bookstoreBuilding Clouds since before the bookstore â—Ź Some books, some papers, some blogsSome books, some papers, some blogs â—Ź Evangelizing devopsEvangelizing devops
  • 3.
    Todays GoalsTodays Goals â—ŹA reproducable way to deploy and upgradeA reproducable way to deploy and upgrade (y)our infrastructure(y)our infrastructure â—Ź AutomaticallyAutomatically â—Ź FastFast â—Ź ConsistentConsistent â—Ź ContinuouslyContinuously
  • 4.
    What's this devopsthingWhat's this devops thing anyhow ?anyhow ?
  • 5.
    C(L)AMSC(L)AMS â—Ź CultureCulture â—Ź (Lean)(Lean) â—ŹAutomationAutomation â—Ź MeasurementMeasurement â—Ź SharingSharing Damon Edwards and John WillisDamon Edwards and John Willis Gene KimGene Kim
  • 6.
    devops (<)> continuousdelilverydevops (<)> continuous delilvery
  • 7.
    NirvanaNirvana An “ecosystem” thatsupports continuous delivery, fromAn “ecosystem” that supports continuous delivery, from infrastructure, data and configuration management toinfrastructure, data and configuration management to business.business. Through automation of the build, deployment, and testingThrough automation of the build, deployment, and testing process, and improved collaboration between developers,process, and improved collaboration between developers, testers, and operations, delivery teams can get changestesters, and operations, delivery teams can get changes released in a matter of hours — sometimes even minutes–noreleased in a matter of hours — sometimes even minutes–no matter what the size of a project or the complexity of its codematter what the size of a project or the complexity of its code base.base. Continuous Delivery , Jez HumbleContinuous Delivery , Jez Humble
  • 9.
    How many timesa day ?How many times a day ? â—Ź 10 @ Flickr10 @ Flickr â—Ź Deployments used to be painDeployments used to be pain â—Ź Nobody dared to deploy a siteNobody dared to deploy a site â—Ź Practice makes perfectPractice makes perfect â—Ź Knowing you can vs constantly doing itKnowing you can vs constantly doing it
  • 10.
    " Our jobas engineers (and ops, dev-ops, QA," Our job as engineers (and ops, dev-ops, QA, support, everyone in the company actually) is tosupport, everyone in the company actually) is to enable the business goals. We strongly feel thatenable the business goals. We strongly feel that in order to do that you must havein order to do that you must have the ability tothe ability to deploy code quickly and safelydeploy code quickly and safely. Even if the. Even if the business goals are to deploy strongly QA’d codebusiness goals are to deploy strongly QA’d code once a month at 3am (it’s not for us, we push allonce a month at 3am (it’s not for us, we push all the time), having a reliable and easy deploymentthe time), having a reliable and easy deployment should beshould be non-negotiablenon-negotiable."." Etsy Blog upon releasing DeployinatorEtsy Blog upon releasing Deployinator http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/
  • 11.
    For years we'vetolerated humans to makeFor years we've tolerated humans to make structural manual changes to the infrastructurestructural manual changes to the infrastructure our critical applications are running on.our critical applications are running on. Whilst at the same time demanding those criticalWhilst at the same time demanding those critical applications to go through rigid test scenarios.applications to go through rigid test scenarios. Who let this happen ?Who let this happen ?
  • 12.
    Infrastructure as CodeInfrastructureas Code ● Treat configuration automation as codeTreat configuration automation as code ● Development best practicesDevelopment best practices • Model your infrastructureModel your infrastructure • Version your cookbooks / manifestsVersion your cookbooks / manifests • Test your cookbooks/ manifestsTest your cookbooks/ manifests • Dev/ test /uat / prod for your infraDev/ test /uat / prod for your infra ● Model your infrastructureModel your infrastructure ● A working service = automated ( Application Code + InfrastructureA working service = automated ( Application Code + Infrastructure Code + Security + Monitoring )Code + Security + Monitoring )
  • 13.
    Version all thethingsVersion all the things No more excuses !No more excuses !• Source code ApplicationSource code Application • Source code InfrastructureSource code Infrastructure • BuildsBuilds • TestsTests • PipelinesPipelines • ScriptsScripts • DocumentationDocumentation • Monitoring scriptsMonitoring scripts
  • 14.
    A random projectArandom project [sdog@mine vagrant-graphite]$ ls manifests modules README TODO Vagrantfile [sdog@mine vagrant-graphite]$ tree -dL 2 . ├── manifests │ └── hosts └── modules ├── apache ├── collectd ├── graphite ├── jmxtrans ├── logster ├── statsd └── tattle 10 directories
  • 15.
    Software ReleaseSoftware Release managementis not amanagement is not a solved problemsolved problem
  • 16.
    Use Git SubmodulesUseGit Submodules â—Ź Basic git,Basic git, â—Ź No extra tools requiredNo extra tools required Integrates with other projects too.Integrates with other projects too. (No need for *-librarian etc ..)(No need for *-librarian etc ..)
  • 17.
    Continuous IntegrationContinuous Integration Continuousintegration (CI) is the practice, in software engineering, of mergingContinuous integration (CI) is the practice, in software engineering, of merging all developer working copies with a shared mainline several times a day. It wasall developer working copies with a shared mainline several times a day. It was first named and proposed as part of extreme programming (XP). Its main aim isfirst named and proposed as part of extreme programming (XP). Its main aim is to prevent integration problems, referred to as "integration hell"to prevent integration problems, referred to as "integration hell" (WikiPedia)(WikiPedia) Does the app you are deploying still work ?Does the app you are deploying still work ? Did you break your puppet / chef code ?Did you break your puppet / chef code ?
  • 18.
    JenkinsJenkins â—Ź Open SourceContinuous Integration ServerOpen Source Continuous Integration Server â—Ź A zillion plugins (400)A zillion plugins (400) â—Ź Have developers build stable and deployableHave developers build stable and deployable codecode â—Ź Test Infra codeTest Infra code
  • 19.
  • 20.
    What's in yourPipeline ?What's in your Pipeline ?
  • 21.
    A pipelineA pipeline â—ŹCheckout codeCheckout code â—Ź SyntaxSyntax â—Ź StyleStyle â—Ź Code CoverageCode Coverage â—Ź TestsTests â—Ź BuildBuild â—Ź More TestsMore Tests â—Ź PackagePackage
  • 22.
    Syntax and StyleSyntaxand Style â—Ź Initially ,Initially , all code, all the timeall code, all the time â—Ź Now,Now, only the changed codeonly the changed code â—Ź Why not in post Commit Hooks ?Why not in post Commit Hooks ?
  • 23.
    Package all thethingsPackage all the things
  • 24.
    Artifacts:Artifacts: â—Ź Tested artifctsthat go trough a pipelineTested artifcts that go trough a pipeline application code,application code, Infra codeInfra code metadatametadata teststests
  • 25.
    Why ops liketo packageWhy ops like to package ● Packages give you featuresPackages give you features •Consistency, security, dependenciesConsistency, security, dependencies ● Uniquely identify where files come fromUniquely identify where files come from •Package or cfg-mgmtPackage or cfg-mgmt ● Source repo not always availableSource repo not always available •Firewall / Cloud etc ..Firewall / Cloud etc .. ● Weird deployment locations , no easy accessWeird deployment locations , no easy access ● Little overhead when you automateLittle overhead when you automate
  • 26.
    Jordan Sissel isa Hero !Jordan Sissel is a Hero !
  • 27.
  • 28.
    It's not reallypackagingIt's not really packaging • It's an immutable branchIt's an immutable branch • It's a tracable release artefactIt's a tracable release artefact
  • 29.
    https://github.com/vStone/jenkins-https://github.com/vStone/jenkins- puppet-scriptspuppet-scripts â—Ź TestsTests â—Ź Packagesfull tree inPackages full tree in // etc/puppet/environmetc/puppet/environm ents/$environment/ents/$environment/
  • 30.
    A pipelineA pipeline â—ŹCheckout codeCheckout code â—Ź SyntaxSyntax â—Ź StyleStyle â—Ź Code CoverageCode Coverage â—Ź TestsTests â—Ź BuildBuild â—Ź More TestsMore Tests â—Ź PackagePackage â—Ź Upload to RepoUpload to Repo
  • 31.
    Repository ManagementRepository Management ●PulpPulp • Pro : MirroringLovePro : MirroringLove • Con : Mongo, Stability, .debCon : Mongo, Stability, .deb ● PRM ?PRM ? ● https://github.com/ImmobilienScout24/yum-repo-sehttps://github.com/ImmobilienScout24/yum-repo-se ??
  • 32.
  • 33.
    A pipelineA pipeline â—ŹCheckout codeCheckout code â—Ź SyntaxSyntax â—Ź StyleStyle â—Ź Code CoverageCode Coverage â—Ź TestsTests â—Ź BuildBuild â—Ź More TestsMore Tests â—Ź PackagePackage â—Ź Upload to RepoUpload to Repo â—Ź Deploy on TestDeploy on Test
  • 34.
  • 35.
    Repos are SLOWReposare SLOW â—Ź Createrepo is slow.Createrepo is slow. â—Ź Pulp is slowPulp is slow â—Ź Bypass repos , upload straight to appropriateBypass repos , upload straight to appropriate PuppetMasterPuppetMaster â—Ź Upload to repo for rebootstrappingUpload to repo for rebootstrapping
  • 36.
    A pipelineA pipeline â—ŹCheckout codeCheckout code â—Ź SyntaxSyntax â—Ź StyleStyle â—Ź Code CoverageCode Coverage â—Ź TestsTests â—Ź BuildBuild â—Ź More TestsMore Tests â—Ź PackagePackage â—Ź Upload to RepoUpload to Repo â—Ź Deploy on TestDeploy on Test â—Ź Check PuppetrunsCheck Puppetruns â—Ź Check MonitoringCheck Monitoring â—Ź
  • 37.
    Testing = MonitoringTesting= Monitoring â—Ź Deploy a host,Deploy a host, â—Ź Add it to the monitoring frameworkAdd it to the monitoring framework â—Ź Add collection toolsAdd collection tools â—Ź Add check definitionsAdd check definitions â—Ź Update the monitoring tool configUpdate the monitoring tool config FULLY AUTOMATEDFULLY AUTOMATED
  • 38.
  • 39.
    Collection and ExportCollectionand Export Export :Export : @@resource {@@resource { ... }... } Collect:Collect: Resource <<| query |Resource <<| query | >>>> Clean out nodes that dissapearClean out nodes that dissapear puppet node cleanpuppet node clean
  • 40.
  • 41.
  • 42.
    A pipelineA pipeline â—ŹCheckout codeCheckout code â—Ź SyntaxSyntax â—Ź StyleStyle â—Ź Code CoverageCode Coverage â—Ź TestsTests â—Ź BuildBuild â—Ź More TestsMore Tests â—Ź PackagePackage â—Ź Upload to RepoUpload to Repo â—Ź Deploy on TestDeploy on Test â—Ź Check PuppetrunsCheck Puppetruns â—Ź Check MonitoringCheck Monitoring â—Ź Promote to UATPromote to UAT
  • 43.
  • 44.
    Done ?Done ? â—ŹClose the feedback loop,Close the feedback loop, â—Ź Send metric on deploymentSend metric on deployment echo "deployed.$package_name 1 `date +%s`"echo "deployed.$package_name 1 `date +%s`" > /dev/tcp/<%= graphite_host %>/2003> /dev/tcp/<%= graphite_host %>/2003
  • 45.
    ContactContact Kris BuytaertKris Buytaert Kris.Buytaert@inuits.beKris.Buytaert@inuits.be FurtherReadingFurther Reading @krisbuytaert@krisbuytaert http://www.krisbuytaert.be/blog/http://www.krisbuytaert.be/blog/ http://www.inuits.be/http://www.inuits.be/ InuitsInuits Duboistraat 50Duboistraat 50 2060 Antwerpen2060 Antwerpen BelgiumBelgium 891.514.231891.514.231 +32 475 961221+32 475 961221