extending saltstack saltstack for developers › wp-content › ...saltstack for developers...

Post on 26-Jun-2020

20 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

@garethgreenawayOpen Source Summit North America 2018Open Source Summit North America 2018 @garethgreenaway

SaltStack for DevelopersExtending SaltStack

1

@garethgreenawayOpen Source Summit North America 2018Open Source Summit North America 2018 @garethgreenaway

Gareth

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

@garethgreenawayOpen Source Summit North America 2018Open Source Summit North America 2018 @garethgreenaway5

@garethgreenawayOpen Source Summit North America 2018Open Source Summit North America 2018 @garethgreenaway

@garethgreenawayOpen Source Summit North America 2018Open Source Summit North America 2018 @garethgreenaway

@garethgreenawayOpen Source Summit North America 2018Open Source Summit North America 2018 @garethgreenaway

@garethgreenawayOpen Source Summit North America 2018 @garethgreenawayOpen Source Summit North America 2018

SaltStack for DevelopersExtending SaltStack

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

What is SaltStack?

@garethgreenawayOpen Source Summit North America 2018

SaltStack == Salt

11

Salt == SaltStack

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Configuration Management

Remote Execution

Event Driven Orchestration

DevOps Platform

What is SaltStack?

@garethgreenawayOpen Source Summit North America 2018

@garethgreenawayOpen Source Summit North America 2018

@garethgreenawayOpen Source Summit North America 2018

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

SaltStack Loader

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Standard Modules

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Virtual Modules

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Lazy Loader

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Types of Modules

@garethgreenawayOpen Source Summit North America 2018

Remote Execution ModulesThe heavy lifters of SaltStack.

Typically calling out to other programs and services.

Used by other modules.

Examples:

● file● cmd● docker● pkg (aptpkg, yumpkg, freebsdpkg, mac_pkgutil)

21

@garethgreenawayOpen Source Summit North America 2018

State ModulesUsed for configuration management.

Examples:

● pkg● x509● schedule● file● apache_module

22

@garethgreenawayOpen Source Summit North America 2018 23

@garethgreenawayOpen Source Summit North America 2018

Grain ModulesUsed to report information about machines running SaltStack.

Populated or updated on server start or minion software start.

Updated periodically.

Similar to facts from Facter, used by Puppet & Ansible or Chef Ohai attributes.

Examples: Salt version, Python version, operating system.

24

@garethgreenawayOpen Source Summit North America 2018

Runner ModulesExecution modules run on minions, runners run on the master calling out to the minions.

Examples:

● Jobs runner● State runner● Event runner

25

@garethgreenawayOpen Source Summit North America 2018

Returners ModulesGives a minion a way to return data to something besides the master.

Examples:

● MySQL● Slack● SMS● SMTP

26

@garethgreenawayOpen Source Summit North America 2018

PillarCentralized system to define configuration.

Examples:

● consul● etcd● postgres● mysql● mongodb● s3● gpg

27

@garethgreenawayOpen Source Summit North America 2018

Outputter modulesDetermine the output from the command line interfaces

Examples:

● json● yaml● progress

28

@garethgreenawayOpen Source Summit North America 2018

Cloud modulesUsed to manage virtual machines on various cloud providers.

Examples:

● Amazon EC2● Google Cloud● Azure● Digital Ocean● VMWare● Openstack

29

@garethgreenawayOpen Source Summit North America 2018

BeaconsAllows various software, both Salt components and external applications to report data to Salt.

Examples:

● diskusage● inotify● wtmp/btmp● ps

30

@garethgreenawayOpen Source Summit North America 2018

EnginesAllow Salt to provide internal information and services to long-running external processes.

Examples:

● Docker● Slack● Logstash● SQS Events

31

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Agenda

1. Tools & Best Practices2. Briefly look at the Salt loader3. Custom Salt Modules4. Updating Replacing an existing beacon module5. Custom Salt engines

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Tools

@garethgreenawayOpen Source Summit North America 2018

Editor Bits

● https://github.com/saltstack/salt-vim● https://github.com/saltstack/sublime-text● Emacs salt-mode● https://github.com/w0rp/ale● https://github.com/Valloric/YouCompleteMe

34

@garethgreenawayOpen Source Summit North America 2018

Testing

● https://github.com/cachedout/barnacle● https://github.com/saltstack/kitchen-salt● PyENV

35

@garethgreenawayOpen Source Summit North America 2018

Documentation● https://docs.saltstack.com/en/latest/● Salt sys.doc, state_doc, runner_doc, etc.

36

@garethgreenawayOpen Source Summit North America 2018 37

@garethgreenawayOpen Source Summit North America 2018

Debugging● PyCharm Professional Edition● PyDev (http://www.pydev.org)● pdb● pudb● ptvsd: Visual Studio Remote Debugging Server

38

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

SaltConf 17Megan Wilhite

https://bit.ly/2KXujUB

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

salt-extendhttps://bit.ly/2Gd0E6z

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

SaltStack Development

Basics

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

The __virtual__ function

● Not required, but definitely best practice.

● Executed when Salt minion starts up.● Optionally provides identification for the name of the module.● Commonly used to identify whether the module should be loaded

and made available.● __virtual_aliases__ allows you to provide multiple namesNEW

@garethgreenawayOpen Source Summit North America 2018

Commonly Used Dunder Variables

43

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

__opts__

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

__salt__

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

__grains__

@garethgreenawayOpen Source Summit North America 2018

__pillar__

47

@garethgreenawayOpen Source Summit North America 2018

__utils__

48

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Docstrings

''' My function in my Salt module

CLI Example:

.. code-block:: bash

salt '*' really_cool.function argument keyword=value

'''

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Private Functions

● Name starts with an underscore.● Only used internally by the module.● Will not show up in results from sys.doc and friends

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Public Functions

● Called directly by Salt commands● Will show up in the results returned from sys.doc and friends, such as

list_functions.

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Logging

import logging

log = logging.getLogger(__name__)

log.info('Useful for users')

log.warn('Something went wrong but I am still good to go.')

log.error('Something has gone wrong and should be fixed.')

log.debug('Useful information for developers.')

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Python2/Python3 Compatibility

from __future__ import absolute_import, unicode_literals, print_function

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Custom Modules

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

Why?

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

beacons: 27clouds: 34engines: 17grains: 21log handlers: 5output: 17modules: 481proxy: 18renderers: 20returners: 39sdb: 14states: 317utils: 129

SaltConf 17Module Counts

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

beacons: 28cloud: 34engines: 18grains: 25log handlers: 5output: 17modules: 497proxy: 19renderers: 21returners: 40sdb: 14states: 338utils: 135

Current Module Counts

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

So why?

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

All Code Exampleshttps://bit.ly/2rLheVH

Let’s Look At Some Code!

@garethgreenawayOpen Source Summit North America 2018 @garethgreenaway

@garethgreenawayOpen Source Summit North America 2018 @garethgreenawayOpen Source Summit North America 2018

Thanks for coming!

Questions?

top related