$30 off During Our Annual Pro Sale. View Details »

Un peu de sel dans votre infra

Boris Feld
October 16, 2014

Un peu de sel dans votre infra

Présentation de SaltStack à Paris.Py 5ème édition

Boris Feld

October 16, 2014
Tweet

More Decks by Boris Feld

Other Decks in Programming

Transcript

  1. Un peu de sel dans
    votre infra
    Boris FELD - Paris.py
    16 octobre 2014

    View Slide

  2. Toute ressemblance avec des
    personnes ou des situations
    existantes ou ayant existé ne
    saurait être que préméditée.

    View Slide

  3. Software Configuration Management

    View Slide

  4. Des besoins…
    • Comment configurer facilement, rapidement et
    efficacement :
    • De plus en plus de machines
    • Des stacks de plus en plus compliqués
    • Des infrastructures toujours plus hétérogènes

    View Slide

  5. Des problèmes…
    • Tu as bien installé les dépendances à jour ?
    • Pourquoi il y a une machine en 32 bits et une autre en 64
    bits ?
    • Y’a un problème sur la prod, tu as l’ancienne config du
    nginx ?
    • Y’a un problème sur quelques machines, tu pourrais
    vérifier la version de libxml sur les 200 serveurs ?
    • Y’a une nouvelle faille zero-day tu peux patcher
    rapidement ?

    View Slide

  6. View Slide

  7. Une solution

    View Slide

  8. SaltStack
    • Serveur RPC de nouvelle génération.
    • Outil de gestion de configuration de nouvelle
    génération.
    • En python.
    • Populaire, maintenu et avec une communauté
    active.
    • Support multi-os.

    View Slide

  9. Du RPC ?

    View Slide

  10. Remember ?
    23:59 Y’a une nouvelle faille zero-day tu
    peux patcher rapidement ?

    View Slide

  11. HeartBleed
    23:59 Y’a une nouvelle faille zero-day tu
    peux patcher rapidement ?
    $> salt '*' pkg.install openssl refresh=True
    00:00 Done, bonne nuit.

    View Slide

  12. ShellShock
    23:59 Y’a une nouvelle faille zero-day tu
    peux patcher rapidement ?
    $> salt '*' pkg.install bash refresh=True
    00:00 Done, bonne nuit.

    View Slide

  13. Check
    15:28 Y’a un problème depuis le dernier
    déploiement, tu pourrais vérifier la version de
    libxml sur les 200 serveurs ?

    View Slide

  14. Check
    15:28 Y’a un problème depuis le dernier
    déploiement, tu pourrais vérifier la version de
    libxml sur les 200 serveurs ?

    View Slide

  15. Check
    15:28 Y’a un problème depuis le dernier
    déploiement, tu pourrais vérifier la version de
    libxml sur les 200 serveurs ?
    $> salt '*' pkg.version libxml
    15:29 C’est pas la même version, faut
    préciser les dépendances bande de noobs.

    View Slide

  16. Et la gestion de conf ?

    View Slide

  17. Configuration Management
    • Déclaratif plutôt qu’impératif
    • En YAML
    • Avec du templating Jinja 2

    View Slide

  18. Configuration management
    nginx:
    pkg:
    - installed
    service.running:
    - enabled: True
    - require:
    - pkg: nginx
    - watch:
    - file: nginx_config
    !
    nginx_config:
    file.managed:
    - name: /etc/nginx/nginx.conf
    - source: salt://nginx/nginx.conf
    - template: jinja

    View Slide

  19. Python powered

    View Slide

  20. Python power !
    • Outil entièrement écrit en Python.
    • 56437 lignes de python.
    • Code simple d’accès.
    • Facile d’écrire des modules et states custom.
    • Et de contribuer…

    View Slide

  21. Communauté

    View Slide

  22. Module builtin
    def chgrp(path, group):
    '''
    Change the group of a file
    !
    path
    path to the file or directory
    !
    group
    group owner
    '''
    path = os.path.expanduser(path)
    !
    user = get_user(path)
    return chown(path, user, group)

    View Slide

  23. Custom module
    def get_sentry_dsn(project_name):!
    with open(__pillar__['sentry']['dsn_file_path']) as key_file:!
    keys = json.load(key_file)!
    !
    return keys[project_name]!

    View Slide

  24. View Slide

  25. More ? Salt-Cloud Power
    web1:
    provider: ec2
    image: ami-7e2da54e
    size: m3.medium
    minion:
    roles: [web]
    !
    web2:
    provider: ec2
    image: ami-7e2da54e
    size: m3.medium
    minion:
    cheese: [web]
    !
    db1:
    provider: ec2
    image: ami-7e2da54e
    size: m3.xlarge
    minion:
    cheese: [db, redis]

    View Slide

  26. View Slide