YAML语言
YAML是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
它类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
YAML语言的格式如下:
house:
family:
name: Doe
parents:
- John
- Jane
children:
- Paul
- Mark
- Simone
address:
number: 34
street: Main Street
city: Nowheretown
zipcode: 12345
YAML的基本规则:
- 使用缩进来表示层级关系,每层2个空格,禁止使用TAB键
- 当冒号不是处于最后时,冒号后面必须有一个空格
- 用 - 表示列表,-的后面必须有一个空格 用 # 表示注释
YAML配置文件要放到SaltStack让我们放的位置,可以在SaltStack的 Master 配置文件中查找file_roots即可看到。
[root@master ~]# cd /etc/salt/
[root@master salt]# ls
cloud cloud.maps.d master minion.d proxy
cloud.conf.d cloud.profiles.d master.d minion_id proxy.d
cloud.deploy.d cloud.providers.d minion pki roster
[root@master salt]# vim master
677 #file_roots:
678 # base:
679 # - /srv/salt
680 #
## 在配置文件里面加入以下内容
681 file_roots:
682 base: ## 基础环境
683 - /srv/salt/base
684 test: ## 测试环境
685 - /srv/salt/test
686 dev: ## 开发环境
687 - /srv/salt/dev
688 prod: ## 生产环境
689 - /srv/salt/prod
// 创建刚刚配置文件里面写的目录
[root@master salt]# ls /srv/
[root@master salt]# mkdir -p /srv/salt/{base,test,dev,prod}
[root@master salt]# tree /srv/
/srv/
└── salt
├── base
├── dev
├── prod
└── test
5 directories, 0 files
// 因为改了master的配置文件所以要重启master
[root@master salt]# systemctl restart salt-master
需要注意:
base是默认的位置,如果file_roots只有一个,则base是必备的且必须叫base,不能改名
用SaltStack配置一个apache实例
[root@master ~]# cd /srv/salt/base/
[root@master base]# ls
[root@master base]# mkdir web/{nginx,apache} -p
[root@master base]# tree
.
└── web
├── apache
└── nginx
3 directories, 0 files
// 进入web/apache下面,写一个apache.sls状态文件
// YAML 配置文件中顶格写的被称作ID,必须全局唯一,不能重复
// SaltStack 读 YAML 配置文件时是从上往下读,所以要把先执行的写在前面
[root@master base]# vim web/apache/apache.sls
apache-install:
pkg.installed:
- name: httpd
apache-service:
service.running:
- name: httpd
- enable: true
[root@master base]# tree
.
└── web
├── apache
│ └── apache.sls
└── nginx
3 directories, 1 file
// 在minion2上执行apache.sls状态文件
[root@master base]# salt 'minion' state.sls web.apache.apache saltenv=base
state意思是执行,state.sls意思就是执行状态;整句意思是执行base环境下面的web下面的apache下面的apache。
如果用的是base环境的话,saltenv=base可以省略;但是如果是dev、prod、test的话就必须加上saltenv=dev、prod、test
网慢所以才导致安装慢,等一小会就好了。
minion2:
Minion did not return. [No response]
The minions may not have all finished running and any remaining minions will return upon completion. To look up the return data for this job later, run the following command:
salt-run jobs.lookup_jid 20211102102604498582 #如果报了以上这种错误,并没有任何影响,不用管它,然后执行这条命令就可以看见minion2的信息
ERROR: Minions returned with non-zero exit code
//查看状态文件执行的结果
[root@master base]# salt-run jobs.lookup_jid 20211102102604498582
minion:
----------
ID: apache-install
Function: pkg.installed
Name: httpd
Result: True
Comment: The following packages were installed/updated: httpd
Started: 18:26:08.273303
Duration: 11811.171 ms
Changes:
----------
apr:
----------
new:
1.4.8-7.el7
old:
apr-util:
----------
new:
1.5.2-6.el7
old:
httpd:
----------
new:
2.4.6-97.el7.centos.1
old:
httpd-tools:
----------
new:
2.4.6-97.el7.centos.1
old:
mailcap:
----------
new:
2.1.41-2.el7
old:
----------
ID: apache-service
Function: service.running
Name: httpd
Result: True
Comment: Service httpd has been enabled, and is running
Started: 18:26:20.103534
Duration: 29395.506 ms
Changes:
----------
httpd:
True
Summary for minion2
------------
Succeeded: 2 (changed=2) ## 如果再次执行一遍,整个字体都是绿色的,而且这里也没用changed,就说明已经达到了目标状态,已经达到了目标状态就不做任何事。如果它没有达到目标状态那就要让它去达到目标状态。
Failed: 0
------------
Total states run: 2
Total run time: 41.207 s
//在minion上检查
// 在minion上查看安装的apache服务
[root@minion ~]# rpm -qa|grep httpd
httpd-tools-2.4.6-97.el7.centos.1.x86_64
httpd-2.4.6-97.el7.centos.1.x86_64
[root@minion ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@minion ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2021-11-02 18:26:49 CST; 15min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 57712 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─57712 /usr/sbin/httpd -DFOREGROUND
├─58241 /usr/sbin/httpd -DFOREGROUND
├─58242 /usr/sbin/httpd -DFOREGROUND
├─58243 /usr/sbin/httpd -DFOREGROUND
├─58244 /usr/sbin/httpd -DFOREGROUND
└─58245 /usr/sbin/httpd -DFOREGROUND
top file介绍
直接