Upgrade to Pro — share decks privately, control downloads, hide ads and more …



converge is a new configuration management tool that makes it easy to configure servers and desktops.

Steven Borrelli

October 28, 2016

More Decks by Steven Borrelli

Other Decks in Technology


  1. T R E N D S converge distributed teams cloud

    microservices containers technology people
  2. easy to use converge plan build-env.hcl converge apply —param masters=3

    etcd.hcl 11mb binary (cli + modules + agent) converge start with a single file
  3. simple configuration converge param "image-tag" { default = "1.10-alpine" }

    docker.image "nginx" { name = "nginx" tag = "{{param `image-tag`}}" timeout = "60s" } docker.container "nginx" { name = "nginx-server" image = "nginx:{{lookup `docker.image.nginx.Tag`}}" force = "true" ports = ["80"] env { "HOSTNAME" = “http://converge.aster.is“ } }
  4. C O N F I G U R I N

    G C LU S T E R S converge Deploy and Manage Distributed Applications (Kubernetes, Swarm, Consul, etc.)
  5. uses terraform provisioner spin up clusters with one command https://github.com/asteris-llc/terraform-provisioner-converge

    converge https://asciinema.org/a/day0xarm3i95jgodmcsapp40u replay: D O C K E R S WA R M
  6. D O C K E R S WA R M

    converge dependency graph
  7. D O C K E R S WA R M

    converge wait dependency
  8. converge file.directory "data" { destination = "/var/lib/influxdb" } module "docker/container.hcl"

    "influx" { params { name = "influxdb" image = "influxdb" tag = "1.0.0-rc1" ports = ["8086:8086"] volumes = ["/var/lib/influxdb:/var/lib/influxdb"] } depends = ["file.directory.data"] } wait for a directory & pass parameters into modules
  9. conditional task execution converge switch "deps" { case "eq `{{platform.LinuxDistribution}}`

    `centos`" "centos" { package.rpm "deps" { name = "coreutils gcc git graphviz make tar unzip which" state = "present" } } case "eq `{{platform.LinuxDistribution}}` `debian`" "debian" { task "package-install" { check = "dpkg -s {{param `name`}} >/dev/null 2>&1" apply = "apt-get -y install {{param `packages`}}" } } }
  10. wait for a file to be present converge wait.query "unzip-check"

    { check = "unzip -v" interval = "2s" max_retry = 60 grace_period = "3s" interpreter = "/bin/bash" } task "protoc-extract" { check = "[[ -f /usr/local/bin/protoc ]]" apply = "unzip /tmp/protoc-{{param `protoc-version`}}-linux- x86_64.zip" dir = "/usr/local" interpreter = "/bin/bash" depends = ["wait.query.unzip-check"] }
  11. U N AT T E N D E D I

    N S TA L L S converge pull files from http run converge via cron Autoscaling groups, IoT devices
  12. verify modules via pgp add trusted keys and verify modules

    converge converge key trust samples/pubkey.gpg converge plan —verify-modules samples/ basic.hcl
  13. D E V E LO P E R S converge

    ad-hoc solutions (npm, brew, etc.) DevOps tools currently not used Need to install lots of tools & run docker containers
  14. easy to share embed converge files with source code converge

    publish via http, s3 wrap scripts (shell, ruby, etc.)
  15. api first via all communication (including cli) is via grpc

    devices look like another microservice http/2 bi-directional streaming converge
  16. I M AG E C R E D I T

    S Arch: Logan Troxel https://unsplash.com/search/arch?photo=DsQmBlby Typewriter: Florian Klauer https://unsplash.com/search/typewriter? photo=mk7D-4UCfmg Tower: Richard Hinds https://unsplash.com/search/tower? photo=TH8a7L1HJXA Stars: Dimi Pigoff https://unsplash.com/new?photo=6y6D3S_sEjw