[root@m01 ~]# rz httpd.conf
[root@m01 ~]# rz php.tar.gz [root@m01 ~]# rz kaoshi.zip
#注:&&:前面執行完再執行後面的步驟(如果不加這些步驟會同時執行,有些沒執行,有些已經執行完) #安裝httpd ansible 'web_group' -m yum -a 'name=httpd state=present' &&\ #解壓php包 ansible 'web_group' -m unarchive -a 'src=/root/php.tar.gz dest=/tmp/' &&\ #安裝php ansible 'web_group' -m shell -a 'yum localinstall -y /tmp/*.rpm' #解壓程式碼 ansible 'web_group' -m unarchive -a 'src=/root/kaoshi.zip dest=/var/www/html/' &&\ #建立檔案目錄 ansible 'web_group' -m file -a 'path=/var/www/html/upload state=directory' &&\ #建立使用者組 ansible 'all' -m group -a 'name=www gid=666 state=present' &&\ #建立使用者 create_home:是否建立家目錄 /sbin/nologin:不需要登入 ansible 'all' -m user -a 'name=www group=www uid=666 create_home=false shell=/sbin/nologin' &&\ #授權程式碼目錄 ansible 'web_group' -m file -a 'path=/var/www/ state=directory owner=www group=www' &&\ #推送httpd配置檔案 ansible 'web_group' -m copy -a 'src=/root/httpd.conf dest=/etc/httpd/conf/' &&\ #啟動httpd ansible 'web_group' -m systemd -a 'name=httpd state=restarted enabled=yes' &&\ #安裝nfs服務 ansible 'all' -m yum -a 'name=nfs-utils state=present' &&\ #編輯nfs配置檔案 ansible 'nfs' -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports' &&\ #建立共享目錄並授權 ansible 'nfs' -m file -a 'path=/data state=directory owner=www group=www' &&\ #啟動nfs enabled:開機自啟 ansible 'nfs' -m systemd -a 'name=nfs state=restarted enabled=yes' &&\ #掛載 ansible 'web_group' -m mount -a 'src=172.16.1.31:/data path=/var/www/html/upload fstype=nfs opts=defaults state=mounted'
一、playbook概述
PlayBook即"劇本","兵書"之意,Playbook是由以下部分組成的 play(host): 定義的是主機的角色。(主角還是配角) book(task): 定義的是具體執行的任務。(角色的臺詞和動作) playbook: 由一個或多個play(角色)組成,一個play(角色)可以包含多個task(臺詞,動作)。 簡單理解為:使用不同的模組完成一件事
在Ansible中"劇本檔案"是以yml結尾的檔案。 在SaltStack中"劇本檔案"是以sls結尾的檔案。 但是語法,使用的都是yaml語法
[root@m01 ~]# vim touch.yml #內容縮排2格 #定義要執行動作的主機 - hosts: web_group #算位數根據-的位置開始算 #定義操作的使用者 remote_user: root #預設root,可加可不加 #定義變數 vars: file_name: lhd #:後面一定要有空格 #動作 tasks: #註釋 - name: Touch File #模組與實際動作 shell: touch /tmp/{{ file_name }} #執行前先驗證語法(只能驗證語法,無法驗證邏輯) [root@m01 ~]# ansible-playbook --syntax-check touch.yml playbook: touch.yml #說明語法沒錯 #執行 [root@m01 ~]# ansible-playbook touch.yml #TASK [Gathering Facts] 這一步是最慢的,從每個客戶端中收錄資訊(主機名,目錄,磁碟,記憶體之類的資訊) #PLAY RECAP 輸出結果 # 先建立資料夾再建立檔案 [root@m01 ~]# vim touch.yml - hosts: web_group vars: file_name: lhd tasks: - name: Mkdir File file: path: /tmp/file state: directory - name: Touch file shell: touch /tmp/file/{{ file_name }}
特定 | PlayBook | ad-hoc |
---|---|---|
完整性 | √ | × |
√ | × | |
執行效率 | 低 | 高 |
變數 | 支援 | 不支援 |
耦合度 | 低 | 高 |
1.PlayBook功能比ad-hoc更全,是對ad-hoc的一種編排 2.PlayBook能很好的控制先後執行順序,以及依賴關係 3.PlayBook語法展現更加的只管 4.PlayBook可以持久使用,ad-hoc無法持久使用
語法 | 描述 |
---|---|
縮排 | YAML使用固定的縮排風格表示層級結構,每個縮排由兩個空格組成,不能使用TAB |
冒號 | 以冒號結尾的除外,其他所有冒號後面所有必須有空格 |
短橫線 | 表示列表項,使用一個短橫槓加一個空格,多個項使用同樣的縮排級別作為同一列表 |
#縮排: 中國: 上海: 北京: - 朝陽區 - 昌平 - 大興區 #中橫線: 代表是一層,表示同一個佇列
二、playbook實戰
1)配置主機清單
[root@m01 ~]# vim /etc/ansible/hosts [web_group] web01 web02
[root@m01 ~]# ansible 'web_group' -m ping web02 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } web01 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
#建立專案目錄 [root@m01 project]# tree /project /project └── httpd [root@m01 httpd]# vim httpd.yml - hosts: web_group tasks: #關閉防火牆 - name: Stop Firewalld service: name: firewalld state: stopped enabled: no #關閉selinux - name: Stop Selinux selinux: state: disabled #安裝httpd - name: Install Httpd Server yum: name: httpd state: present #啟動httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #新增訪問頁面 - name: Config index.html copy: content: test http dest: /var/www/html/index.html #檢查語法 [root@m01 httpd]# ansible-playbook --syntax-check httpd.yml playbook: httpd.yml #測試 瀏覽器輸入 10.0.0.7 10.0.0.8