Difference between revisions of "Fabric"

From HackerNet
Jump to: navigation, search
(Created page with "Fabric är ett bibliotek och command-line verktyg för att automatisera deployment och diverse tasks via ssh. I grunden följer det med en bibliotek av funktioner för anting...")
 
Line 13: Line 13:
  
 
Exempel: Fabric fil
 
Exempel: Fabric fil
<syntaxhighlight>
+
<syntaxhighlight lang="python">
 
from __future__ import with_statement
 
from __future__ import with_statement
 
from fabric.api import *
 
from fabric.api import *
Line 66: Line 66:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
=Server Lista=
 
=Server Lista=
 
För att göra olika tasks enklare och överskådligare rekommenderas det att skapa serverdeffinitioner med olika roller och platser.
 
För att göra olika tasks enklare och överskådligare rekommenderas det att skapa serverdeffinitioner med olika roller och platser.

Revision as of 21:34, 2 May 2017

Fabric är ett bibliotek och command-line verktyg för att automatisera deployment och diverse tasks via ssh.

I grunden följer det med en bibliotek av funktioner för antingen lokal eller remote kommandon samt uppladdning / nerladdning av filer. Man kan även bygga egna moduler för att utöka funktionerna av fabric.

Installation

sudo apt-get install fabric ELLER pip install -e git+https://github.com/paramiko/paramiko/#egg=paramiko pip install -e git+https://github.com/fabric/fabric/#egg=fabric

Konfiguration

Exempel: Fabric fil

from __future__ import with_statement
from fabric.api import *
from fabric.utils import warn
from fabric.contrib.files import exists
from fabric.contrib.project import  rsync_project
from fabric.contrib.files import sed
from fabric.contrib.files import append
from fabric.colors import *
import os.path
import server
server.setup_fabric()
env.user = 'root'
def upgrade_packages():
    run('apt-get update && apt-get -y upgrade')

def pkg_list_backp():
    package_list = './backups/packageLists/%s.packagesList' % env.host_string
    run('dpkg --get-selections > /var/backups/packages.list')
    get('/var/backups/packages.list', package_list)

def conf_sshd():
    sed('/etc/ssh/sshd_config',
        '#PasswordAuthentication yes',
        'PasswordAuthentication no' )
    sed('/etc/ssh/sshd_config',
        'PasswordAuthentication yes',
        'PasswordAuthentication no' )
    sed('/etc/ssh/sshd_config',
        'X11Forwarding yes',
        'X11Forwarding no' )
    sed('/etc/ssh/sshd_config',
        'AllowTcpForwarding yes',
        'AllowTcpForwarding no' )
    run('echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config')
    run ('echo "AllowUsers root op"  >> /etc/ssh/sshd_config')
    run ('service ssh restart')

def deploy_gluster():
    put('./upload/glusterfs/gluster.list','/etc/apt/sources.list.d/') #Lägger den lokala filen gluster.list i remote foldern
    dist = run('lsb_release -cs') 
    sed('/etc/apt/sources.list.d/gluster.list', 'precise', (dist) ) #ersätter "precise" med versionen som körs
    run("apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FE869A9")
    run("apt-get update")
    run("apt-get install -y glusterfs-client")

def doitall():
    upgrade_packages()
    pkg_list_backp()
    conf_sshd()
    deploy_gluster()

Server Lista

För att göra olika tasks enklare och överskådligare rekommenderas det att skapa serverdeffinitioner med olika roller och platser. Exempel server.py

from fabric.api import env
class Server:
   def __init__(self, name, rack, roles):
        self.name = name
        self.rack = rack
        if isinstance(roles, list):
            self.roles = roles
        else:
            self.roles = list(roles)
servers = [
    Server('upload1',      'A1', ['sr04', 'ipmi', 'metal',  'bm', 'upload']),
    Server('upload2',       'A2', ['sr04', 'ipmi', 'esxi',  'drz', 'upload']),
    Server('csgo1',       'A2', ['sr04', 'ipmi', 'kvm',  'drz', 'csgo']),
    Server('voip1',         'A3', ['sr04', 'ipmi', 'metal',  'drz', 'voip']),

För att sedan använda listan importerar du den bara i ditt huvudfabric skript med import server server.setup_fabric()

Kör bara Kör!

Med serverlista och roller

fab -R Roll task

Med enskilda hostar

fab -H host1,host2 task