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.
Il peut être installé avec une commande ci-dessous.
$ pip install fabric cuisine
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é
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
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