[PYTHON] Garantie d'égalité avec l'outil de déploiement fabric + cuisine

introduction

La structure des outils de déploiement de Python rend les scripts shell faciles à utiliser dans Python et peut facilement effectuer une gestion de configuration de type Chef-Solo. De plus, bien que ce soit l'égalité, qui est l'une des caractéristiques majeures de Chef, elle peut être garantie en utilisant la cuisine, qui est une enveloppe pour le tissu.

C'est très simple, le coût d'apprentissage est faible par rapport à Chef etc., et il peut être facilement introduit car il ne doit être installé que sur la machine cible. Cette fois, j'ai écrit un petit script pour placer des dotfiles dans vagrant en utilisant du tissu.

Installation

Il peut être installé avec une commande ci-dessous.

$ pip install fabric cuisine

Comment utiliser

Spécifiez l'hôte de la machine cible dans env.hosts, placez la commande dans run () et exécutez-la. Si vous souhaitez exécuter avec sudo, placez-le dans sudo (). C'est le seul élément de base.

sample.py


# -*- encoding:utf-8 -*-

from fabric.api import env
from fabric.decorators import task
from cuisine import run

env.hosts = ['192.168.33.10']

@task
def A():
  run('echo A')

@task
def B():
  sudo('echo B')

@task
def main():
  A()
  B()

Si vous exécutez> main, vous pouvez voir qu'il peut être exécuté sur la machine cible comme suit.

$ fab main
[192.168.33.10] run: echo A
[192.168.33.10] out: A
[192.168.33.10] run: echo B
[192.168.33.10] out: B

Done.
Disconnecting from 192.168.33.10... done.

En faisant bon usage de la méthode _ensure () telle que package_ensure () et de la méthode _exisits () telle que dir_exists (), l'équivalence peut être garantie.

package_ensure('vim') #Installer uniquement si vim n'est pas installé

coopération vagabonde

Pour créer un lien avec vagrant, exécutez la commande suivante.

$ vagrant plugin install vagrant-fabric 

Ensuite, décrivez les paramètres suivants dans Vagrantfile.

...
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
  config.vm.provision :fabric do |fabric|
    fabric.fabfile_path = './fabfile.py'
    fabric.tasks = ['set_env'] #Tâche que vous souhaitez effectuer
  end
end

Cette fois, j'ai écrit un fichier pour placer le dotfile suivant.

fabfile.py


# -*- encoding:utf-8 -*-

from fabric.api import env, settings
from fabric.decorators import task
from cuisine import mode_sudo, select_package, run, package_ensure, dir_exists, cd

select_package('apt')

@task
def set_env():
  setup_packages()
  fetch_dotfiles()
  set_symlinks()

@task
def setup_packages():
  with settings(mode_sudo()):
    package_ensure('unzip')

@task
def fetch_dotfiles():
  if not dir_exists('dotfiles'):
    run('git clone --recursive [email protected]:pika-shi/dotfiles.git')

@task
def set_symlinks():
  path_pair_list = [
    ('dotfiles/_zshrc', '.zshrc'), ('dotfiles/_tmux.conf', '.tmux.conf'),
    ('dotfiles/_vimrc', '.vimrc'), ('dotfiles/_vim', '.vim')
    ]
  with cd('~/'):
    for path_set in path_pair_list:
      run('ln -s {} {}'.format(*path_set))

Si vous exécutez la commande suivante avec vagrant up, la tâche sera exécutée et le lien symbolique approprié sera ajouté au fichier dot.

$ vagrant provision

en conclusion

De cette façon, un peu de gestion de la configuration peut être fait très facilement, alors essayez-le et réalisez sa commodité.

Recommended Posts

Garantie d'égalité avec l'outil de déploiement fabric + cuisine
First Fabric (outil de déploiement Python)
Donner une égalité au tissu avec la cuisine
Environnement de déploiement facile avec gaffer + tissu
Pourquoi nous avons choisi Fabric comme outil de déploiement
Créez un script de déploiement avec fabric et cuisine et réutilisez-le
[Linux] Ecrire un outil de déploiement à l'aide de rsync avec un script shell