SaltStack(4)——SaltStack目录中有多个sls文件的执行顺序

一、saltstack文件中有多个sls文件的执行顺序

在stalstack的目录中有多个sls文件,系统会默认编译init.sls文件 所以编译sls文件中的模块可以在文件中定义

salt执行的目录下如果有多个sls文件应该怎样控制执行顺序

方法一:

在文件中控制执行的顺序

例如 :

在此目录有init.sls 和service.sls两个文件

如果在执行以下命令时

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

系统会默认执行init.sls文件中的内容

因此让全部的文件执行需要在servcice.sls文件中添加init.sls目录

修改nginx配置文件根据cpu核心的情况来启动多少个进程

include:                             ##将nginx中的init.sls文件包含进来 
  - nginx
service-nginx:
  file.managed:
    - name: /usr/local/nginx/conf/nginx.conf
    - source: salt://nginx/nginx.conf

  service.running:
    - name: nginx
    - watch:
        - file: service-nginx

修改配置文件的模板

步骤二:

编译:

执行的顺序是:按照文件的顺序来执行先执行 install-nginx  、再执行service-nginx

[root@server1 nginx]# salt server3 state.highstate       ##高级推 

方法二:

指定读取nginx目录下的指定文件需要在top.sls文件中定义执行的顺序

步骤一:编辑主配置文件

[root@server1 ~]# vim /srv/salt/nginx/service.sls

service-nginx:
  file.managed:
    - name: /usr/local/nginx/conf/nginx.conf
    - source: salt://nginx/nginx.conf

  service.running:
    - name: nginx
    - watch:
        - file: service-nginx

步骤二:

编辑top.sls文件

[root@server1 ~]# cat  /srv/salt/top.sls 
base:
  'server2':
    - apache
  'server3':
    - nginx             ##先执行的是nginx目录下默认的init.sls文件 
    - nginx.service     ##执行nginx目录下的service.sls文件
     

步骤三 :

编译:

[root@server1 nginx]# salt server3 state.highstate       ##高级推 

方法三:

把service.sls文件放在init.sls文件之后执行

步骤一

实验环境

将之前top.sls文件中的nginx去掉

步骤二:

编辑init.sls文件

install-nginx:
  pkg.installed:
    - pkgs:
      - gcc
      - make 
      - openssl-devel 
      - pcre-devel
  
  archive.extracted:
    - name: /mnt
    - source: salt://nginx/nginx-1.16.0.tar.gz
    - archive_format: tar  
  cmd.run:
   - name: cd /mnt//nginx-1.16.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g'  auto/cc/gcc  && ./configure --prefix=/usr/local/nginx  --with-http_ssl_module &> /dev/null && make install &> /dev/null 
   - creates: /usr/local/nginx 
  file.managed:
    - name: /lib/systemd/system/nginx.service 
    - source: salt://nginx/nginx.service
   

include:
  - nginx.service     ##将server.init文件中的内容包含到文件中来 

步骤三:

编辑 service.sls文件

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/nginx.conf
    - require:
      - sls: nginx       ##执行此文件之前先把init.sls 文件包含进来 

  service.running:        #执行完init.sls文件和service文件之后重启服务
    - name: nginx
    - watch:
      -  file: /usr/local/nginx/conf/nginx.conf

步骤三:

编译:

[root@server1 nginx]# salt server3 state.highstate 

先执行insatll-nginx再执行service.sls文件中的内容

方法四:

在一个sls文件中可以声明多个ID

步骤一:

编辑init.sls文件

install-nginx:
  pkg.installed:
    - pkgs:
      - gcc
      - make 
      - openssl-devel 
      - pcre-devel
  
  archive.extracted:
    - name: /mnt
    - source: salt://nginx/nginx-1.16.0.tar.gz
    - archive_format: tar  
  cmd.run:
   - name: cd /mnt//nginx-1.16.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g'  auto/cc/gcc  && ./configure --prefix=/usr/local/nginx  --with-http_ssl_module &> /dev/null && make install &> /dev/null 
   - creates: /usr/local/nginx 
  file.managed:
    - name: /lib/systemd/system/nginx.service 
    - source: salt://nginx/nginx.service
   

/usr/local/nginx/conf/nginx.conf:        ##添加的ID声明模块 
  file.managed:
    - source: salt://nginx/nginx.conf
    - require:
      - sls: nginx                       ##在此ID模块中可以声明不同的模块

  service.running:
    - name: nginx
    - watch:
      -  file: /usr/local/nginx/conf/nginx.conf
 

(任务之间的顺序是可以调整的、正常顺序是从上往下、,模块之间的顺序可以写在一个文件中也可以分开写在几个文件中分开执行 !!!)

发布了93 篇原创文章 · 获赞 1 · 访问量 1908

猜你喜欢

转载自blog.csdn.net/dghfttgv/article/details/104925590