一篇帶你熟悉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: