saltstack功能模块

编译安装需要依赖很多gcc的东西,放在生产环境下。

mkdir /srv/salt/prod/pkg
mkdir /srv/salt/prod/haproxy
mkdir /srv/salt/prod/haproxy/files
cd /srv/salt/prod/pkg/
vim pkg-init.sls

做pkg的初始化。

vim pkg-init.sls
pkg-init:   ##这回加个ID
  pkg.installed:
    - names:
      - gcc
      - gcc-c++
      - glibc
      - make
      - autoconf
      - openssl
      - openssl-devel

安装haproxy

现在安装haproxy,准备源码包。放在 /usr/local/src下。
先解压:tar -zxf ***
然后编译:

make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy

安装完后启动脚本在源码包里面。
cd haproxy***
里面有个启动脚本和配置,文件在cd examples 文件里有个haproxy.init

vim haproxy.init
BIN=/usr/sbin/$BASENAME -->
BIN=/usr/local/haproxy/sbin/$BASENAME 

配置文件改这些,然后要cp到 /srv/salt/prod/haproxy/files/
cp haproxy.init /srv/salt/prod/haproxy/files/
cd /srv/salt/prod/haproxy/
开始haproxy的安装模块

vim install.sls
include:
  - pkg.pkg-init
haproxy-install: #取个ID,并无意义,方便查看
  file.managed:
    - name: /usr/local/src/haproxy-1.6**.gz
    - source: salt://haproxy/files/haproxy-1.6**.gz
    - user: root
    - group: root
    - mode: 755
  cmd.run:
    - name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy    

第一步需要将gcc那些的include进来,这样好像是可以了,但是有个问题是每次执行都要安装一遍,这样费时费力的事情,当然是要避免的。saltstack于是有个模块可以判断如果有了就不装。

状态间关系

  • 功能:条件判断,主要用于cmd状态模块。
  • 常用方法:
    • onlyif:检查的命令,仅当“onlyif”选项指向的命令返回true时才执行name定义的命令
    • unless:用于检查的命令,仅当“unless”选项指向的命令返回false时才执行name指向的命令
  cmd.run:
    - name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
    - unless: test -d /usr/local/haproxy

现在这样写也没什么问题了感觉,但是如果源码包没有安装成功的话,后面的安装还是会继续,希望可以做一个依赖,当前面的没有安装成功的话,后面的就不会继续安装。所以需要学习一个依赖。
处理状态件关系

  • 功能:处理状态间关系
  • 常用方法:
    • require #我依赖某个状态
    • require_in #我被某个状态依赖
    • watch #我关注某个状态
    • watch_in #我被某个状态关注

haproxy-install依赖gcc的安装,和文件

  cmd.run:
    - name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
    - unless: test -d /usr/local/haproxy
    - require: 
      - pkg: pkg-init
      - file: haproxy- install

在install写的是为了无论在哪里都可以引用可以执行的,不能在里面写配置文件的,因为要在其他地方安装它就错了,要把唯一的东西写在里面,比如haproxy的安装和启动脚本,无论在哪里安装都需要这些东西。然后不同的地方,用不同的业务来引用。

下面写启动脚本,脚本是文件

****
      - pkg: pkg-init
      - file: haproxy- install
/etc/init.d/haproxy:
  file.managed:
    - source: salt://haproxy/files/haproxy.init
    - user: root
    - group: root
    - mode: 755
    - require:
      - cmd: haproxy-install

还要配个内核参数,可以监听非本地IP,负载均衡的时候IP只能在一台机器上,这时候备机也在监听这个地址,结果这个IP不在他的机器上,这样会报错,会起不来,所以要修改一个内核参数,可以监听非本地IP,在/proc/sys/net/ipv4/ip_nonlocal_bind,这个默认是0要改成为1.

*
*
*
      - pkg: pkg-init
      - file: haproxy- install
/etc/init.d/haproxy:
  file.managed:
    - source: salt://haproxy/files/haproxy.init
    - user: root
    - group: root
    - mode: 755
    - require:
      - cmd: haproxy-install

net.ipv4.ip_nonlocal_bind:
  sysctl.present:
    - value: 1

现在需要创建一个/etc/haproxy 的目录,后面放配置文件的时候用。这里可以再起个ID这样可以跟不起id的做对应。

***
net.ipv4.ip_nonlocal_bind:
  sysctl.present:
    - value: 1

haproxy-config-dir:
  file.directory:
    - name: /etc/haproxy
    - user: root 
    - group: root
    - mode: 755

启动脚本完了,还可以加载到系统服务里面:

***
haproxy-init:
  cmd.run:
    - name: chkconfig --add haproxy
    - unless: chkconfig --list | grep haproxy
    - require:
      - file: /etc/init.d/haproxy

可以将

/etc/init.d/haproxy:
  file.managed:
    - source: salt://haproxy/files/haproxy.init
    - user: root
    - group: root
    - mode: 755
    - require:
      - cmd: haproxy-install

加载到haproxy-init里面,如下:

haproxy-init:
  file.managed:
    - name: /etc/init.d/haproxy
    - source: salt://haproxy/files/haproxy.init
    - user: root
    - group: root
    - mode: 755
    - require:
      - cmd: haproxy-install
  cmd.run:
    - name: chkconfig --add haproxy
    - unless: chkconfig --list | grep haproxy
    - require:
      - file: haproxy-init   #依赖就可以直接写haproxy-init这个ID

现在可以手动执行如下:

salt ‘*’ state.sls haproxy.install env=prod

要指定环境,不然就会默认到base环境执行。

你可能感兴趣的:(saltstack功能模块)