24.5 saltstack远程执行命令-程序员宅基地

技术标签: python  运维  开发工具  

24.5 saltstack远程执行命令

24.6 grains

24.7 pillar

24.8 安装配置httpd

24.9 配置管理文件 (分发文件)

 

 

24.5 saltstack远程执行命令

 

1.salt '*' test.ping //这里的*表示所有已经签名的minion端,也可以指定一个

2.salt 'aming-01' test.ping

3.salt '*' cmd.run "hostname"

说明: 这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端aming-01,aming-02, 那我们可以写成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项,下面会介绍到。

[root@axinlinux-02 minion]# systemctl start salt-minion
[root@axinlinux-01 ~]# systemctl start salt-master
[root@axinlinux-01 ~]# systemctl start salt-minion
[root@axinlinux-01 ~]# salt-key -a axinlinux-02 
The key glob 'axinlinux-02' does not match any unaccepted keys.
[root@axinlinux-01 ~]# salt-key
Accepted Keys:
axinlinux-01
axinlinux-02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@axinlinux-01 ~]# salt '*' test.ping 测试所有机器
axinlinux-02:
    True
axinlinux-01:
    Minion did not return. [No response]
ERROR: Minions returned with non-zero exit code
[root@axinlinux-01 ~]# salt '*' cmd.run "hostname"统计各个电脑的名称
axinlinux-02:
    axinlinux-02
axinlinux-01:
    axinlinux-01
[root@axinlinux-01 ~]# salt 'axinlinux-02' cmd.run "ip addr"也可以指定单个主机
axinlinux-02:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:eb:b1:71 brd ff:ff:ff:ff:ff:ff
        inet 192.168.193.129/24 brd 192.168.193.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::513b:6cc5:d791:38ea/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
        inet6 fe80::79f6:2f1:99cb:9c4f/64 scope link tentative noprefixroute dadfailed 
           valid_lft forever preferred_lft forever
    3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
        link/ether 52:54:00:8d:04:55 brd ff:ff:ff:ff:ff:ff
        inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
           valid_lft forever preferred_lft forever
    4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
        link/ether 52:54:00:8d:04:55 brd ff:ff:ff:ff:ff:ff
[root@axinlinux-01 ~]# salt 'axin*' cmd.run "hostname"可匹配正则统配
axinlinux-02:
    axinlinux-02
axinlinux-01:
    axinlinux-01


24.6 grains

 

 

 

1.grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。

#静态的,不会去变更

2.salt 'aming-02' grains.ls 列出所有的grains项目名字

3.salt 'aming-02' grains.items 列出所有grains项目以及值

4.grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。

5.我们可以根据grains收集到的一些信息,做配置管理工作。

6.grains支持自定义信息。

 

saltstack – 自定义grains

1.minion上:

vim /etc/salt/grains(文件不存在) //添加:

role: nginx #相当于一个key,一个value

env: test

重启minion服务

systemctl restart salt-minion

master上:

获取grains:

salt '*' grains.item role env

2.可以借助grains的一些属性信息来执行

salt -G role:nginx cmd.run 'hostname'

#-G针对机器上role为nginx的机器,执行hostname命令

#那么,如果我们想针对一组机器执行一些命令。那么我们就可以针对这一些机器定义一个自定义的grains,然后用-G来执行

[root@axinlinux-01 ~]# salt 'axinlinux-02' grains.ls 仅列出项目名字
axinlinux-02:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
[root@axinlinux-01 ~]# salt 'axinlinux-02' grains.items 列出项目的名字和值,数据等等

这里数据可以做一个资产管理系统

axinlinux-02:
    ----------
    SSDs:
    biosreleasedate:
        07/02/2015
    biosversion:
        6.00
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - syscall
        - nx
        - pdpe1gb
        - rdtscp
        - lm
        - constant_tsc
        - arch_perfmon
        - pebs
        - bts
        - nopl
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - eagerfpu
        - pni
        - pclmulqdq
        - ssse3
        - fma
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - movbe
        - popcnt
        - tsc_deadline_timer
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - abm
        - 3dnowprefetch
        - epb
        - fsgsbase
        - tsc_adjust
        - bmi1
        - avx2
        - smep
        - bmi2
        - invpcid
        - rdseed
        - adx
        - smap
        - xsaveopt
        - dtherm
        - ida
        - arat
        - pln
        - pts
        - hwp
        - hwp_notify
        - hwp_act_window
        - hwp_epp
    cpu_model:
        Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
    cpuarch:
        x86_64
    disks:
        - sda
        - sr0
    dns:
        ----------
        domain:
        ip4_nameservers:
            - 202.106.0.20
        ip6_nameservers:
        nameservers:
            - 202.106.0.20
        options:
        search:
        sortlist:
    domain:
    fqdn:
        axinlinux-02
    fqdn_ip4:
        - 192.168.193.129
    fqdn_ip6:
        - fe80::513b:6cc5:d791:38ea
        - fe80::79f6:2f1:99cb:9c4f
    fqdns:
    gid:
        0
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              vmware
    groupname:
        root
    host:
        axinlinux-02
    hwaddr_interfaces:
        ----------
        ens33:
            00:0c:29:eb:b1:71
        lo:
            00:00:00:00:00:00
        virbr0:
            52:54:00:8d:04:55
        virbr0-nic:
            52:54:00:8d:04:55
    id:
        axinlinux-02
    init:
        systemd
    ip4_gw:
        192.168.193.2
[root@axinlinux-02 ~]# vim /etc/salt/grains
role: nginx#注意冒号后面空格

env: test

[root@axinlinux-02 ~]# systemctl start salt-minion
[root@axinlinux-02 ~]# systemctl restart salt-minion
[root@axinlinux-01 ~]# salt '*' grains.item role env#这样就会看到我们刚才设置的key和value
axinlinux-02:
    ----------
    env:
        test
    role:
        nginx
axinlinux-01:
    ----------
    env:
    role:

24.7 pillar

 

 

 

1.pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

2.配置自定义pillar

vim /etc/salt/master

找到如下配置://去掉前面的警号

pillar_roots:

base: #此行前面有两个空格

- /srv/pillar #此行前面有4个空格

3.mkdir /srv/pillar

4.vim /srv/pillar/test.sls(salt的配置文件,后缀名为sls) //内容如下

conf: /etc/123.conf

5.vi /srv/pillar/top.sls //内容如下

base:

'aming-02': #此行前面有两个空格(针对那些机器,主机名)

- test #此行前面有4个空格(test表示的是这个目录下的test.sls)。如果写多个可以在下面写test1等等

6.重启master,修改/etc/salt/master文件才重新。写test.sls和top.sls的是不需要重启

systemctl restart salt-master

7.当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:

salt '*' saltutil.refresh_pillar

验证:salt '*' pillar.item conf

8.pillar同样可以用来作为salt的匹配对象。比如 salt -I 'conf:/etc/123.conf' test.ping

#pillar匹配的时候用的是-I(大写的i)。grains匹配的时候用的是-G(大写的g)

 

 

两个东西(grains和pillar)侧重点不一样。pillar在服务端上定义,可以划分客户端,而grains却是在客户端上收集信息的,这个可以在初始化系统的时候就设定好。

所谓初始化系统,你可以认为用通用的模板安装系统,或者用通用的初始化脚本去执行一些配置,总之很容易做到。

vim /etc/salt/master
找到如下配置://去掉前面的警号

pillar_roots:

base: #此行前面有两个空格

- /srv/pillar #此行前面有4个空格
[root@axinlinux-01 ~]# systemctl restart salt-master只有在修改/etc/salt/master文件的时候,才重启服务
[root@axinlinux-01 ~]# ls /srv/pillar

ls: 无法访问/srv/pillar: 没有那个文件或目录
[root@axinlinux-01 ~]# mkdir /srv/pillar

[root@axinlinux-01 ~]# cd /srv/pillar/

[root@axinlinux-01 pillar]# #vim test.sls

conf: /etc/123.conf #冒号后面有个空格。跟定义grains的时候一样的格式

[root@axinlinux-01 pillar]# vim top.sls

base:

'aming-02':

- test #这个test表示的是这个目录下的test.sls文件

[root@axinlinux-01 pillar]# ls

test.sls top.sls

下面我们在来写多个

[root@axinlinux-01 pillar]# vim test2.sls

dir: /data/123.conf #写个dir的,为test2

[root@axinlinux-01 pillar]# vim top.sls #top.sls也要改一下

base:

'axinlinux-02':

- test

'axinlinux-01': #可以这样写,02是test。01是test2

- test2 #test2对应的就是上面创建的test2文件

[root@axinlinux-01 pillar]# salt '*' saltutil.refresh_pillar #刷新一下。不需要重启

axinlinux-02:

True

axinlinux-01:

True

[root@axinlinux-01 pillar]# salt '*' saltutil.refresh_pillar #刷新一下。不需要重启

axinlinux-02:

True

axinlinux-01:

True

[root@axinlinux-01 pillar]# salt '*' pillar.item conf dir #查看一下就有了

axinlinux-02:

----------

conf:

/etc/123.conf

dir:

axinlinux-01:

----------

conf:

dir:

/data/123.conf

[root@axinlinux-01 pillar]# salt -I 'conf:/etc/123.conf' cmd.run "w" #匹配conf:/etc/123.conf的机器,执行w命令

axinlinux-02:

