首页 > 代码库 > saltstack使用之二(完成部署编译nginx以及部分cp模块的使用)

saltstack使用之二(完成部署编译nginx以及部分cp模块的使用)

书接上一篇原创其中有好同事的帮忙一起测试不容易写出文档整理一下


salt.modules.cp.get_dir(path, dest, saltenv=‘base‘, template=None, gzip=None, env=None)

Used to recursively copy a directory from the salt master

1、复制目录

salt ‘*‘ cp.get_dir salt://path/to/dir/ /minion/dest


从主节点的能访问到的URL处复制文件给从节点

salt.modules.cp.get_url(path, dest, saltenv=‘base‘, env=None)

Used to get a single file from a URL.

The default behaviuor is to write the fetched file to the given destination path. To simply return the text contents instead, set destination to None.


CLI Example:


salt ‘*‘ cp.get_url salt://my/file /tmp/mine

salt ‘*‘ cp.get_url http://www.slashdot.org /tmp/index.html


2、主节点访问的URL下载到从节点

举例

[root@master nginx]# salt ‘test1‘ cp.get_url http://www.05hd.com/wp-content/uploads/2014/12/Nginx-init-CentOS.sh /tmp/nginx-init-beta1.sh
test1:
    /tmp/nginx-init-beta1.sh
从节点
[root@localhost tmp]# ll
total 11048
-rw-r--r-- 1 root   root       2541 Dec 30 13:59 nginx-init-beta1.sh


3、把从节点的文件拷到主节点

[root@localhost tmp]# ll -lh | grep Python-2.7.6.tar.xz 
-rw-rw-r-- 1 centos centos  10M Dec 21 16:53 Python-2.7.6.tar.xz    #把这个文件拷到主节点主节点并无此tar包
2014-12-30 15:16:02,753 [salt.loaded.int.module.cp                   ][ERROR   ] cp.push Failed transfer failed. Ensure master has ‘file_recv‘ set to
 ‘True‘ and that the file is not larger than the ‘file_recv_size_max‘ setting on the maste

r

这里报了错告诉我们确保主节点配置文件file_recv为True而且最大接受文件的值。修改了就能传输此包。


果然在我的主节点这些没有被定义

# Allow minions to push files to the master. This is disabled by default, for
# security purposes.
#file_recv: False   这里为False并非是True修改需要重读配置文件甚至重启服务。
# Set a hard-limit on the size of the files that can be pushed to the master.
# It will be interpreted as megabytes.
# Default: 100
#file_recv_max_size: 100  #默认为100M
修改完了后尝试重读配置文件
[root@master salt]# service salt-master reload
can‘t reload configuration, you have to restart it

 #看来上面推测错误了不需要重读重启服务吧。

重读取时的错误

 in "<string>", line 212, column 1:
    file_recv:True
    ^
could not found expected ‘:‘
  in "<string>", line 213, column 1:
    # Set a hard-limit on the size o ... 
    ^

报错的原因就是因为file_recv:True中间应该有一个空格

修改以后再次重启服务。主节点执行

[root@master salt]# salt ‘test1‘ cp.push /tmp/Python-2.7.6.tar.xz
test1:
    True
让我们看看这个Python的tar包被放在哪了
/var/cache/salt/master/minions/test1/files/tmp/Python-2.7.6.tar.xz

#可以看出被缓存下来了

仔细看配置文件原来

# Directory to store job and cache data

cachedir: /var/cache/salt/master   #在这里定义了

4、把从节点的目录拷贝到主节点。

官方的解释

Push a directory from the minion up to the master, the files will be saved to the salt master in the master‘s minion files cachedir (defaults to /var/cache/salt/master/minions/minion-id/files). It also has a glob for matching specific files using globbing.


New in version 2014.7.0.

主节点使用命令salt ‘test1‘ cp.push_dir /tmp/ glob=‘*.*‘     #把从节点的tmp目录下的所有文件拷贝到主节点

一会儿可以查看复制完成了。

