RHCEansible 编写playbook---yaml

YAML 语言特性

YAML 的可读性好
YAML 和脚本语言的交互性好
YAML使用实现语言的数据类型
YAML 有一个一致的信息模型
YAML 易于实现
YAML 可以基于流来处理
YAML 表达能力强,扩展性好

YAML的三种数据结构

对象:
键值对的集合,又称为映射、哈希、字典 name: username
数组:
一组按次序排列的值,又称为序列 / 列表
纯量:
单个的、不可再分的值
对象:
key :
key1 : vaule1
key2 : 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]# vim code.yml

[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

案例

 [root@server test]# vim code2.yml

 [root@server test]# ansible-playbook -e 'file_name=newfile user_name=devops pk_name=httpd'  code2.yml

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值