Pythons Deployment Tool Fabric macht Shell-Skripte bequem in Python zu verwenden und kann problemlos ein Chef-Solo-ähnliches Konfigurationsmanagement durchführen. Obwohl es sich um Gleichheit handelt, die eines der Hauptmerkmale von Chef ist, kann dies durch die Verwendung der Küche garantiert werden, bei der es sich um eine Stoffhülle handelt.
Es ist sehr einfach, die Lernkosten sind im Vergleich zu Chef usw. niedrig und es kann einfach installiert werden, da es nur auf dem Zielcomputer installiert werden muss. Dieses Mal habe ich ein kleines Skript geschrieben, um Dotfiles mit Stoff in Vagabunden zu platzieren.
Es kann mit einem Befehl unten installiert werden.
$ pip install fabric cuisine
Geben Sie den Host des Zielcomputers in env.hosts an, schließen Sie den Befehl in run () ein und führen Sie ihn aus. Wenn Sie mit sudo ausführen möchten, fügen Sie es in sudo () ein. Dies ist die einzige Grundvoraussetzung.
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()
Wenn Sie> main ausführen, können Sie sehen, dass es wie folgt auf dem Zielcomputer ausgeführt werden kann.
$ 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.
Durch die Verwendung der Methode _ensure () wie package_ensure () und der Methode _exisits () wie dir_exists () kann die Äquivalenz garantiert werden.
package_ensure('vim') #Nur installieren, wenn vim nicht installiert ist
Führen Sie den folgenden Befehl aus, um eine Verknüpfung mit Vagrant herzustellen.
$ vagrant plugin install vagrant-fabric
Beschreiben Sie anschließend die folgenden Einstellungen in der Vagrant-Datei.
...
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
config.vm.provision :fabric do |fabric|
fabric.fabfile_path = './fabfile.py'
fabric.tasks = ['set_env'] #Aufgabe, die Sie ausführen möchten
end
end
Dieses Mal habe ich eine Datei geschrieben, um die folgende Punktdatei zu platzieren.
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))
Wenn Sie den folgenden Befehl mit vagrant up ausführen, wird die Aufgabe ausgeführt und der entsprechenden symbolischen Verknüpfung zur Punktdatei hinzugefügt.
$ vagrant provision
Auf diese Weise kann ein wenig Konfigurationsmanagement sehr einfach durchgeführt werden. Probieren Sie es aus und erkennen Sie die Benutzerfreundlichkeit.
Recommended Posts