saltstack模块分解解析

创建目录:
一个创建目录基本的例子:

create my_new_directory:
 file.directory:
   - name: /opt/my_new_directory
   - user: root
   - group: root
   - mode: 755

更多的例子看这里;https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.directory
服务运行:
这个state确保了服务在客户端正在运行;

Make sure the mysql service is running:
  service.running:
    - name: mysql

上面函数的第一行的state声明是一个state ID,这个必须是唯一的,可包含数字空格,如下,也可以在一个声明下添加多重函数调用:

Install mysql and make sure the mysql service is running:
  pkg.installed:
    - name: mysql
  service.running:
    - name: mysql

下载一个git仓库:
每一个函数都有一个name参数,如果没有定义name值,salt会有state ID做为这个name的值,比如下面的例子:

https://github.com/saltstack/salt-bootstrap:
  git.latest:
    - rev: develop
    - target: /tmp/salt

通常情况下,大神都是这么写的,小白都是用下面的方法:

Clone the SaltStack bootstrap script repo:
  pkg.installed: 
    - name: git # make sure git is installed first!
  git.latest:
    - name: https://github.com/saltstack/salt-bootstrap
    - rev: develop
    - target: /tmp/salt

此处有了name值,所以不会去引用第一行的ID.
用户添加:

user account for pete:
  user.present:
    - name: pete
    - shell: /bin/bash
    - home: /home/pete
    - groups:
      - sudo

group的参数是一个列表,所以它在下一行,缩进两个空格,然后是一个破折号。
添加一个hosts;

myserver in hosts file:
  host.present:
    - name: myserver
    - ip: 192.168.0.42

调用一个函数:

restart vsftpd:
  module.run:
    - name: service.restart
    - m_name: vsftpd  # m_name gets passed to the execution module as "name"

函数调用可以参靠这里;https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.service.html#salt.modules.service.restart

pillar

在定义的pillar目录下创建一个top.sls文件,例如下面:

base:
  '*':
    - default

然后再统计目录下创建一个default.sls文件,内容如下:
editor: vim
这个定义了是对于所有的minion端有效,一旦刷新,所有的客户端都会执行,为了让其生效在素有的minion上,我们要执行下面命令:

salt '*' saltutil.refresh_pillar

pillar使用在state中:
salt pillar的key是在state中有效的,我们可以下面的例子来调用上面的pillar-key:

vim installed:
  pkg.installed:
    - name: {{ pillar['editor'] }}

pillar中一班定义的是比较敏感的数据,可以通过key: value来进行定义,如下:

ftpusername: me
ftppassword: oxfm4@8t5gglu^h^&

例如参考下面的例子:

sync directory using lftp:
  cmd.run:
    - name: lftp -c "open -u {{ pillar['ftpusername'] }},{{ pillar['ftppassword'] }}
           -p 22 sftp://example.com;mirror -c -R /local /remote"

要是通过命令行来设置pillar值,这些值会覆盖pillar文件中定义的值,所以要谨慎:

salt '*' state.apply ftpsync pillar='{"ftpusername": "test", "ftppassword": "0ydyfww3giq8"}'

include---

有时候可以能对于state-tree ,你需要对多个文件进行多次利用,这里include就派上用处了,例如下面这个例子:

sync directory using lftp:
  cmd.run:
    - name: lftp -c "open -u {{ pillar['ftpusername'] }},{{ pillar['ftppassword'] }}
           -p 22 sftp://example.com;mirror -c -R /local /remote"

这个例子中,lftp命令是需要被下载了才能执行的,但是我们有写到了另外一个lftp.sls中,要想执行这段,必须先下载lftp,下面是lftp.sls:
srv/salt/lftp.sls:

install lftp:
  pkg.installed:
    - name: lftp

用clude组合起来就是:

include:
  - lftp

sync directory using lftp:
  cmd.run:
    - name: lftp -c "open -u {{ pillar['ftpusername'] }},{{ pillar['ftppassword'] }}
           -p 22 sftp://example.com;mirror -c -R /local /remote"

note:include必须在stat文件顶部。
文件管理------
通过指定source源,可以管理本地文件:

deploy the http.conf file:
  file.managed:
    - name: /etc/http/conf/http.conf
    - source: salt://apache/http.conf

其中salt://所定义的路径是在master的配,置文件中的file_roots段定义的,一般定义的都是/srv/salt,你要管理的文件都要放这里。
minion下载lftp,然后将配置传到minion:

install network packages:
  pkg.installed:
    - pkgs:
      - rsync
      - lftp
      - curl

copy lftp config file:
  file.managed:
    - name: /etc/lftp.conf
    - source: salt://_tmpl_lftp.conf

目录传输:

copy some files to the web server:
  file.recurse:
    - name: /var/www
    - source: salt://apache/www
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 关于,SaltStack 这个牛逼的配置管理神器,上周我写了篇入门级的 《SaltStack 一日游》。 今天,深...
    hxzqlh阅读 2,476评论 0 1
  • 学习地址[http://tech.mainwise.cn/?p=438] 更新于 3.25 23:16 salt简...
    J书越来越垃圾了阅读 30,843评论 9 36
  • 烤地瓜,金黄的内在,咬一口糯甜糯甜的。 滑入喉咙,余香满口。 冬天的时候,即暖手,又解馋。 然而,我最爱吃的烤地瓜...
    赵晓越阅读 366评论 3 5
  • 今天我和我的二妈、哥哥、姐姐、妈妈,我们一起去,三河口水库玩,我们到了那块我和哥哥姐姐一起去那边河岸上钓鱼,我们是...
    吉佳怡2008阅读 176评论 0 0
  • 昨天參加完李老師“艾灸如何增強氣場的分享會”,感覺蠻深刻的。 這是我第二次參加李老師的分享會,也算是緣份吧。 這次...
    喬大衛REIKI阅读 196评论 0 0