一篇带你熟悉ansible-playbook剧本

 

 

 

#playbook介绍

#playbook简单介绍
playbook翻译过来就是剧本,以yml/yaml为后缀结尾的一个文本文件

#playbook组成:分为两部分play(定义主机的角色)和task(具体执行什么任务)
play    (找谁) 如- hosts: update() 
tasks    (干什么) 如:安装软件,包括文件

 

#ansible-playbook命令帮助

# man ansible-playbook
# ansible-playbook -h
#语法格式:ansible-playbook [option] playbook.yml  [playbook2 ….]

#常用参数:
-C, --check        #检查,运行但是不做任何的操作
-f FORKS, --forks=FORKS    #用来做并发
--list-hosts    #列出主机列表
--syntax-check    #进行语法检查

 

#playbook书写格式

#缩进    YAML使用固定的缩进风格表示层级结构,每个缩进两个空格,不适用tabs键,如
- hosts: update
  tasks:

#冒号    除了以冒号结尾的,其他所有冒号后面都必须有空格,如
- hosts: update    tasks:(冒号结尾不用空格)

#短横线    表示列表项,适用一个短横杠加一个空格。多个项适用同样的缩进级别作为同一列表
- hosts: update
  tasks:
    - name: 
    

 

#使用步骤

#1.定义主机的角色
- hosts: k8s-master

#2、在playbooks中定义任务
tasks:
  - name: task description        #任务描述信息
  - module_name: module args   #需要使用的模块名字:模块参数

#3、ansible-playbook执行命令
[root@ctos1 roles]# ansible-playbook site.yml 

 

#基本使用

1.使用剧本方法给被控制端创建用户组和用户

#1.1、查看定制的组,如果想控制不同功能的服务器,就划分到不同的组
[root@k8s-master yaml]# tail -n 7 /etc/ansible/hosts 
[k8s-etcd]
192.168.86.131

[k8s-node]
192.168.86.132
192.168.86.133

#1.2、编写yml文件
[root@k8s-master yaml]# pwd
/etc/ansible/yaml
[root@k8s-master yaml]# cat a1.yml 
- hosts: k8s-node
  tasks:
  - name: creategroup
    group: name=guoke
  - name: createuser
    user: name=demo10

#检查有无语法错误
[root@k8s-master yaml]# ansible-playbook --syntax-check a1.yml 

playbook: a1.yml

#列出这个组的主机列表
[root@k8s-master yaml]# ansible-playbook --list-hosts a1.yml 
playbook: a1.yml

  play #1 (k8s-node): k8s-node  TAGS: []
    pattern: [u'k8s-node']
    hosts (2):
      192.168.86.133
      192.168.86.132

#-C就是检查,白跑的,不会进行任何的操作
[root@k8s-master yaml]# ansible-playbook -C a1.yml 

#1.3、执行创建
[root@k8s-master yaml]# ansible-playbook a1.yml 

#1.4、到被控制端查看效果
[root@node1 ~]# id demo10
uid=1005(demo10) gid=1006(demo10) groups=1006(demo10)

 

2.安装http服务,启动服务并加入开机自启,放行相对应的端口

 

#需求
安装http服务  yum
编写简单的网页进行测试 copy 
启动服务并加入开机自启 service 
放行firewalld对应的端口 firewalld

[root@game yaml]# cat install_pack.yml 
- hosts: all
  tasks:
    - name: Install httpd Packages
      yum: name=httpd state=present
    
    - name: http configure
      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf backup=yes

    - name: configure content
      copy: src=/var/www/html/index.html dest=/var/www/html/index.html owner=root group=root mode=644

    - name: start httpd services
      service: name=httpd state=started enabled=yes

    - name: start firewall services
      service: name=firewalld state=started

    - name: configure firewalld
      firewalld: zone=public service=http  permanent=yes immediate=yes state=enabled

#进行语法检查
[root@game yaml]# ansible-playbook --syntax-check install_pack.yml 
[root@game yaml]# ansible-playbook install_pack.yml

 

3.使用ansible安装并配置nfs服务

#服务端:192.168.228.130
    1.安装nfs
    2.配置nfs
    3.根据配置创建目录,创建用户,授权
    4.启动并加入开机自启
        
#客户端:192.168.228.131
    1.准备一个空目录
    2.挂载服务端共享的目录
#提示:如果客户端没有安装nfs-utils,需要进行安装再挂载,否则会挂载的时候会报错、

[root@game yaml]# cat nfs.yml 
- hosts: 192.168.228.130
  tasks:
    - name: Installed nfs Services
      yum:
        name: nfs-utils
        state: present

    - name: Configure NFS
      copy:
        src: /etc/exports
        dest: /etc/exports
        backup: yes

    - name: Create Group
      group:
        name: www
        gid: '666'

    - name: Create User
      user:
        name: www
        uid: '666'
        group: '666'
        shell: /sbin/nologin
        create_home: no

    - name: Create Driectory
      file:
        path: /data
        state: directory
        owner: www
        group: www
        recurse: yes

    - name: Start NFS Server
      service:
        name: nfs
        state: restarted
        enabled: yes

- hosts: 192.168.228.131
  tasks:
    - name: Install NFS  Client
      yum:
        name: nfs-utils
        state: present

    - name: Create Mount Driectory
      file:
        path: /nfs_cl
        state: directory

    - name: Client Mount NFS Server
      mount:
        src: 192.168.228.130:/data
        path: /nfs_cl
        fstype: nfs
        opts: defaults
        state: mounted
#参数解释:
1.file模块:path:指定路径,state:创建的是目录,owner:指定所属主,group:指定所属组,recurse:递归创建
2.mount模块:src:源挂载点,path:本地挂载目录,fstype:类型
3.更多信息可使用ansible-doc +模块名查看帮助        

#执行效果
[root@game yaml]# ansible-playbook  --syntax-check nfs.yml #语法检查
[root@game yaml]# ansible-playbook nfs.yml 

 

 

Tags: