States是saltstack中的配置语言,日常进行配置管理时需要编写大量的states文件。比如安装一个包,然后管理一个配置文件,最后保证某个服务正常运行。
编写一些states sls文件(描述状态配置的文件)去描述和实现我们的功能。编写states sls文件都是YAML语法。当然states sls文件也支持使用Python语言,其实编写states sls文件并不难,官方提供大量的示例,我们只需要记住编写格式,然后根据自己的实际需求去编写适合自己业务的states sls文件
查看所有states列表
salt ‘minion1‘ sys.list_state_modules
minion1:
- acl
- alias
- alternatives
- apache
- archive
- artifactory
- at
- blockdev
- buildout
- cloud
- cmd
- composer
- cron
- disk
- environ
- event
- file
- gem
- gnomedesktop
- grafana
- grains
- group
- hipchat
- host
- http
- incron
- ini
- iptables
- jboss7
- kmod
- libvirt
- locale
- lvm
- lvs_server
- lvs_service
- lxc
- modjk
- modjk_worker
- module
- mongodb_database
- mount
- network
- openstack_config
- pagerduty
- pip
- pkg
- pkgng
- pkgrepo
- powerpath
- pyenv
- quota
- raid
- rbenv
- redis
- rvm
- salt
- schedule
- serverdensity_device
- service
- slack
- smtp
- ssh_auth
- ssh_known_hosts
- stateconf
- status
- supervisord
- sysctl
- syslog_ng
- test
- timezone
- tls
- tomcat
- user
- vbox_guest
- virtualenv
- webutil
- winrepo
查看指定states的所有function
查看file.states的所有function
salt ‘minion1‘ sys.list_state_functions file
minion1:
- file.absent
- file.accumulated
- file.append
- file.blockreplace
- file.comment
- file.copy
- file.directory
- file.exists
- file.managed
- file.missing
- file.mknod
- file.mod_run_check_cmd
- file.patch
- file.prepend
- file.recurse
- file.rename
- file.replace
- file.serialize
- file.symlink
- file.touch
- file.uncomment
查看指定states指定function用法
要查看file.managed states的详细用法与例子
salt ‘minion1‘ sys.state_doc file.managed
----------------------------------------------------------------------------------
让我们用一个简单的实例去了解states,通过例子可以看到states的一些流程与使用
编写top.sls文件(非必须)
编写states.sls文件
在大规模的配置管理工作中,需要编写大量的states.sls文件。top.sls是states系统的入口文件,它在大规模配置管理工作中负责制定哪些设备调用哪些states.sls文件。
我们维护一套LNMP架构,我们编写了很多states.sls文件,这是需要一键部署整个LNMP环境,这里就需要states.sls的top.sls入口文件去指定web机器和DB机器分别取引用哪些states.sls文件。
我们先在states的工作目录(base环境默认在/srv/salt)下新建一个one.sls states文件
vim /srv/salt/one.sls
/tmp/foo.conf: #id
file.managed: #使用file states的managed function
- source: salt://foo.conf #文件来源(salt://代表states的工作目录)
- user: root #文件属主
- group: root #文件属组
- mode: 644 #文件权限
- backup: minion #备份原文件
这就是一个简单的文件管理states.sls文件,我们可以通过上面介绍的方法查看file.managed更多的参数,这个states.sls文件的功能就是实现对Minion的/tmp/foo.conf文件进行统一管理,下面我们可以在states的工作目录下新建一个foo.conf文件,然后对Minion进行配置部署:
echo "SaltStack Books" > /src/salt/foo.conf
salt ‘*‘ state.sls one
minion1:
----------
ID: /tmp/foo.conf
Function: file.managed
Result: True
Comment: File /tmp/foo.conf is in the correct state
Started: 14:43:01.568340
Duration: 12.401 ms
Changes:
Summary
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
minion2:
----------
ID: /tmp/foo.conf
Function: file.managed
Result: True
Comment: File /tmp/foo.conf updated
Started: 00:43:33.336318
Duration: 109.696 ms
Changes:
----------
diff:
New file
mode:
0644
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
到这里就完成了对minion机器的简单文件管理。下面我们来介绍使用top.sls入口文件同时对多台机器进行一个简单的配置管理
------------------------------------------------------------------------------------
首先在states的工作目录下新建top.sls文件
vim /srv/salt/top.sls
base:
‘*‘:
- one
‘minion1‘:
- two
‘minion2‘:
- three
然后建立三个states文件one.sls,two.sls,three.sls,最后我们使用state.highstate命令同时同步
salt ‘*‘ state.highstate