我的编程空间,编程开发者的网络收藏夹
学习永远不晚

salt扩展与python脚本

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

salt扩展与python脚本


来源 SALTSTACK技术入门与实战

1.扩展grains
通过Python脚本定义grains
http://www.xiaomastack.com/2014/10/31/saltstack-grains/
file_roots:
  base:
    - /srv/salt/
/srv/salt/_grains/example.py
#!/usr/bin/python
def grains():
	local={}
	test={'key': 'vaule','key1': 'vaule1','key2': 'vaule2'}
	local['list']= [1,2,3,4]
	local['string'] = 'str'
	local['dict'] = test
	return local
salt 'Minion' saltutil.sync_grains


2.扩展Module
当前Python版本的site-packages/salt/modules/下
脚本里面的一个函数就是Module的一个方法
def A(host, nameserver=None)
dig = ['dig', '+short', str(host), 'A']
dig.append('@{0}'.format(nameserver))
__salt__['cmd.run_all']

__virtualname__是定义module名称
__virtual__函数的作用主要是在Module的时候需要判断dig命令是否存在


puppet.py
def setmaster
def service(signal=None):
def master(config_file='/etc/puppet/puppet.conf'):
setmaster函数主要指定puppetserver地址
version函数是查看minion上puppet的版本
service函数是去管理puppet的服务状态
master函数是查看目前puppet配置文件里面定义的server地址
使用salt 'Minion' puppet.version

意思就是说在site-packages/salt/modules里面写一个py,然后写很多函数,最后salt就可以像这样puppet.version调用了。

下面这个表明只是在客户端执行,这就是模块的作用。

代码 
saltstack之远程触发文件备份、回滚
mkdir /srv/salt/_modules   默认没有此文件,自己生成一个

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys,string,shutil
import os,tarfile
import datetime,time

tn=datetime.datetime.today()
time_now=tn.strftime("%Y-%m-%d")
data_bak='/data/databak'
data_tmp='/data/databak/tmp/%s' % time_now
com_f="%s/%s" % (data_bak,time_now)
if not os.path.exists(com_f):
     os.makedirs(com_f)

def CpFile():
     id = sys.argv[1]
     dir = sys.argv[2]            #传入两个变量,任务自动生成的id与要替换的文件
     filename = '%s/%s.tar' % (com_f, id)
     mode = 'w:tar'
     os.chdir(data_bak)                                                                                                                                                
     w_file=open("/tmp/tmp.list",'w')      
     w_file.write(id+" "+dir)              #记录每次备份的id与相对应的备份目录或文件的路径
     w_file.close()
     file = tarfile.open( filename, mode )
     file.add( '/tmp/tmp.list' )
     file.add( dir )    
     file.close()
     return 'ok'       #测试过程,就先让返回ok吧,之后再做判断

                                                                                          
def RollBack():
     id = sys.argv[1]        #想要回滚到的版本id
     if not os.path.exists(data_tmp):
          os.makedirs(data_tmp)
     filename = '%s/%s.tar' % (com_f, id)
     tar = tarfile.open("%s" % filename)
     for b in tar:
          tar.extract(b,path="%s" % data_tmp)
     tar.close()
     for line in open('%s/tmp/tmp.list' % data_tmp):
          id = line.split(" ")[:1][0]
          dir = line.split(" ")[1:][0]       #读取备份时的路径
          backup_dir='%s/%s' % (data_tmp,dir)
          os.system('\cp -rp %s %s' % (backup_dir,dir))
          return 'ok'



3.扩展state

state 说白就是调用已经存在的各种modules,具体salt官网很多。

默认SaltStack的state脚本都是在当前Python版本的site-packages/salt/states/下
SaltStack没有一个比较合适的state的话,我们还可以通过Python语言去定义一个state

3.1 __salt__['rabbitmq.user_exists']
def absent(name,runas=None):
result = __salt__['rabbitmq.delete_user']()

最终return ret,返回一个字典

3.2 cat /srv/salt/_states/ansible.py
def files(name='/etc/ansible/ansible.cfg',inventory=None,forks=None,module_lang=None,
host_key_checking=None,timeout=None)
file=__salt__['file.file_exists'](name)
__opts__['test']:
接下来我们编写一个简单的state来验证一下:
SaltStack@Master: cat /srv/salt/ansible.sls
'/etc/ansible/ansible.cfg':
  ansible.files:  #这里的files就是py脚本定义的files函数
    - inventory: /etc/host
    - timeout: 88
    - forks: 8

使用saltutil.sync_states命令同步即可。脚本会同步到
Minion定义的cachedir目录下的extmods/states下。
运行一次 salt 'Minion' state.sls ansible

我们编写state其实大量的工作就是把想要完成的需求,通过state YAML形式定义
出来。然后我们编写的state脚本去真正去完成我们想要的结果

4.ext_pillar与ext_nodes

4.1.1 ext_pillar 写过  245页
官网一个Hiera例子
data = yaml.safe_load(__salt__['cmd.run']()

4.1.2 自己编写一个ext_pillar接口
extension_modules: /srv/salt/modules/
ext_pillar:
- salt: []
这里ext_pillar接口的脚本就叫做salt.py,脚本的路径是在/srv/salt/modules/pillar/目录下

脚本返回字典就行。


4.2 理解ext_nodes流程和案例  238页
平常使用SaltStack的state的时候 top.sls入口文件
top.sls作用是指定Minion与state.sls文件的对应关系
目的top.sls能做到动态

四种形式:
1)通过从MongoDB里面获取Minion与state.sls文件的对应关系:
2)通过ext_nodes的形式:
3)通过reclass_adapter的形式:
4)通过从cobbler直接获取的形式:

ext_nodes支持通过脚本的形式
脚本返回的字典
base:
'Minion':
- cpis
stage:
'Minion01':
- sshd

master_tops:
ext_nodes: /srv/salt/saltbook.py

最后我们来运行state.highstate查看运行结果

4.3 SaltStack git文件服务器  这块可以看做state的扩展

SaltStack除了支持默认roots fileserver以外,还支持git fileserver
salt '*' pillar.get master:environment(这点是至关重要的)

修改master配置文件
fileserver_backend:
- git
gitfs_remotes:
- https://github.com/shencan/saltstates.git
gitfs_root: states

使用salt-run fileserver.update命令更新state文件



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

salt扩展与python脚本

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

salt扩展与python脚本

来源 SALTSTACK技术入门与实战1.扩展grains通过Python脚本定义grainshttp://www.xiaomastack.com/2014/10/31/saltstack-grains/file_roots:  base:
2023-01-31

python脚本文件的扩展名有哪些

本篇内容介绍了“python脚本文件的扩展名有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!扩展名说明1、通常写Python脚本都是以.
2023-06-30

用Python脚本生成Android SALT扰码的方法

代码如下:#!/usr/bin/python # Filename: gen_salt.py import random salt =[] for i in range(0, 30): salt.append( ra
2022-06-06

游戏开发中脚本语言的应用与扩展(脚本语言如何助力游戏开发的灵活性与扩展性?)

脚本语言在游戏开发中发挥着关键作用,为其提供灵活性与扩展性。脚本语言具有动态性和快速原型设计的特性,便于游戏设计师快速响应反馈并探索不同机制。通过脚本引擎、插件和社区支持,脚本语言可以扩展其功能,应用于AI、关卡脚本、UI设计、游戏平衡和Modding等场景。脚本语言助力游戏快速迭代、减少编译依赖、调整游戏平衡和行为,并提供扩展途径,为玩家带来更丰富的游戏体验。
游戏开发中脚本语言的应用与扩展(脚本语言如何助力游戏开发的灵活性与扩展性?)
2024-04-02

linux如何安装php扩展脚本

这篇文章将为大家详细讲解有关linux如何安装php扩展脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。测试环境:ubuntu 12.04 php 5.3.x#!/bin/bash#Program:#
2023-06-09

shell 脚本如何安装PHP扩展

这篇文章主要介绍“shell 脚本如何安装PHP扩展”,在日常操作中,相信很多人在shell 脚本如何安装PHP扩展问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”shell 脚本如何安装PHP扩展”的疑惑有所
2023-06-09

linux安装php扩展脚本分享

测试环境:ubuntu 12.04 php 5.3.x#!/bin/bash#Program:# Accomplish to expand the specified function only one key#History:# 2013
2022-06-04

使用Python来开发Markdown脚本扩展的实例分享

关于Markdown 在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版、字体设置。它使我们专心于码字,用「标记」语法,来代
2022-06-04

shell 脚本安装PHP扩展的简单方法

实例如下:#!/bin/bash #This script is to install PHP extensions #Author=steven #Email=775189187@qq.com #WriteTime=Sun Aug 14
2022-06-04

PHP 函数版本兼容性与扩展扩展是否相关?

php 函数版本兼容性受 php 扩展影响。扩展是预编译的代码库,可添加或修改函数。扩展版本更新可能导致与旧版本不兼容,例如参数列表更改。解决兼容性问题的方法包括:检查已安装扩展版本、安装兼容版本或升级/修改脚本以兼容最新扩展。PHP 函数
PHP 函数版本兼容性与扩展扩展是否相关?
2024-04-25

如何编写Shell脚本批量添加扩展名

本篇内容介绍了“如何编写Shell脚本批量添加扩展名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法1:代码如下:for file in
2023-06-09

与python相关的文件扩展名

在开始之前,先简单说说python如何工作:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接
2023-01-31

Python的C扩展-应用与陷阱

Python的C扩展-应用与陷阱 1. 背景2. Python扩展的用武之地-库测试 (1)动态库的测试(2)静态库的测试3 python模块级扩展4 小结反馈建议 1. 背景Python作为一种流行的动态脚本语言,既有
2023-01-31

Shell脚本批量添加扩展名的两种方法分享

方法1:for file in `ls`; do mv $file $file.txt; done方法2:find . -type f |xargs -i mv {} {}.txt还有一些试验不成功的,先记录在此。 1.用rename命令
2022-06-04

Nodejs与Python脚本语言混编

Nodejs必要模块child_processchild_process 模块详解小结最近在做一个项目,可能会涉及到机器学习部分,同伴使用python作为机器学习算法的实现语言。由于是基于web的应用,确实可以完全用python实现web应
2023-01-31

Python(三)安装扩展库与模块导入

1、我们使用pip来管理Python扩展库,常用的pip命令使用方法pip命令示例说明pip install SomePackage安装SomePackage模块pip list列出当前已安装的所有模块pip install --upgra
2023-01-31

十大 Python 自动化工具与脚本示例

本文介绍十大Python自动化工具与脚本示例,这些工具和脚本能够大大提高工作效率,减少手动操作。

Python脚本程序与Perl怎么进行比较

Python脚本程序与Perl怎么进行比较,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python脚本程序在开发界的名声已经是非常好了:Python是一种解释性的语言,但是这
2023-06-17

驾驭 Python 异步编程:解锁高效与可扩展性

Python 异步编程:解锁高效与可扩展性
驾驭 Python 异步编程:解锁高效与可扩展性
2024-03-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录