[转载] Python:把字符串转换成整数

参考链接: SaltStack-工作示例

Saltstack 远程执行

 一、命令方式二、文件方式编辑远程执行文件编写远程执行模块使用top文件使用入口文件init.sls

  三、使用saltstack安装配置httpd

 

 

Saltstack简介及部署可以参考:https://blog.csdn.net/qq_35887546/article/details/106172282 

一、命令方式 

Salt命令由三个主要部分构成: 

salt '<target>' <function> [arguments]

 

target: 指定哪些minion, 默认的规则是使用globe匹配minion id. 

salt内置的执行模块列表:http://docs.saltstack.cn/ref/modules/all/index.html 

[root@server1 minions]# salt '*' test.ping

server2:

    True

server3:

    True

 

Targets也可以使用正则表达式: 

[root@server1 minions]# salt -E 'server[1-4]' cmd.run hostname

server2:

    server2

server3:

    server3

 

funcation是module提供的功能,Salt内置了大量有效的functions. 

注意当执行的函数有参数时,需要引号(单双都可以)引起来: 

[root@server1 minions]# salt -E 'server[1-4]' cmd.run 'df -h'

server3:

    Filesystem             Size  Used Avail Use% Mounted on

    /dev/mapper/rhel-root   17G  1.2G   16G   8% /

    devtmpfs               484M     0  484M   0% /dev

    tmpfs                  496M   80K  496M   1% /dev/shm

    tmpfs                  496M  6.7M  489M   2% /run

    tmpfs                  496M     0  496M   0% /sys/fs/cgroup

    /dev/sda1             1014M  133M  882M  14% /boot

    tmpfs                  100M     0  100M   0% /run/user/0

server2:

    Filesystem             Size  Used Avail Use% Mounted on

    /dev/mapper/rhel-root   17G  1.2G   16G   8% /

    devtmpfs               484M     0  484M   0% /dev

    tmpfs                  496M  120K  496M   1% /dev/shm

    tmpfs                  496M  6.7M  489M   2% /run

    tmpfs                  496M     0  496M   0% /sys/fs/cgroup

    /dev/sda1             1014M  133M  882M  14% /boot

    tmpfs                  100M     0  100M   0% /run/user/0

 

Targets也可以指定列表: 

[root@server1 minions]# salt -L 'server2,server3' test.ping

server2:

    True

server3:

    True

 

arguments通过空格来界定参数: 

[root@server1 ~]# salt server2 sys.doc pkg       #查看模块文档

[root@server1 ~]# salt '*' pkg.install wget        #所有minion安装wget

[root@server1 ~]# salt '*' pkg.remove wget        #所有minion卸载wget

 

二、文件方式 

编辑远程执行文件 

 

查看配置文件可以看出slatstack默认的base文件目录为/srv/salt,其中salt目录需要我们自己新建: 

[root@server1 ~]# mkdir /srv/salt

[root@server1 ~]# cd /srv/salt/

 

Salt 状态系统的核心是SLS,或者叫SaLt State 文件。 

SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。 sls文件命名: 

sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。使用子目录来做组织是个很好的选择。init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls就是表示apache.如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache. 

接下来我们就可以编辑文件了,编辑的文件使用yaml语法: 

 

 规则一: 缩进 Salt需要每个缩进级别由两个空格组成,不要使用tabs。 规则二: 冒号 字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。 my_key: my_value 规则三: 短横杠 想要表示列表项,使用一个短横杠加一个空格。 

 list_value_onelist_value_two 

 

示例,编辑文件: 

[root@server1 salt]# vim install.sls

[root@server1 salt]# cat install.sls 

httpd:                                ## ID声明

  pkg.installed                        ##状态声明.函数声明

 

指定server2执行以上文件: 

[root@server1 salt]# salt server2 state.sls install

 

注意,指定文件时不需要加后缀sls。 

查看server2的日志可以看出已经安装: 可以看出还安装了很多依赖性的包。 

也可以安装多个包: 

[root@server1 salt]# vim install.sls 

[root@server1 salt]# cat install.sls 

httpd:

  pkg.installed

 

wget:

  pkg.installed

[root@server1 salt]# salt server3 state.sls install

 

查看server3日志可以看出已经安装成功: 再执行一次salt server3 state.sls install命令时状态将不会改变,这里与ansible类似: 

也可以使用以下这种写法: 

[root@server1 salt]# vim install.sls 

[root@server1 salt]# cat install.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd

      - wget

      - php

 

卸载应用可以使用pkg.removed: 

[root@server1 salt]# vim install.sls 

[root@server1 salt]# cat install.sls 

apache:

  pkg.removed:

    - pkgs:

      - httpd

      - wget

      - php

 

[root@server1 salt]# salt '*' state.sls install

 

以上表示再所有节点卸载httpd,wget,php。 查看日志可以看出已经卸载: 

 

编写远程执行模块 

我们也可以自定义saltstack模块,自定义的模块需要在/srv/salt/_modules目录中: 

创建模块目录: 

[root@server1 salt]# mkdir /srv/salt/_modules

[root@server1 salt]# ls

install.sls  _modules

 

编写模块文件: 

[root@server1 salt]# cd _modules/

[root@server1 _modules]# vim mydisk.py

[root@server1 _modules]# cat mydisk.py 

def df():

    return __salt__['cmd.run']('df -h')

 

以上文件表示定义了一个名为mydisk的模块,且模块内有一个函数df,函数的作用是运行df -h命令。 

同步模块: 

[root@server1 _modules]# salt '*' saltutil.sync_modules

server2:

    - modules.mydisk

server3:

    - modules.mydisk

 

同步后salt-master会将模块信息发送到指定的salt-minion,salt-minion将信息保存到/var/cache/salt/minion/目录下:  调用模块: 

[root@server1 _modules]# salt '*' mydisk.df

server3:

    Filesystem             Size  Used Avail Use% Mounted on

    /dev/mapper/rhel-root   17G  1.2G   16G   8% /

    devtmpfs               484M     0  484M   0% /dev

    tmpfs                  496M   80K  496M   1% /dev/shm

    tmpfs                  496M  6.7M  489M   2% /run

    tmpfs                  496M     0  496M   0% /sys/fs/cgroup

    /dev/sda1             1014M  133M  882M  14% /boot

    tmpfs                  100M     0  100M   0% /run/user/0

server2:

    Filesystem             Size  Used Avail Use% Mounted on

    /dev/mapper/rhel-root   17G  1.2G   16G   8% /

    devtmpfs               484M     0  484M   0% /dev

    tmpfs                  496M  120K  496M   1% /dev/shm

    tmpfs                  496M  6.7M  489M   2% /run

    tmpfs                  496M     0  496M   0% /sys/fs/cgroup

    /dev/sda1             1014M  133M  882M  14% /boot

    tmpfs                  100M     0  100M   0% /run/user/0

 

使用top文件 

如果我们想要在不同的节点安装不一样的包,可以用以下这种方式实现: 

[root@server1 salt]# vim apache.sls 

[root@server1 salt]# cat apache.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd 

[root@server1 salt]# vim nfs.sls 

[root@server1 salt]# cat nfs.sls 

nfs:

  pkg.installed:

    - pkgs:

      - nfs-utils

[root@server1 salt]# ls

apache.sls  _modules  nfs.sls

 

现在我们要求在server2安装apache文件,在server3安装nfs文件,原来的方法是分两次指定节点执行指定文件,也可以使用top文件的方式: 

[root@server1 salt]# vim top.sls

[root@server1 salt]# cat top.sls 

base:

  'server2':

    - apache

  'server3':

    - nfs

 

执行top文件: 

[root@server1 salt]# salt '*' state.highstate

 

 在日常使用中,我们最好使用子目录来做组织: 

[root@server1 salt]# ls

apache.sls  _modules  nfs.sls  top.sls

[root@server1 salt]# mkdir apache

[root@server1 salt]# mkdir nfs

[root@server1 salt]# mv apache.sls apache

[root@server1 salt]# mv nfs.sls nfs

[root@server1 salt]# ls

apache  _modules  nfs  top.sls

 

这时目录已经发生变化,我们现在需要调用apahce目录下的apache.sls文件时需要使用以下方式: 

[root@server1 salt]# salt server2 state.sls apache.apache

 

同样sls后缀不需要加。 

那么此时上面的nfs文件就需要这么写: 

[root@server1 salt]# vim top.sls 

[root@server1 salt]# cat top.sls 

base:

  'server2':

    - apache.apache

  'server3':

    - nfs.nfs

[root@server1 salt]# salt '*' state.highstate

 

使用入口文件init.sls 

也可以使用入口文件init.sls: 

[root@server1 salt]# cd apache/

[root@server1 apache]# mv install.sls init.sls

 

当有入口文件时,我们不需要再指定文件,只需指定目录名称即可: 

[root@server1 salt]# vim top.sls 

[root@server1 salt]# cat top.sls 

base:

  'server2':

    - apache

  'server3':

    - nfs.nfs

[root@server1 salt]# salt '*' state.highstate

 

三、使用saltstack安装配置httpd 

安装httpd并准备配置文件: 

[root@server1 apache]# vim init.sls 

[root@server1 apache]# cat init.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd

  file.managed:

    - name: /etc/httpd/conf/httpd.conf

    - source: salt://apache/httpd.conf

 

其中file.managed中的name表示的是minion端的文件路径,source表示master端的文件路径,salt://表示saltstack的base路径(即/srv/salt/) 

之后我们需要准备配置文件httpd.conf: 

[root@server1 apache]# scp server3:/etc/httpd/conf/httpd.conf .

[root@server1 apache]# ls

httpd.conf  init.sls

[root@server1 apache]# pwd

/srv/salt/apache

 

现在可以直接进行推送: 

[root@server1 apache]# salt server2 state.sls apache

 

可以看出先进行的是包的安装,再进行配置文件的更改,由于我们没有更改配置文件,因此状态也没有改变,saltstack通过对比文件的md5值来判断文件是否更改。 

[root@server1 apache]# md5sum httpd.conf             #查看文件的md5值

f5e7449c0f17bc856e86011cb5d152ba  httpd.conf

[root@server1 apache]# vim httpd.conf 

[root@server1 apache]# cat httpd.conf | grep 8080

更改端口为8080:

Listen 8080

 

再次查看文件的md5值发现已经改变: 

[root@server1 apache]# md5sum httpd.conf 

04e9239e7bd5d5b9b85864226d60eee5  httpd.conf

 

进行推送: 

[root@server1 apache]# salt server2 state.sls apache

 

在server2可以看出文件的md5值和salt-master是同步的: 

推送前:

[root@server2 salt]# md5sum /etc/httpd/conf/httpd.conf

f5e7449c0f17bc856e86011cb5d152ba  /etc/httpd/conf/httpd.conf

推送后:

[root@server2 salt]# md5sum /etc/httpd/conf/httpd.conf

04e9239e7bd5d5b9b85864226d60eee5  /etc/httpd/conf/httpd.conf

 

启动服务: 

[root@server1 apache]# vim init.sls 

[root@server1 apache]# cat init.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd

  file.managed:

    - name: /etc/httpd/conf/httpd.conf

    - source: salt://apache/httpd.conf

  service.running:

    - httpd

 

启动服务使用了service模块中的running函数。 

推送: 

[root@server1 apache]# salt server2 state.sls apache

 

在server2查看:  

[root@server2 salt]# netstat -antlp

.....      

tcp6       0      0 :::8080                 :::*                    LISTEN      14862/httpd         

.....

 

但是此时是8080端口,我们更改为80: 

[root@server1 apache]# vim httpd.conf 

[root@server1 apache]# cat httpd.conf | grep 80

 

Listen 80

 

[root@server1 apache]# salt server2 state.sls apache

 

推送后可以发现推送成功但是端口并没有更改: 

[root@server2 salt]# netstat -antlp

......           

tcp6       0      0 :::8080                 :::*                    LISTEN      14862/httpd         

...... 

 

原因就是我们在更改文件后并没有重启应用,需要进行以下设置: 

[root@server1 apache]# vim init.sls 

[root@server1 apache]# cat init.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd

  file.managed:

    - name: /etc/httpd/conf/httpd.conf

    - source: salt://apache/httpd.conf

  service.running:

    - name: httpd

    - watch:

      - file: apache

 

watch表示监控唯一性声明apache下的文件(即salt://apache/httpd.conf),当文件有更改时即重启服务。 

更改文件后推送: 

[root@server1 apache]# vim httpd.conf 

[root@server1 apache]# cat httpd.conf | grep 8000

Listen 8000

[root@server1 apache]# salt server2 state.sls apache

 

 从返回状态可以看出服务已经重启,在server2查看: 

[root@server2 salt]# netstat -antlp

......         

tcp6       0      0 :::8000                 :::*                    LISTEN      14944/httpd 

 

更改成功。 

默认的触发方式为restart,我们也可以让它以reload的触发方式: 

[root@server1 apache]# vim init.sls 

[root@server1 apache]# cat init.sls

apache:

  pkg.installed:

    - pkgs:

      - httpd

  file.managed:

    - name: /etc/httpd/conf/httpd.conf

    - source: salt://apache/httpd.conf

  service.running:

    - name: httpd

    - reload: true

    - watch:

      - file: apache

 

即加一个- reload: true 

更改并推送: 

[root@server1 apache]# vim httpd.conf 

[root@server1 apache]# cat httpd.conf | grep 8888

Listen 8888

[root@server1 apache]# salt server2 state.sls apache

 

也可以加enable: true设置开即自启: 

[root@server1 apache]# vim init.sls 

[root@server1 apache]# cat init.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd

  file.managed:

    - name: /etc/httpd/conf/httpd.conf

    - source: salt://apache/httpd.conf

  service.running:

    - name: httpd

    - reload: true

    - enable: true

    - watch:

      - file: apache

[root@server1 apache]# 

[root@server1 apache]# salt server2 state.sls apache

 

 

也可以使用其他的写法: 

[root@server1 apache]# vim init.sls 

[root@server1 apache]# cat init.sls 

apache:

  pkg.installed:

    - pkgs:

      - httpd

  service.running:

    - name: httpd

    - reload: true

    - enable: true

    - watch:

      - file: /etc/httpd/conf/httpd.conf

 

/etc/httpd/conf/httpd.conf:

  file.managed:

    - source: salt://apache/httpd.conf

 

以上的作用与上面的写法是相同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值