[root@master tmp]# pwd
/var/cache/salt/master/minions/test1/files/tmp
[root@master tmp]# ll
总用量 10996
-rw-r--r--. 1 root root        4 12月 30 15:47 1.txt
-rw-r--r--. 1 root root      957 12月 30 15:47 epel.repo
-rw-r--r--. 1 root root     1056 12月 30 15:47 epel-testing.repo
-rw-r--r--. 1 root root   804164 12月 30 15:47 nginx-1.6.2.tar.gz
-rw-r--r--. 1 root root     2541 12月 30 15:47 nginx-init-beta1.sh
-rw-r--r--. 1 root root 10431288 12月 30 15:47 Python-2.7.6.tar.xz
-rw-r--r--. 1 root root      229 12月 30 15:47 yum_save_tx-2014-12-26-14-52MfgFoB.yumtx



下面是一次成功的定义的编译的nginx.sls文件成功测试

注意sls文件不支持tab制表符这个键使用哈希键值对儿的模式一个键可以对应一个值如果一个键对应多个值那么就称为字典dictionary空格的格式特别严格同类属于一个空格类型如B是A的子类B在A下面就要敲两个空格以此类推C是B的子类C就要空格两次那么对于A来说C就空了4个位置

如果要自定义sls的文件

首先1、要在主节点的配置文件里中file_roots位置定义比如我们要编辑安装nginx就定义个nginx

file_roots:
  base:
    - /srv/salt   #默认的sls自定义文件的入口
    - /etc
    - /home
  nginx:
    - /srv/salt/nginx  # 这个必须定义
    - /usr/local/nginx  
假设你要为从节点安装nginx了就要在/srv/salt/top.sls文件中定义如此的格式
base:  #这里必须是base字符串等于
  ‘java‘:  # 这里为了测试先定义成java了其实如果想所有的节点全部部署可以改成‘*‘。
    - nginx.nginx



其次2、创建/srv/salt/nginx目录并在目录下创建并提供安装编译需要提供的文件包括nginx的tar包配置文件以及nginx的初始化脚本。

[root@master salt]# tree nginx
nginx
├── nginx-1.6.2.tar.gz  # 必须提供的nginx的编译tar包
├── nginx.conf              # 为编译nginx额外提供的conf文件
├── nginx-init.sh       # 为编译nginx额外提供的init脚本
├── nginx.sls    # 这个文件为提供nginx编译安装的多个步骤
└── top.sls    # 这个可以理解为nginx编译的入口文件



# vim nginx.sls
还是要注意格式
pcre-devel:                      #pcre-devel 我的从节点第一次安装出现了缺包的提示
    pkg.installed               #pkg.installed模块确保pcre-devel安装成功它要的是installed的状态
nginx_source:                  # nginx的源位置
  file.managed:
    - name: /tmp/nginx-1.6.2.tar.gz          # 这个位置是我在主节点放置nginx的tar包的位置
    - unless: test -e /tmp/nginx-1.6.2.tar.gz     #为测试提供
    - source: salt://nginx/nginx-1.6.2.tar.gz      #这里注意相对路径是相对于你在主配置文件/srv/salt的位置源目录文件的位置
    - user: root
    - group: root
    - mode: 644
  cmd.run:                                                            #cmd.run运行命令的模块为了运行下列的命令提供入口
    - cwd: /tmp       # 类似cdcd到/tmp目录下
    - name: tar zxvf nginx-1.6.2.tar.gz && cd /tmp/nginx-1.6.2 && ./configure --prefix=/usr/local/nginx --error-log-path=/home/wwwlogs/nginx/error.log --http-log-path=/home/wwwlogs/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_spdy_module --with-http_gzip_static_module --with-http_stub_status_module --http-client-body-temp-path=/usr/local/nginx/client/ --http-proxy-temp-path=/usr/local/nginx/proxy/ --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ --http-uwsgi-temp-path=/usr/local/nginx/uwsgi --http-scgi-temp-path=/usr/local/nginx/scgi --with-pcre && make && cd /tmp/nginx-1.6.2 && make install                      #编译安装nginx
    - unless: test -d /tmp/nginx-1.6.2.tar.gz         # 如果使用cmd时候最好加上unless这个模块。
    - require:          # require 模块
        - file: nginx_source         # 需要nginx_source
nginx-conf:           #nginx-conf这个类  
  file.managed:         #管理文件需要
    - name: /usr/local/nginx/conf/nginx.conf      # 主配置文件
    - source: salt://nginx/nginx.conf                     #主节点nginx的主配置文件位置相对路径还是相对于/srv/salt
    - user: root
    - group: root
    - mode: 644
nginx-init:
  file.managed:
    - name: /etc/init.d/nginx
    - source: salt://nginx/nginx-init.sh
    - user: root
    - group: root
    - mode: 755

这时定义好了并且将对应的文件tar包 脚本都提供到了

先在主节点执行一次test看看报些什么错误之前报了无数错误了。。。

[root@master nginx]# salt ‘test1‘ state.highstate -v test=True
----------
          ID: nginx-init
    Function: file.managed
        Name: /etc/init.d/nginx
      Result: True
     Comment: The file /etc/init.d/nginx is in the correct state
     Changes:   
Summary
------------
Succeeded: 3
Failed:    0
Not Run:   2
------------
Total:     5


看来测试没有问题。

第三、然后可以真正执行了

主节点[root@master nginx]# salt ‘test1‘ state.highstate

切换到从节点

此时从节点运行状态如下

top - 14:34:30 up  3:33,  2 users,  load average: 0.97, 0.39, 0.16
Tasks: 124 total,   2 running, 122 sleeping,   0 stopped,   0 zombie
Cpu(s): 44.3%us,  9.3%sy,  0.0%ni, 44.2%id,  2.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:    428688k total,   418564k used,    10124k free,    28672k buffers
Swap:  2097144k total,     2164k used,  2094980k free,    90372k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                
 6907 root      20   0 52044  34m 3180 R  6.0  8.2   0:00.18 cc1

  可以看出它在编译


一会儿

                  -    #    ssl_ciphers  HIGH:!aNULL:!MD5;
                  -    #    ssl_prefer_server_ciphers  on;
                  -
                  -    #    location / {
                  -    #        root   html;
                  -    #        index  index.html index.htm;
                  -    #    }
                  -    #}
                  -
                  -}
                  +}
----------
          ID: nginx-init
    Function: file.managed
        Name: /etc/init.d/nginx
      Result: True
     Comment: File /etc/init.d/nginx is in the correct state
     Changes:   
Summary
------------
Succeeded: 5
Failed:    0
------------
Total:     5


仅仅摘取一个片段显示在从节点的编译的nginx成功了

由于编译安装所以操作一定要谨慎考虑对方从节点对应的目录是否已经建立了譬如这里笔者把编译好以后的修改贴出来给大家

1082  useradd -r -s /sbin/nologin www
 1083  id www
 1084  service nginx start
 1085  vim /usr/local/nginx/conf/nginx.conf
 1086  find / -name mime.types
 1087  vim /usr/local/nginx/conf/nginx.conf
 1088  nginx -t
 1089  vim +153 /usr/local/nginx/conf/nginx.conf
 1090  nginx -t
 1091  vim +153 /usr/local/nginx/conf/nginx.conf
 1092  nginx -t
 1093  vim +153 /usr/local/nginx/conf/nginx.conf
 1094* 
 1095  mkdir -pv /var/log/nginx/
 1096  nginx -t

10多步的修改。


http://192.168.1.243:10080/


Welcome to nginx!


If you see this page, the nginx web server is successfully installed and working. Further configuration is required.


For online documentation and support please refer to nginx.org.

Commercial support is available at nginx.com.


Thank you for using nginx.


nginx服务已经启动了


saltstack使用之二(完成部署编译nginx以及部分cp模块的使用)