Chef-like functionality for Fabric

Related tags

DevOps Toolscuisine
Overview
           /      /
 ___         ___    ___  ___
|    |   )| |___ | |   )|___)
|__  |__/ |  __/ | |  / |__

-- Chef-like functionality for Fabric

About

Fabric is an incredible tool to automate administration of remote machines. As Fabric's functions are rather low-level, you'll probably quickly see a need for more high-level functions such as add/remove users and groups, install/upgrade packages, etc.

Cuisine is a small set of functions that sit on top of Fabric, to abstract common administration operations such as file/dir operations, user/group creation, package install/upgrade, making it easier to write portable administration and deployment scripts.

Cuisine's features are:

  • Small, easy to read, a single file API: <object>_<operation>() e.g. dir_exists(location) tells if there is a remote directory at the given location.
  • Covers file/dir operations, user/group operations, package operations
  • Text processing and template functions
  • All functions are lazy: they will actually only do things when the change is required.

Installation

Cuisine is on PyPI so you can either use easy_install -U cuisine or pip install cuisine to install it. Otherwise, you can download the source from GitHub and run python setup.py install.

Cuisine requires Python 2.7, and has not been tested with Python 3 yet.

How to get started

Open up a python shell and type:

import cuisine

Cuisine is designed to be a flat-file module, where all functions are prefixed by the type of functionality they offer (e.g., file for file operations, user for user operations). The available groups are:

text_*
Text-processing functions
file_*
File operations
dir_*
Directory operations
package_*
Package management operations
command_*
Shell commands availability
user_*
User creation commands
group*
Group creation commands
mode_*
Configures cuisine's behaviour within the current session.
select_*
Selects a specific option, such as package back-end (apt, yum, zypper, or pacman)

If you're using an interactive Python shell such as IPython you can easily browse the available functions by using tab-completion.

In [2]: cuisine.file_
cuisine.file_append       cuisine.file_is_file      cuisine.file_unlink
cuisine.file_attribs      cuisine.file_is_link      cuisine.file_update
cuisine.file_attribs_get  cuisine.file_link         cuisine.file_upload
cuisine.file_ensure       cuisine.file_local_read   cuisine.file_write
cuisine.file_exists       cuisine.file_read
cuisine.file_is_dir       cuisine.file_sha256

As the functions are prefixed by they type of functionality, it is very easy to get started using an interactive shell.

If you would like to use cuisine without using a fabfile, you can call the mode_local() function.

import cuisine
cuisine.mode_local()
print cuisine.run("echo Hello")

alternatively, you can also directly connect to a server

import cuisine
cuisine.connect("my.server.com")
print cuisine.run("echo Hello")

If you want to use cuisine within a fabfile, simply create a fabfile with the following content:

from cuisine import *

def setup():
    group_ensure("remote_admin")
    user_ensure("admin")
    group_user_ensure("remote_admin", "admin")

Troubleshooting

If you are encoutering problems, please check the following:

  • The [email protected] is running an SH-compatible shell (sh, dash, bash, zsh should work)
  • The system has openssl base64, md5sum and sha1sum commands in addition to the basic UNIX ones.

If you still have a problem, simply file a bug report here https://github.com/sebastien/cuisine/issues

Right now, cuisine is tested on Ubuntu. Some contributors use it on RHEL and CentOS. If you use on a different system, let us know if it works!

Contributing specific implementations

Cuisine was originally developed as a Debian/Ubuntu-centric tool, but can easily be adapted to other distributions or Unix flavor, the only caveat being that the shell is expected to be bash-compatible.

If you want to implement a specific variant of some functions for a specific platform, you should do the following:

  1. Open the cuisine.py source and look for the definition of the function that you would like to specialize.
  2. If the function is decorated by '@dispatch', it means it already supports specific back-ends (see package_* functions), and you can proceed to the next step. Otherwise, you can either file a ticket on Github or read the source and mimic what we've done for package_*
  3. Create a specific version of the decorated function by creating a new function with the same name, suffixed by your specific backend name. For instance, if you'd like to create a yum backend to package_ensure, you would need to create a function package_ensure_yum with the same arguments as package_ensure
  4. Once you've created your specific functions, make sure that you have a select_* matching your function group. For the package_* functions, this would be select_package.
  5. Look for the supported variable in the select_* and add your backend suffix to it (in our example, this would be yum)

To use a specific backend implementation of a set of features, use the select_* functions.

# To use the 'apt' backend
cuisine.select_package("apt")
# To see the available backends
print cuisine.select_package()

Modules

Cuisine-PostgreSQL http://pypi.python.org/pypi/cuisine-postgresql/

More?

If you want more information, you can:

Owner
Sébastien Pierre
Sébastien Pierre
NixOps is a tool for deploying to NixOS machines in a network or cloud.

NixOps NixOps is a tool for deploying to NixOS machines in a network or the cloud. Key features include: Declarative: NixOps determines and carries ou

Nix/Nixpkgs/NixOS 1.2k Jan 02, 2023
Asynchronous parallel SSH client library.

parallel-ssh Asynchronous parallel SSH client library. Run SSH commands over many - hundreds/hundreds of thousands - number of servers asynchronously

1.1k Dec 31, 2022
Cado Response Integration with Amazon GuardDuty using AWS Lambda

Cado Response Integration with Amazon GuardDuty using AWS Lambda This repository contains a simple example where: An alert is triggered by GuardDuty T

Cado Security 4 Mar 02, 2022
ServerStatus 云探针、多服务器探针、云监控、多服务器云监控

ServerStatus 云探针、多服务器探针、云监控、多服务器云监控 基于ServerStatus-Hotaru膜改版的套娃膜改版(实际上本README也是抄它的)。 主要将client改为通过http提交数据,以及将服务端换成了php以便减小部署成本(PHP is the best!) 默认图片

shirakun 16 Apr 14, 2022
Wubes is like Qubes but for Windows.

Qubes containerization on Windows. The idea is to leverage the Windows Sandbox technology to spawn applications in isolation.

NCC Group Plc 124 Dec 16, 2022
Automate SSH in python easily!

RedExpect RedExpect makes automating remote machines over SSH very easy to do and is very fast in doing exactly what you ask of it. Based on ssh2-pyth

Red_M 19 Dec 17, 2022
Blazingly-fast :rocket:, rock-solid, local application development :arrow_right: with Kubernetes.

Gefyra Gefyra gives Kubernetes-("cloud-native")-developers a completely new way of writing and testing their applications. Over are the times of custo

Michael Schilonka 352 Dec 26, 2022
Ansible for DevOps examples.

Ansible for DevOps Examples This repository contains Ansible examples developed to support different sections of Ansible for DevOps, a book on Ansible

Jeff Geerling 6.6k Jan 08, 2023
A little script and trick to make your heroku app run forever without being concerned about dyno hours.

A little script and trick to make your heroku app run forever without being concerned about dyno hours.

Tiararose Biezetta 152 Dec 25, 2022
Dockerized iCloud drive

iCloud-drive-docker is a simple iCloud drive client in Docker environment. It uses pyiCloud python library to interact with iCloud

Mandar Patil 376 Jan 01, 2023
Ansible Collection: A collection of Ansible Modules and Lookup Plugins (MLP) from Linuxfabrik.

ansible_mlp An Ansible collection of Ansible Modules and Lookup Plugins (MLP) from Linuxfabrik. Ansible Bitwarden Item Lookup Plugin Returns a passwor

Linuxfabrik 2 Feb 07, 2022
Automatically capture your Ookla Speedtest metrics and display them in a Grafana dashboard

Speedtest All-In-One Automatically capture your Ookla Speedtest metrics and display them in a Grafana dashboard. Getting Started About This Code This

Aaron Melton 2 Feb 22, 2022
Bugbane - Application security tools for CI/CD pipeline

BugBane Набор утилит для аудита безопасности приложений. Основные принципы и осо

GardaTech 20 Dec 09, 2022
Official Python client library for kubernetes

Kubernetes Python Client Python client for the kubernetes API. Installation From source: git clone --recursive https://github.com/kubernetes-client/py

Kubernetes Clients 5.4k Jan 02, 2023
The leading native Python SSHv2 protocol library.

Paramiko Paramiko: Python SSH module Copyright: Copyright (c) 2009 Robey Pointer 8.1k Jan 04, 2023

Manage your SSH like a boss.

--- storm is a command line tool to manage your ssh connections. features adding, editing, deleting, listing, searching across your SSHConfig. command

Emre Yılmaz 3.9k Jan 03, 2023
A tool to convert AWS EC2 instances back and forth between On-Demand and Spot billing models.

ec2-spot-converter This tool converts existing AWS EC2 instances back and forth between On-Demand and 'persistent' Spot billing models while preservin

jcjorel 152 Dec 29, 2022
🐳 Docker templates for various languages.

Docker Deployment Templates One Stop repository for Docker Compose and Docker Templates for Deployment. Features Python (FastAPI, Flask) Screenshots D

CodeChef-VIT 6 Aug 28, 2022
Ganeti is a virtual machine cluster management tool built on top of existing virtualization technologies such as Xen or KVM and other open source software.

Ganeti 3.0 =========== For installation instructions, read the INSTALL and the doc/install.rst files. For a brief introduction, read the ganeti(7) m

395 Jan 04, 2023