15:28:50 up 5:02, 1 user, load average: 0.03, 0.03, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.208.1 10:31 28:58 0.19s 0.19s -bash

???

24.8 安装配置httpd

 

 

使用saltstack安装httpd

1.master上 vi /etc/salt/master //搜索找到file_roots

打开如下内容的注释:(删掉#号)

file_roots:

base: #前面有两个空格

- /srv/salt #前面有4个空格

#意思是找到他的根目录,就是/srv/salt为他的总入口,在这个目录里配置文件

2.mkdir /srv/salt ; cd /srv/salt

3.vi /srv/salt/top.sls //加入如下内容

base:

'*': #前面有两个空格(*表示所有的机器,也可以写单独的)

- httpd #前面有4个空格(也就是说还要创建一个httpd.sls的文件)

意思是,在所有的客户端上执行httpd模块

4.重启 systemctl restart salt-master

5.master上vi /srv/salt/httpd.sls //加入如下内容,这个就是httpd模块的内容

httpd-service: #定义配置或者服务的名字

pkg.installed: #salt内置的一个模块,类似于cmd.run

- names: //就是你要安装包的名字。

- httpd

- httpd-devel

service.running: #也是salt的一个模块,用来启动某一个服务的

- name: httpd #这里也就是启动httpd这个服务(/lib/systemd/system/目录下的服务名字)

- enable: True #表示要启动,如果是false就是关闭

说明: httpd-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

6.执行: salt 'aming-02' state.highstate

//执行过程会比较慢,因为客户端上在yum install httpd httpd-devel。也可以为 '*' ,全部机器都安装

#只要执行state.highstate,就会在/src/salt目录下找top.sls文件,里面相关的模块都会去执行

[root@axinlinux-01 ~]# vim /etc/salt/master

file_roots: #注意空格

base:

- /srv/salt/

[root@axinlinux-01 ~]# systemctl restart salt-master

[root@axinlinux-01 ~]# mkdir /srv/salt

[root@axinlinux-01 ~]# cd /srv/salt/

[root@axinlinux-01 salt]# vim top.sls

base: #一样注意空格

'*':

- httpd

[root@axinlinux-01 salt]# vim httpd.sls

httpd-service:

  pkg.installed:两个空格

    - names:四个空格

      - httpd六个空格

      - httpd-devel六个空格

service.running:

    - name: httpd四个空格

    - enable: True四个空格

[root@axinlinux-01 salt]# ls /lib/systemd/system #这个,目录下的服务的名字就是上面 - name: httpd,httpd的名字

[root@axinlinux-01 salt]# salt '*' state.highstate #因为安装的是nginx,所以机器上要关闭nginx

24.9 配置管理文件

 

 

 

将master上的模板或是文件吧,分发到minion

1.master上vi /srv/salt/test.sls //加入如下内容

file_test:

  file.managed: #(用到salt的模块)

    - name: /tmp/aminglinux.com #分发到minion上的路径,也就是放到minion哪

    - source: salt://test/123/1.txt #也就是来源文件,master上的,从哪里拷贝

    - user: root #属主

    - group: root #属组

    - mode: 600 #权限

说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt(master上/etc/sala/msater配置文件里的file_roots定义的)

2.mkdir /srv/salt/test/123

#上面定义了source: salt://test/123/1.txt,所以要在/srv/salt下创建test和123目录

3.cp /etc/passwd /srv/salt/test/123/1.txt

vi /srv/salt/top.sls //改为如下内容

base:

'*':

- test

4.执行: salt 'aming-02' state.highstate

5.检查aming-02上是否有/tmp/aminglinux.com,检查内容以及权限

实例:

[root@axinlinux-01 salt]# vim test.sls

file_test:

file.managed:

- name: /tmp/aminglinux.com

- source: salt://test/123/1.txt #salt;//代表的是/etc/salt/master文件里file_roots定义的/src/salt、所以这里的额路径是/src/salt/test/123/1.txt

- user: root

- group: root

- mode: 600

[root@axinlinux-01 salt]# mkdir test

[root@axinlinux-01 salt]# cd test/

[root@axinlinux-01 test]# mkdir 123

[root@axinlinux-01 test]# cd 123/

[root@axinlinux-01 123]# cp /etc/inittab ./1.txt #拷贝个文件过来,作为测试

[root@axinlinux-01 123]# ls

1.txt

[root@axinlinux-01 123]# vim /srv/salt/top.sls #修改一下他的总入口为test

base:

'*':

- test

[root@axinlinux-01 123]# salt 'axinlinux-02' state.highstate

[root@axinlinux-02 ~]# ls -lt /tmp/aminglinux.com #回到minion上查看一下

-rw------- 1 root root 511 12月 7 17:37 /tmp/aminglinux.com

[root@axinlinux-02 ~]# cat !$

cat /tmp/aminglinux.com

 

转载于:https://my.oschina.net/u/3866192/blog/3056015

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33708432/article/details/92417142

智能推荐

hdu 1229 还是A+B(水)-程序员宅基地

文章浏览阅读122次。还是A+BTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24568Accepted Submission(s): 11729Problem Description读入两个小于10000的正整数A和B,计算A+B。...

http客户端Feign——日志配置_feign 日志设置-程序员宅基地

文章浏览阅读419次。HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息。FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。NONE:不记录任何日志信息,这是默认值。配置Feign日志有两种方式;方式二:java代码实现。注解中声明则代表某服务。方式一:配置文件方式。_feign 日志设置

[转载]将容器管理的持久性 Bean 用于面向服务的体系结构-程序员宅基地

文章浏览阅读155次。将容器管理的持久性 Bean 用于面向服务的体系结构本文将介绍如何使用 IBM WebSphere Process Server 对容器管理的持久性 (CMP) Bean的连接和持久性逻辑加以控制,使其可以存储在非关系数据库..._javax.ejb.objectnotfoundexception: no such entity!

基础java练习题(递归)_java 递归例题-程序员宅基地

文章浏览阅读1.5k次。基础java练习题一、递归实现跳台阶从第一级跳到第n级,有多少种跳法一次可跳一级,也可跳两级。还能跳三级import java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[]args){ Scanner reader=new Scanner(System.in); while(reader.hasNext()){ _java 递归例题

面向对象程序设计(荣誉)实验一 String_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏6次。目录1.串应用- 计算一个串的最长的真前后缀题目描述输入输出样例输入样例输出题解2.字符串替换(string)题目描述输入输出样例输入样例输出题解3.可重叠子串 (Ver. I)题目描述输入输出样例输入样例输出题解4.字符串操作(string)题目描述输入输出样例输入样例输出题解1.串应用- 计算一个串的最长的真前后缀题目描述给定一个串,如ABCDAB,则ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA }ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。

算法设计与问题求解/西安交通大学本科课程MOOC/C_算法设计与问题求解西安交通大学-程序员宅基地

文章浏览阅读68次。西安交通大学/算法设计与问题求解/树与二叉树/MOOC_算法设计与问题求解西安交通大学

随便推点

[Vue warn]: Computed property “totalPrice“ was assigned to but it has no setter._computed property "totalprice" was assigned to but-程序员宅基地

文章浏览阅读1.6k次。问题:在Vue项目中出现如下错误提示:[Vue warn]: Computed property "totalPrice" was assigned to but it has no setter. (found in <Anonymous>)代码:<input v-model="totalPrice"/>原因:v-model命令,因Vue 的双向数据绑定原理 , 会自动操作 totalPrice, 对其进行set 操作而 totalPrice 作为计..._computed property "totalprice" was assigned to but it has no setter.

basic1003-我要通过!13行搞定:也许是全网最奇葩解法_basic 1003 case 1-程序员宅基地

文章浏览阅读60次。十分暴力而简洁的解决方式:读取P和T的位置并自动生成唯一正确答案,将题给测点与之对比,不一样就给我爬!_basic 1003 case 1

服务器浏览war文件,详解将Web项目War包部署到Tomcat服务器基本步骤-程序员宅基地

文章浏览阅读422次。原标题:详解将Web项目War包部署到Tomcat服务器基本步骤详解将Web项目War包部署到Tomcat服务器基本步骤1 War包War包一般是在进行Web开发时,通常是一个网站Project下的所有源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码。当开发人员在自己的开发机器上调试所有代码并通过后,为了交给测试人员测试和未来进行产品发布,都需要将开发人员的源码打包成Wa..._/opt/bosssoft/war/medical-web.war/web-inf/web.xml of module medical-web.war.

python组成三位无重复数字_python组合无重复三位数的实例-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏13次。# -*- coding: utf-8 -*-# 简述:这里有四个数字,分别是:1、2、3、4#提问:能组成多少个互不相同且无重复数字的三位数?各是多少?def f(n):list=[]count=0for i in range(1,n+1):for j in range(1, n+1):for k in range(1, n+1):if i!=j and j!=k and i!=k:list.a..._python求从0到9任意组合成三位数数字不能重复并输出

ElementUl中的el-table怎样吧0和1改变为男和女_elementui table 性别-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏2次。<el-table-column prop="studentSex" label="性别" :formatter="sex"></el-table-column>然后就在vue的methods中写方法就OK了methods: { sex(row,index){ if(row.studentSex == 1){ return '男'; }else{ return '女'; }..._elementui table 性别

java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下-程序员宅基地

文章浏览阅读1.1k次。java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下

推荐文章

热门文章

相关标签