saltstack实战3--配置管理之grains
grains是什么
grains是minion服务启动后,采集的客户端的一些基本信息,硬件信息,软件信息,网络信息,软件版本等。你可以在minion上自定义一些grains信息。
它是静态的信息,minion服务启动后采集,如果一些信息变更,需要重启minion服务。grains适合做一些静态的属性值的采集
grains的使用
salt 'minionid' grains.ls
salt 'minionid' grains.items
salt 'minionid' grains.item os
salt 'minionid' grains.get os
salt 'minionid' grains.ls
列出minion所有的grains项的key
- [root@master pillar]# salt 'minion01' grains.ls
- minion01:
- - SSDs
- - biosreleasedate
- - biosversion
- - cpu_flags
- - cpu_model
- - cpuarch
- - domain
- - fqdn
- - fqdn_ip4
- - fqdn_ip6
- - gpus
- - host
- - hwaddr_interfaces
- - id
- - init
- - ip4_interfaces
- - ip6_interfaces
- - ip_interfaces
- - ipv4
- - ipv6
- - kernel
- - kernelrelease
- - locale_info
- - localhost
- - lsb_distrib_codename
- - lsb_distrib_id
- - lsb_distrib_release
- - machine_id
- - manufacturer
- - master
- - mdadm
- - mem_total
- - nodename
- - num_cpus
- - num_gpus
- - os
- - os_family
- - osarch
- - oscodename
- - osfinger
- - osfullname
- - osmajorrelease
- - osrelease
- - osrelease_info
- - path
- - productname
- - ps
- - pythonexecutable
- - pythonpath
- - pythonversion
- - saltpath
- - saltversion
- - saltversioninfo
- - selinux
- - serialnumber
- - server_id
- - shell
- - virtual
- - zmqversion
- [root@master pillar]#
salt 'minionid' grains.items
列出minion所有的grains项的key和value
- [root@master pillar]# salt 'minion01' grains.items
- minion01:
- ----------
- 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
- - xtopology
- - tsc_reliable
- - nonstop_tsc
- - aperfmperf
- - unfair_spinlock
- - 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
- - ida
- - arat
- - xsaveopt
- - pln
- - pts
- - dts
- - fsgsbase
- - bmi1
- - hle
- - avx2
- - smep
- - bmi2
- - invpcid
- - rtm
- - rdseed
- - adx
- cpu_model:
- Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
- cpuarch:
- x86_64
- domain:
- fqdn:
- minion01
- fqdn_ip4:
- fqdn_ip6:
- gpus:
- |_
- ----------
- model:
- SVGA II Adapter
- vendor:
- unknown
- host:
- minion01
- hwaddr_interfaces:
- ----------
- eth0:
- 00:0c:29:22:4b:e9
- lo:
- 00:00:00:00:00:00
- id:
- minion01
- init:
- upstart
- ip4_interfaces:
- ----------
- eth0:
- - 10.0.1.172
- lo:
- - 127.0.0.1
- ip6_interfaces:
- ----------
- eth0:
- - fe80::20c:29ff:fe22:4be9
- lo:
- - ::1
- ip_interfaces:
- ----------
- eth0:
- - 10.0.1.172
- - fe80::20c:29ff:fe22:4be9
- lo:
- - 127.0.0.1
- - ::1
- ipv4:
- - 10.0.1.172
- - 127.0.0.1
- ipv6:
- - ::1
- - fe80::20c:29ff:fe22:4be9
- kernel:
- Linux
- kernelrelease:
- 2.6.32-504.el6.x86_64
- locale_info:
- ----------
- defaultencoding:
- UTF8
- defaultlanguage:
- en_US
- detectedencoding:
- UTF-8
- localhost:
- minion01
- lsb_distrib_codename:
- Final
- lsb_distrib_id:
- CentOS
- lsb_distrib_release:
- 6.6
- machine_id:
- 749e39b6649273bf0c83d26300000026
- manufacturer:
- VMware, Inc.
- master:
- master
- mdadm:
- mem_total:
- 3946
- nodename:
- minion01
- num_cpus:
- 4
- num_gpus:
- 1
- os:
- CentOS
- os_family:
- RedHat
- osarch:
- x86_64
- oscodename:
- Final
- osfinger:
- CentOS-6
- osfullname:
- CentOS
- osmajorrelease:
- 6
- osrelease:
- 6.6
- osrelease_info:
- - 6
- - 6
- path:
- /sbin:/usr/sbin:/bin:/usr/bin
- productname:
- VMware Virtual Platform
- ps:
- ps -efH
- pythonexecutable:
- /usr/bin/python2.6
- pythonpath:
- - /usr/bin
- - /usr/lib64/python26.zip
- - /usr/lib64/python2.6
- - /usr/lib64/python2.6/plat-linux2
- - /usr/lib64/python2.6/lib-tk
- - /usr/lib64/python2.6/lib-old
- - /usr/lib64/python2.6/lib-dynload
- - /usr/lib64/python2.6/site-packages
- - /usr/lib64/python2.6/site-packages/gst-0.10
- - /usr/lib64/python2.6/site-packages/gtk-2.0
- - /usr/lib64/python2.6/site-packages/webkit-1.0
- - /usr/lib/python2.6/site-packages
- - /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
- pythonversion:
- - 2
- - 6
- - 6
- - final
- - 0
- saltpath:
- /usr/lib/python2.6/site-packages/salt
- saltversion:
- 2015.5.10
- saltversioninfo:
- - 2015
- - 5
- - 10
- - 0
- selinux:
- ----------
- enabled:
- False
- enforced:
- Disabled
- serialnumber:
- VMware-56 4d d2 3c be 05 36 b5-e6 19 4e ef 0b 22 4b e9
- server_id:
- 1310197239
- shell:
- /bin/sh
- virtual:
- VMware
- zmqversion:
- 3.2.5
- [root@master pillar]#
salt 'minionid' grains.item os
能取出某一个item的值
- [root@master pillar]# salt 'minion01' grains.item os
- minion01:
- ----------
- os:
- CentOS
- [root@master pillar]#
salt 'minionid' grains.get os
也能取出某一个项的值,以后推荐使用grains.get
- [root@master pillar]# salt 'minion01' grains.get os
- minion01:
- CentOS
- [root@master pillar]#
grains的用途
比如使用salt管理的一些机器,有一些是Centos的系统。需要打某个补丁,就可以根基os这个可以找出是哪些机器,
- [root@master pillar]# salt -G 'os:CentOS' test.ping
- minion01:
- True
- minion02:
- True
- [root@master pillar]#
自定义一些grains项
因为grains主要从minion端获取,因此主要还是在minion端去定义,比如我们登陆minion01机器,定义一个role:nginx
打开minion端的配置文件
- vim /etc/salt/minion
看到第9到12行提示,说可以在当前目录下创建minion.d目录,此目录下以*.conf格式的文件会被加载为配置文件
- 9 # Per default the minion will automatically include all config files
- 10 # from minion.d/*.conf (minion.d is a directory in the same directory
- 11 # as the main minion config file).
- 12 #default_include: minion.d/*.conf
在85行到94行查看自定义grains的格式
- 85 # Custom static grains for this minion can be specified here and used in SLS
- 86 # files just like all other grains. This example sets 4 custom grains, with
- 87 # the 'roles' grain having two values that can be matched against.
- 88 #grains:
- 89 # roles:
- 90 # - webserver
- 91 # - memcache
- 92 # deployment: datacenter4
- 93 # cabinet: 13
- 94 # cab_u: 14-15
接下来在minion01自定义grains。
下面给minion01定义了一个role这个key,值为nginx。 注意文件格式是yaml的。配置完毕后重启minion服务
- [root@minion01 ~]# mkdir /etc/salt/minion.d -p
- [root@minion01 ~]# cd /etc/salt/minion.d/
- [root@minion01 minion.d]# pwd
- /etc/salt/minion.d
- [root@minion01 minion.d]# touch my_grains.conf
- [root@minion01 minion.d]# vim my_grains.conf
- [root@minion01 minion.d]# cat my_grains.conf
- grains:
- role: nginx
- [root@minion01 minion.d]# /etc/init.d/salt-minion restart
- Stopping salt-minion daemon: [ OK ]
- Starting salt-minion daemon: [ OK ]
- [root@minion01 minion.d]#
master端测试,看到只有我们自定义的minion01机器有这一项
- [root@master pillar]# salt '*' grains.get role
- minion01:
- nginx
- minion02:
- [root@master pillar]# salt -G 'role:nginx' test.ping
- minion01:
- True
- [root@master pillar]#
其实可以不用重启minion,让更改的配置生效,这需要在master端执行刷新命令
操作如下,比如,minion01把自定义的grains改成如下
- [root@minion01 minion.d]# vim my_grains.conf
- [root@minion01 minion.d]# cat my_grains.conf
- grains:
- role: apache
- [root@minion01 minion.d]#
master端执行刷新此minion的grains,如下
- [root@master pillar]# salt 'minion01' saltutil.sync_grains
- minion01:
- [root@master pillar]# salt '*' grains.get role
- minion02:
- minion01:
- apache
- [root@master pillar]#
另外有一个地方也可以自定义grains
这个时候第一行不用写grains了
minion01上操作如下,比如自定义一个role2:tomcat
- [root@minion01 minion.d]# touch /etc/salt/grains
- [root@minion01 minion.d]# vim /etc/salt/grains
- [root@minion01 minion.d]# cat /etc/salt/grains
- role2: tomcat
- [root@minion01 minion.d]#
master端操作,先刷新,再取值
- [root@master pillar]# salt 'minion01' saltutil.sync_grains
- minion01:
- [root@master pillar]# salt '*' grains.get role2
- minion01:
- tomcat
- minion02:
- [root@master pillar]#
接下来学习配置管理
SLS(代表SaLt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,由格式简单的数据构成。这经常被称作配置管理 首先,在master上面定义salt的主目录,默认是在/srv/salt/下面,vim /etc/salt/master:
- file_roots:
- base:
- - /srv/salt
- dev:
- - /srv/salt-dev
给minion安装apache服务,我们知道通过salt的远程执行命令我们可以给minion安装apache,然后通过命令也能启动minion端的apache服务,但是有个缺点就是,我们需要每次手动去输入命令,非常不方便。
试想怎么通过配置文件把我要执行的东西都配置好呢,然后执行此配置文件,比如:安装apache,设置开机自启动,启动服务等这一系列的东西呢。
这点就是salt的配置管理了。通过配置文件管理minion
首先需要打开master端相关的配置项
[root@master ~]# vim /etc/salt/master
找到416行,打开注释,注意缩进,salt中2个空格作为一个缩进。
- file_roots:
- base:
- - /srv/salt
然后重启master服务,建立配置管理目录
- [root@master ~]# /etc/init.d/salt-master restart
- Stopping salt-master daemon: [ OK ]
- Starting salt-master daemon: [ OK ]
- [root@master ~]# mkdir /srv/salt -p
- [root@master ~]#
编写配置管理文件
- [root@master ~]# cd /srv/salt/
- [root@master salt]# ls
- [root@master salt]# vim apache.sls
apache.sls里面写了两大功能,第一大功能是安装包,第二打功能是运行服务,这里的apache.sls文件名不是固定的,可以随意写,但是为了便于阅读性,就写成这个了,sls这个扩展名是必须有的
pkg.installed pkg是模块,installed是方法
service.running service是模块,running是方法
下面的是参数,
enable:True表示开机自动启动
reload:True 表示可以重载
name和names 指定哪个或哪些对象(包名,服务名),如果你不写name的话,它会默认把id当成name
其中apache-install和apache-service都是id,可以随便取,但是必须唯一。
- apache-install:
- pkg.installed:
- - names:
- - httpd
- - httpd-devel
- apache-service:
- service.running:
- - name: httpd
- - enable: True
- - reload: True
保存,退出,执行此文件,在执行之前先查看minion端机器是否已经安装,服务是否设置了开机自动启动,以及服务当前状态
找minion01先查看下,安装了httpd,但是没安装httpd-devel,服务是没启动状态,同时也不是开机自启动
- [root@minion01 ~]# rpm -qa httpd
- httpd-2.2.15-39.el6.centos.x86_64
- [root@minion01 ~]# rpm -qa httpd-devel
- [root@minion01 ~]# chkconfig --list httpd
- httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- [root@minion01 ~]# ps -ef | grep httpd
- root 10102 9931 0 15:03 pts/0 00:00:00 grep --colour=auto httpd
- [root@minion01 ~]#
我们执行下状态文件试试,注意执行语法如下apache就是那个apache.sls文件,执行的时候,需要省去sls
另外执行下面语句的时候,不必在/srv/salt目录下,无论在哪里执行,master都会去/srv/salt去找apache.sls文件来执行
- [root@master salt]# salt 'minion01' state.sls apache
- minion01:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd
- Result: True
- Comment: Package httpd is already installed.
- Started: 15:05:57.576469
- Duration: 1009.635 ms
- Changes:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd-devel
- Result: True
- Comment: The following packages were installed/updated: httpd-devel
- Started: 15:05:58.586254
- Duration: 59776.234 ms
- Changes:
- ----------
- apr-devel:
- ----------
- new:
- 1.3.9-5.el6_2
- old:
- apr-util-devel:
- ----------
- new:
- 1.3.9-3.el6_0.1
- old:
- cyrus-sasl:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-devel:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- cyrus-sasl-gssapi:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-lib:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-md5:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-plain:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- expat:
- ----------
- new:
- 2.0.1-13.el6_8
- old:
- 2.0.1-11.el6_2
- expat-devel:
- ----------
- new:
- 2.0.1-13.el6_8
- old:
- httpd:
- ----------
- new:
- 2.2.15-55.el6.centos.2
- old:
- 2.2.15-39.el6.centos
- httpd-devel:
- ----------
- new:
- 2.2.15-55.el6.centos.2
- old:
- httpd-tools:
- ----------
- new:
- 2.2.15-55.el6.centos.2
- old:
- 2.2.15-39.el6.centos
- openldap:
- ----------
- new:
- 2.4.40-12.el6
- old:
- 2.4.39-8.el6
- openldap-devel:
- ----------
- new:
- 2.4.40-12.el6
- old:
- ----------
- ID: apache-service
- Function: service.running
- Name: httpd
- Result: True
- Comment: Service httpd has been enabled, and is running
- Started: 15:06:58.376744
- Duration: 166.666 ms
- Changes:
- ----------
- httpd:
- True
- Summary
- ------------
- Succeeded: 3 (changed=2)
- Failed: 0
- ------------
- Total states run: 3
- [root@master salt]#
在上面执行过程中,可以看到minion01里有执行yum安装
- [root@minion01 ~]# ps -ef |grep yum
- root 10177 10110 4 15:06 ? 00:00:00 /usr/bin/python /usr/bin/yum --quiet check-update
- root 10189 9931 0 15:06 pts/0 00:00:00 grep --colour=auto yum
- [root@minion01 ~]#
检查结果,和我们配置文件里设定的都完成了
- [root@minion01 ~]# rpm -qa httpd
- httpd-2.2.15-55.el6.centos.2.x86_64
- [root@minion01 ~]# rpm -qa httpd-devel
- httpd-devel-2.2.15-55.el6.centos.2.x86_64
- [root@minion01 ~]# chkconfig --list httpd
- httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- [root@minion01 ~]# ps -ef | grep httpd
- root 10289 1 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10300 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10301 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10302 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10303 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10304 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10305 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10306 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- apache 10307 10289 0 15:06 ? 00:00:00 /usr/sbin/httpd
- root 10326 9931 0 15:09 pts/0 00:00:00 grep --colour=auto httpd
- [root@minion01 ~]#
关于上面的命令
- salt 'minion01' state.sls apache
state.sls 其中,state是模块,sls是方法
配置管理也支持多次执行,就是apache服务已经安装了,再次执行此文件不会报错。
关于执行apache.sls,还有另外一种方式执行,通过top.sls文件执行,它也叫入口文件
在master机器上 vim /etc/salt/master 找到329行,看到它是状态管理的入口文件,默认是top.sls ,当然你也可以自定义这个名字。
这个文件必须放在/srv/salt/下面
- ##### State System settings #####
- ##########################################
- # The state system uses a "top" file to tell the minions what environment to
- # use and what modules to use. The state_top file is defined relative to the
- # root of the base environment as defined in "File Server settings" below.
- #state_top: top.sls
操作如下
注意'*' 代表所有的minion
- [root@master salt]# cd /srv/salt/
- [root@master salt]# vim top.sls
- [root@master salt]# cat top.sls
- base:
- '*':
- - apache
- [root@master salt]#
虽然上面写了'*'
但是你可以在执行命令的时候指定minion执行,这样其余没指定的minion不会执行此文件
执行命令如下,它会执行top.sls文件。你top.sls文件里又写了apache.sls文件。这样它就执行apache.sls文件了
- [root@master salt]# salt 'minion01' state.highstate
以上学习了通过saltstack简单安装并配置apache服务,对于大批量机器管理非常有用
配置管理结合grains
获取grains信息,看到minion02的主机名也就是它的fqdn名为minion02
- [root@master salt]# salt '*' grains.get fqdn
- minion02:
- minion02
- minion01:
- minion01
- [root@master salt]#
修改top.sls文件,让匹配到grains的minion执行安装
看到minion01 没匹配到这个fqdn,只有minion02匹配到了,执行了
- [root@master salt]# cd /srv/salt/
- [root@master salt]# vim top.sls
- [root@master salt]# cat top.sls
- base:
- 'fqdn:minion02':
- - match: grain
- - apache
- [root@master salt]# salt '*' state.highstate
- minion01:
- ----------
- ID: states
- Function: no.None
- Result: False
- Comment: No Top file or external nodes data matches found.
- Started:
- Duration:
- Changes:
- Summary
- ------------
- Succeeded: 0
- Failed: 1
- ------------
- Total states run: 1
- minion02:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd
- Result: True
- Comment: Package httpd is already installed.
- Started: 15:48:28.024297
- Duration: 994.259 ms
- Changes:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd-devel
- Result: True
- Comment: The following packages were installed/updated: httpd-devel
- Started: 15:48:29.018697
- Duration: 49304.666 ms
- Changes:
- ----------
- apr-devel:
- ----------
- new:
- 1.3.9-5.el6_2
- old:
- apr-util-devel:
- ----------
- new:
- 1.3.9-3.el6_0.1
- old:
- cyrus-sasl:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-devel:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- cyrus-sasl-gssapi:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-lib:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-md5:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- cyrus-sasl-plain:
- ----------
- new:
- 2.1.23-15.el6_6.2
- old:
- 2.1.23-15.el6
- expat:
- ----------
- new:
- 2.0.1-13.el6_8
- old:
- 2.0.1-11.el6_2
- expat-devel:
- ----------
- new:
- 2.0.1-13.el6_8
- old:
- httpd:
- ----------
- new:
- 2.2.15-55.el6.centos.2
- old:
- 2.2.15-39.el6.centos
- httpd-devel:
- ----------
- new:
- 2.2.15-55.el6.centos.2
- old:
- httpd-tools:
- ----------
- new:
- 2.2.15-55.el6.centos.2
- old:
- 2.2.15-39.el6.centos
- openldap:
- ----------
- new:
- 2.4.40-12.el6
- old:
- 2.4.39-8.el6
- openldap-devel:
- ----------
- new:
- 2.4.40-12.el6
- old:
- ----------
- ID: apache-service
- Function: service.running
- Name: httpd
- Result: True
- Comment: Service httpd has been enabled, and is running
- Started: 15:49:18.337679
- Duration: 162.474 ms
- Changes:
- ----------
- httpd:
- True
- Summary
- ------------
- Succeeded: 3 (changed=2)
- Failed: 0
- ------------
- Total states run: 3
- ERROR: Minions returned with non-zero exit code
- [root@master salt]#
saltstack实战3--配置管理之grains的更多相关文章
- SaltStack实战
SaltStack实战 #安装 安装注意几点 python-libs-2.6.6-64.el6.x86_64 conflicts with file from package python-2.6.6 ...
- saltstack实战4--综合练习1
规范配置管理 实际工作中可能会有现网环境,基线环境,开发环境. 需要使用saltstack统一管理.机器多了,业务多了,可能配置文件存放的会比较乱,因此可以统一管理起来 我们可以再加2个目录,test ...
- saltstack实战笔记
#运维管理工具 ansible #支持ssh,不需要客户端 saltstack #也是只是ssh,不需要客户端的 安装架构是,master /minion 安装salt的依赖模块 python zer ...
- saltstack之(八)配置管理部署LAMP
场景:公司有10台服务器需要安装lamp测试环境,使用saltstack编写state文件进行批量部署,可以提高工作效率,减少人为出错的可能性,保证环境的一致性. saltstack之配置管理lamp ...
- saltstack实战4--综合练习3
Saltstack配置管理-业务引用haproxy 在业务模块里写它的配置 各个业务是不同的,这里有差异性,所以没写在配置模块里. 对minion02也执行安装haproxy [root@master ...
- saltstack之(九)配置管理源码部署Nginx
场景:rpm包安装的nginx服务,无法满足定制模块的需求,故线上环境使用nginx源码进行安装.本片文章详细介绍如何使用saltstack的配置管理功能实现nginx软件的源码安装. 下载源码:pc ...
- saltstack之(六)配置管理state
配置管理是saltstack工具最重要的模块之一,也是学习saltstack之后使用最多的一个功能.可以轻松实现上百台上千台甚至上万台服务器的管理工作. 1.使用state模块进行配置管理,编写sls ...
- saltstack实战4--综合练习4
Saltstack配置管理-给minion增加Zabbix-agent zabbix-agent的包 [root@A ~]# rpm -qa |grep zabbix zabbix-2.4.8-1.e ...
- saltstack实战4--综合练习2
Saltstack配置管理-功能模块-安装haproxy 配置管理,我们分了3层 最底层是系统初始化部分 倒数二层是功能模块,就是具体的产品的安装了 假如你的环境需要nginx,php,memcach ...
随机推荐
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- POJ 1088 滑雪 (记忆化搜索)
题目链接:http://poj.org/problem?id=1088 题意很好懂,就是让你求一个最长下降路线的长度. dp[i][j]记录的是i j这个位置的最优的长度,然后转移方程是dp[i][j ...
- Scala List的排序函数sortWith
//原始方法: //val list=List("abc","bcd","cde") scala> list.sortWith( (s ...
- Django 使用原生SQL
def dictfetchall(cursor): "将游标返回的结果保存到一个字典对象中" desc = cursor.description return [ dict(zip ...
- Jquery EasyUi实战教程布局篇
转自:http://www.kwstu.com/ArticleView/kwstu_20139413501290 送给大家一个非常好的后台布局模板,本人后来就选择了这个模板http://www.kws ...
- 如何彻底隐藏iOS7应用的status bar
用xcode5开发新的iOS游戏,发现一个坑爹的现象,虽然我已经在info.plist里面把Status bar is initially hidden设置成了YES,但在设备上一跑还是看到丑陋的st ...
- Thinkphp框架----微信公众测试号开发
最开始的一个步骤.注册一个微信公众测试号.URL:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login; 接口配置的信息,对新手 ...
- wiki1169-传纸条(dp)
http://wikioi.com/problem/1169/ 四维数组和三维数组: #include<iostream> #include<cstdio> #include& ...
- too many automatic redirections were attempted
用HttpClient时发现一下页面跳转现象. 页面A要求授权自动跳转到页面B, 页面B进行了授权,在HTTP Header里要求SetCookie并跳转到页面A. 再次请求页面A的时候没有带上此Co ...
- Hadoop on Mac with IntelliJ IDEA - 3 解决MRUnit - No applicable class implementing Serialization问题
本文讲述在IntelliJ IDEA中使用MRUnit 1.0.0测试Mapper派生类时因MapDriver.withInput(final K1 key, final V1 val)的key参数被 ...