]yum install python-jinja2 -y 1、安装master端yum -y install salt-master enablerepr=epel-testing 2、安装minion端yum -y install salt-minion enablerepr=epel-testingsed -ie 's/^#.*interface:.*/\ interface: 192.168.2.65/g' /etc/salt/master 注:或是此处写上主机名,并绑定/etc/hosts文件 2、自动接收所有minion的请求sed -ie 's@^#\(auto_accept: \)False@\ \1true@g' /etc/salt/master b、minionsed -ie 's@^#.*master:.*@\ master: salt@g' /etc/salt/minion注:由于saltstack配置文件所限,当启用每一个配置参数时对格式有严格要求,书写时请注意#service salt-master start
#service salt-minion start 说明: saltstack的master监听于4505,minion监听于4506;[root@openapi php-fpm]# salt "*" test.ping
192.168.2.36-CentOS.backup.test.backend:
True
192.168.2.30-centos.public.test:
True说明:salt的其它命令可用salt --help很简单,在此不多介绍五、salt 常用的正则表达式(部分) a、E:正则匹配
可以在每一个句后面加一个 -l debug来显示命令具体执行过程[root@openapi self_userd]# salt -E '(backend81)' test.ping
backend81:
True
[root@openapi self_userd]# salt -E '(backend81)' test.ping -l debug
[DEBUG ] Reading configuration from /etc/salt/master
[DEBUG ] Guessing ID. The id can be explicitly in set /etc/salt/minion
[INFO ] Found minion id from generate_minion_id(): openapi.test.dns.com.cn
[DEBUG ] Missing configuration file: ~/.saltrc
[DEBUG ] Configuration file path: /etc/salt/master
[DEBUG ] Reading configuration from /etc/salt/master
[DEBUG ] Guessing ID. The id can be explicitly in set /etc/salt/minion
[INFO ] Found minion id from generate_minion_id(): openapi.test.dns.com.cn
[DEBUG ] Missing configuration file: ~/.saltrc
[DEBUG ] MasterEvent PUB socket URI: ipc:///var/run/salt/master/master_event_pub.ipc
[DEBUG ] MasterEvent PULL socket URI: ipc:///var/run/salt/master/master_event_pull.ipc
[DEBUG ] LazyLoaded local_cache.get_load
[DEBUG ] get_iter_returns for jid 20150727212822728009 sent to set(['backend81']) will timeout at 21:28:27.732956
[DEBUG ] jid 20150727212822728009 return from backend81
backend81:
True
[DEBUG ] jid 20150727212822728009 found all minions set(['backend81']) b、-L :命令行里面一般是以列表的形式来指定对象的。
c、-G:这个参数很强大,会根据默认的grain的结果来过滤。(grains也可以自己定义)
d、-N:这个参数是基于分组的,前提是你得先分好组。(分组可以定义于主匹配文件/etc/salt/master中,也可以定义于/etc/salt/master.d/*.conf)
然后可以这样使用
e、-C :表示tagger可是一个复合语句[root@openapi salt]# salt -C 'G@virtual:physical and E@backend81' test.ping
backend81:
True f、-b :一次操作多少台,也可以使使用百分比来操作(--batch-size)[root@openapi salt]# salt "*" -b 3 grains.item os
#salt "*" --batch-size 25% grains.item os
36 Detected for this batch run
backend81 Detected for this batch run
backend84 Detected for this batch run
zabbix.server.dns.com.cn Detected for this batch run
backend83 Detected for this batch run
webdata.backup Detected for this batch run
Executing run on ['zabbix.server.dns.com.cn', 'webdata.backup', 'backend84']
webdata.backup:
----------
os:
CentOS
backend84:
----------
os:
CentOS
zabbix.server.dns.com.cn:
----------
os:
CentOS
Executing run on ['backend83', 'backend81', '36']
backend81:
----------
os:
CentOS
backend83:
----------
os:
CentOS
36:
----------
os:
CentOS注: 更多的模块使用说明可以使用salt \* sys.doc |grep <模块名称> salt 的每一个子命令都可以用-d来查看具体的用法六、自定义grains 1、grains的优先级 grains可以保持在minion端、通过master端下发等多个方式来分发。但不同的方法有不同的优先级的: a. /etc/salt/grains b. /etc/salt/minion c./srv/salt/_grains/ master端_grains目录下 优先级顺序依次为存在在minion端/etc/salt/minion配置文件中的同名grains会覆盖/etc/salt/grains文件中的值,而通过master端_grains目录下grains文件下发的值可以会覆盖minion端的所有同名值。比较拗口,总之记得,通过master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains不大懂,就不讨论了,这个比/etc/salt/grains还低) 2、自定义grains 注: a、首先要在master端的主匹配文件中开启file_roots file_roots:
base:
- /srv/salt b、如果没有以上目录,创建即可(此处使用_grains目录)[root@openapi _grains]# pwd
/srv/salt/_grains c、自定义grains字典[root@openapi _grains]# cat ports.py
#!/usr/bin/env python
#coding:utf8
def open_moutil_port ():
grains={}
grains['web_port']='80'
grains['mysql_path']='/data/mysql'
grains['mysqld_port']='3307'
grains['max_open_file']='65535'
return grains d、同步grains并重新加载grains(grains是“静态”的,是每一个minion接入到master自动提交的)[root@openapi _grains]# salt "*" saltutil.sync_all
192.168.2.36-CentOS.backup.test.backend:
----------
beacons:
grains:
modules:
outputters:
renderers:
returners:
states:
utils:
192.168.2.30-centos.public.test:
----------
beacons:
grains:
modules:
outputters:
renderers:
returners:
states:
utils:
[root@openapi _grains]# salt '*' sys.reload_modules
192.168.2.36-CentOS.backup.test.backend:
True
192.168.2.30-centos.public.test:
True e、查询自定义的grains[root@openapi _grains]# salt "*" grains.item web_port
192.168.2.36-CentOS.backup.test.backend:
----------
web_port:
80
192.168.2.30-centos.public.test:
----------
web_port:
80七、LNMP环境 1、目录结构如下:[root@openapi salt]# tree
.
├── _grains
│ └── ports.py
├── lnmp.sls
├── mysql
│ ├── installed.sls
│ └── my.cnf
├── nginx
│ ├── default.conf
│ └── installed.sls
├── php-fpm
│ ├── index.php
│ └── installed.sls
└── top.sls a、top文件(此文件必须存在,它定义了各minion的执行规划)[root@openapi salt]# cat top.sls
base:
'192.168.2.30-centos.public.test': #此处可以写组、正则、或minion;匹配目标
- nginx.installed #这表示到那一个目录下的那一个文件 ,此部分表示在30安装nginx,php-fpm
- php-fpm.installed
'192.168.2.36-CentOS.backup.test.backend':
- mysql.installed #在2.36上安装mysql-server b、nginx目录下的文件 [root@openapi nginx]# ll
total 8
-rw-r--r-- 1 sysadmin sysadmin 1102 Jul 29 21:50 default.conf
#nginx 默认的配置文件,只改了root目录为/var/www/html,其它地方与/etc/nginx/conf.d/default完全一样
-rw-r--r-- 1 root root 360 Jul 29 23:23 installed.sls
#操作文件
[root@openapi nginx]# cat installed.sls
nginx: #id
pkg.installed: #使用pkg安装包,installed表示要安装完成,也可以指定版本来保证所有环境使用同一版本软件包
- name: nginx #包名,如果没有将继承id名称
service.running: #服务状态
- enable: True #是否启动
- reload: True #重新载入
- watch: #监控文件
- file: /etc/nginx/conf.d/default.conf #如果此文件发生变化将文件重新装载到服务中
- require: #依赖
- pkg: nginx #包名
file.managed: #文件操作
- name: /etc/nginx/conf.d/default.conf #文件名
- source: salt://nginx/default.conf #base下那一个文件
- user: nginx #用户
- group: root #组
- mode: 644 #权限
- backup: minion #将上一个版本的文件备份。(如果有的话)
- require: #依赖
- pkg: nginx c、mysql目录下的文件[root@openapi mysql]# ll
total 8
-rw-r--r-- 1 root root 434 Jul 29 23:07 installed.sls #操作文件
-rw-r--r-- 1 sysadmin sysadmin 775 Jul 29 22:26 my.cnf #默认的匹配文件
[root@openapi mysql]# cat installed.sls
mysql-server:
pkg.installed:
- name: mysql-server
service.running:
- name: mysqld
- enable: True
- reload: True
- watch:
- file: /etc/my.cnf
- require:
- pkg: mysql-server
file.managed:
- name: /etc/my.cnf
- source: salt://mysql/my.cnf
- user: mysql
- group: mysql
- mode: 644
- backup: minion
mysql:
pkg.installed:
- name: mysql
myslq-devel:
pkg.installed:
- name: mysql-devel d、php-fpm目录下的文件 [root@openapi php-fpm]# ll
total 8
-rw-r--r-- 1 root root 22 Jul 29 22:35 index.php
-rw-r--r-- 1 root root 351 Jul 29 23:34 installed.sls
[root@openapi php-fpm]# cat index.php #php测试页面
<?php
phpinfo()
?>
[root@openapi php-fpm]# cat installed.sls
php-xcache:
pkg.installed:
- name: php-xcache
php-fpm:
pkg.installed:
- name: php-fpm
service.running:
- enable: Ture
- require:
- pkg: php-fpm
file.managed:
- name: /var/www/html/index.php
- source: salt://php-fpm/index.php
- user: nginx
- group: root
- mode: 644
- require:
- pkg: php-fpm注:在php-fpm中的installed.sls如果需要的模块不是php-fpm依赖的必需定义到phf-fpm之前,如果先安装完成php-fpm后安装所需要的php模块,还要重新reloadphp-fpm服务才能生效 e、定义顺序文件 lnmp环境一般要先行安装数据库-->web服务-->php-fpm所以要定义一下两台不同服务执行执行顺序。[root@openapi salt]# pwd
/srv/salt
[root@openapi salt]# cat lnmp.sls
db_setup: #id
salt.state: #状态
- tgt: '192.168.2.36-CentOS.backup.test.backend' #目标与base定义的一样
- highstate: True
web_setup:
salt.state:
- tgt: '192.168.2.30-centos.public.test'
- highstate: True
- require: #依赖
- salt: db_setup 2、执行操作salt-run state.orchestrate lnmp 注: 也可以使用如下命令测试 salt-run state.orchestrate lnmp test=Ture剩下说等待操作完成了 3、最络执行结果[root@openapi nginx]# salt-run state.orchestrate lnmp
openapi.test.dns.com.cn_master:
----------
ID: db_setup
Function: salt.state
Result: True
Comment: States ran successfully. No changes made to 192.168.2.36-CentOS.backup.test.backend.
Started: 23:27:11.401701
Duration: 3533.27 ms
Changes:
----------
ID: web_setup
Function: salt.state
Result: True
Comment: States ran successfully. Updating 192.168.2.30-centos.public.test.
Started: 23:27:14.936140
Duration: 46763.368 ms
Changes:
192.168.2.30-centos.public.test:
----------
ID: nginx
Function: pkg.installed
Result: True
Comment: Package nginx is already installed.
Started: 23:29:08.840872
Duration: 971.023 ms
Changes:
----------
ID: nginx
Function: file.managed
Name: /etc/nginx/conf.d/default.conf
Result: True
Comment: File /etc/nginx/conf.d/default.conf is in the correct state
Started: 23:29:09.816842
Duration: 5.82 ms
Changes:
----------
ID: nginx
Function: service.running
Result: True
Comment: Service nginx is already enabled, and is in the desired state
Started: 23:29:09.822994
Duration: 273.52 ms
Changes:
----------
ID: php-fpm
Function: pkg.installed
Result: True
Comment: The following packages were installed/updated: php-fpm
Started: 23:29:10.097200
Duration: 26085.157 ms
Changes:
----------
php-fpm:
----------
new:
5.3.3-46.el6_6
old:
----------
ID: php-fpm
Function: service.running
Result: True
Comment: Started Service php-fpm
Started: 23:29:36.192137
Duration: 301.652 ms
Changes:
----------
php-fpm:
True
----------
ID: php-fpm
Function: file.managed
Name: /var/www/html/index.php
Result: True
Comment: File /var/www/html/index.php updated
Started: 23:29:36.499508
Duration: 23.542 ms
Changes:
----------
diff:
New file
mode:
0644
user:
nginx
----------
ID: php-xcache
Function: pkg.installed
Result: True
Comment: The following packages were installed/updated: php-xcache
Started: 23:29:36.527960
Duration: 16844.534 ms
Changes:
----------
php-xcache:
----------
new:
3.0.4-1.el6
old:
Summary
------------
Succeeded: 7 (changed=4)
Failed: 0
------------
Total states run: 7
Summary
------------
Succeeded: 2 (changed=1)
Failed: 0
------------
Total states run: 2温馨提示:在卸载软件包时,千万不要用yum、yum、yum. a、查看服务状态[root@openapi salt]# salt "192.168.2.36-CentOS.backup.test.backend" service.status mysqld
192.168.2.36-CentOS.backup.test.backend:
Ture
[root@openapi salt]# salt "192.168.2.30-centos.public.test" service.status nginx
192.168.2.30-centos.public.test:
Ture
[root@openapi salt]# salt "192.168.2.30-centos.public.test" service.status php-fpm
192.168.2.30-centos.public.test:
Ture b、测试php
#########################到此lnmp部署完成###############################ps: 其它了服务也是同理,是重要的是注意操作文件的格式及服务执行的先后顺序。 下次更新来个源码的及pillar的使用!回家,碎觉~我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m