YAML 语言特性
YAML的三种数据结构
对象:key :key1 : vaule1key2 : vaule2或者key : { key1 : value1 , key2 : value2 }数组:key :- value1- value2或者: key: [ value1 , value2 ]arr=(1,2,3,4,5)
arr:
-1
-2
-3
-4
-5
流式风格语法
key:{key1:value1,key2:value2}
YAML语法格式
- 在单一文件第一行,用连续三个连字号 “-” 开始 (---),还有选择性的连续三个点号 ( … ) 用来表示文件的结尾- 次行开始正常写 Playbook 的内容,一般建议写明该 Playbook 的功能- 使用 # 号注释代码- 缩进必须是统一的 ,不能空格和 tab 混用 (以空格的缩进来控制层级关系只要是左对齐的一列数据,都是同一个层级的,)- 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的YAML 文件内容是区别大小写的, key/value 的值均需大小写敏感- 多个 key/value 可同行写也可换行写,同行使用,分隔- v 可是个字符串,也可是另一个列表- 一个完整的代码块功能需最少元素需包括 name 和 tasks- 一个 name 只能包括一个 tasks- YAML 文件扩展名通常为 yml 或 yaml- 添加注释一定要在#后有个空格--- # 注释
编写yaml
先配置好ansible
[root@server test]# vim ansible.cfg
[root@server test]# vim inventory
[root@server test]# vim test.yml
---
- name: play1
hosts: node1
remote_user: root #远程登录用户
tasks:
- name: task1
file:
path: /new1 #在当前目录创建new1
state: touch #操作为touch
mode: 644 #权限为644
owner: redhat #操作用户为redhat
group: redhat #所属组为redhat
- name: task2
user:
{ name: list1 , uid: 1111 }
- name: task3
copy:
dest: /new1
content: "this is file"
...
运行playbook(yaml)
[root@server test]# ansible-playbook test.yml
[root@server test]# ansible-playbook --syntax-check test.yml ---检验playbook语法是否有问题
[root@server test]# ansible-playbook test.yml -C --- 执行空运算 可以检测将会发生什么更改但是并没有对受管主机进行实际更改
案例:配置web
步骤
1、配置yum源,安装对应服务 http
2、ip通过自定义端口访问网站内容/www
3、创建资源文件
4.重启服务
5、测试
6、防火墙
7、selinux
[root@server test]# vim web.yml
---
- name: configure web server # 配置web服务
hosts: test2
tasks:
- name: mount /dev/sr0
mount:
src: /dev/sr0
path: /mnt
state: mounted
fstype: iso9660
- name: yum repository # 配置yum源---baseos
yum_repository:
name: BaseOS
description: RHEL8-B
baseurl: file:///mnt/BaseOS
gpgcheck: no
file: BaseOS
- name: yum repository # 配置yum源---appstream
yum_repository:
name: AppStream
description: RHEL8-A
baseurl: file:///mnt/AppStream
gpgcheck: no
file: AppStream
- name: install httpd # 安装httpd
dnf:
name: httpd
state: latest
- name: create configure file # 创建配置文件
copy:
src: /test/httpd.conf# 需要先创建文件
[root@server test]# vim httpd.conf Listen 8909 <Directory /www> Allowoverride none require granted </Directory> <virtualhost *:8909> documentroot /www </virtualhost>
dest: /etc/httpd/conf.d/vhosts.conf
- name: mkdir # 创建目录
file:
path: /www
state: directory
- name: test file # 网页测试文件
copy:
dest: /www/ index.html
content: "helloworld\n"
- name: start firewall # 启动防火墙
service:
name: firewalld
state: restarted
enabled: yes
- name: firewall # 配置防火墙
firewalld:
port: 8909/tcp
permanent: yes
immediate: yes
state: enabled
- name: selinux-python # 安装python3
yum:
name:
- python3-libselinux
- policycoreutils-python-utils
state: present
- name: selinux # 开启selinux
selinux:
state: enforcing
policy: targeted
- name: configure selinux-port # 配置selinux端口
seport:
ports: 8909
proto: tcp
setype: http_port_t
state: present
- name: selinux # 配置selinux标签
sefcontext:
target: '/www(/.*)?'
setype: httpd_sys_content_t
state: present
- name: restart service # 重启服务
service:
name: httpd
state: restarted
enabled: yes
- name: webtest # 测试web
hosts: node2
tasks:
- name: testnode2
uri:
url: http://192.168.171.130
return_content: yes
status_code: 200如果出现python问题就在受控主机上:yum install policycoreutils-python-utils
[root@server test]#vim httpd.conf
测试
[root@server test]# ansible-playbook web.yml -C --- 不断试错,根据错误改错,最后再实际的运行
[root@server test]# ansible-playbook web.yml
在受控主机上查看
[root@node2 ~]# curl http://192.168.171.130
管理变量与事实
命令行引用变量
[root@server test]# ansible-playbook -e "pkname=vsftpd" code.yml --- 引用变量
引用playbook中的变量
[root@server test]# vim code.yml
[root@server test]# ansible-playbook code.yml -C