Ansible Playbook 入門指南

Ansible Playbook

對 ansible 基礎完全不瞭解可以看我的上一篇文章

Playbook 是用YAML 格式寫成。對YAML不瞭解的可以參見這篇簡短的介紹

大部分指令不把輸出粘在這裏,也是希望讀者自己邊讀,邊操作。
爲便於拷貝操作,命令行提示符$都將省略。

ansible-playbook使用方法

腳本式

ansible-playbook playbook.yml
---
- hosts: all
  tasks:
    - name: Install Apache.
      command: yum install --quiet -y httpd httpd-devel
    - name: Copy configuration files.
      command: >
        cp httpd.conf /etc/httpd/conf/httpd.conf
    - command: >
        cp httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf
    - name: Start Apache and configure it to run at boot.
      command: service httpd start
    - command: chkconfig httpd on
命令:command 指令後緊跟的大於號(>)告訴YAML“自動將下一組縮進行引爲一個長字符串,每行之間用空格分隔”。在某些情況下,它有助於提高任務的可讀性。使用有效的YAML語法有多種描述配置的方法。

上面的playbook 與腳本無異,有助於把你原有的shell腳本的技能進行平滑過渡。

Ad-hoc 式

下面展示更有 ansible 味道的寫法。

---
- hosts: all
  become: yes

  tasks:
    - name: Install Apache.
      yum: name={{ item }} state=present
      with_items:
        - httpd
        - httpd-devel
    - name: Copy configuration files.
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
        owner: root
        group: root
        mode: 0644
      with_items:
        - src: "httpd.conf"
          dest: "/etc/httpd/conf/httpd.conf"
        - src: "httpd-vhosts.conf"
          dest: "/etc/httpd/conf/httpd-vhosts.conf"
    - name: Make sure Apache is started now and at boot.
      service: name=httpd state=started enabled=yes

這裏become: yes 相當於 --sudo的作用。
state=present相當沒有就安裝。可選的 state 還有 latest - 保持最新,absent - 有就卸載,started - 啓動等。

運行ansible-playbook時加--check參數用於覈查服務器的狀態,不做修改操作(dry-run)。

可以通過 --limit參數指定範圍,如:

ansible-playbook playbook.yml --limit webservers

下面的指令將顯示出作用於哪些主機:

ansible-playbook playbook.yml --list-hosts

指定專門用戶:

ansible-playbook playbook.yml --remote-user=johndoe

或以另一個用戶身份執行(同時在命令行詢問密碼):

ansible-playbook playbook.yml --become --become-user=janedoe \
--ask-become-pass

其他常用參數:

  • --inventory = PATH(-i PATH):定義自定義清單文件(默認爲默認的Ansible清單文件,通常位於/etc/ansible/hosts中)。
  • --verbose(-v):詳細模式(顯示所有輸出,包括成功選項的輸出)。您可以傳入-vvvv來提供每分鐘的詳細信息。
  • --extra-vars = VARS(-e VARS):以“鍵=值,鍵=值”格式定義要在劇本中使用的變量。
  • --forks = NUM​​(-f NUM):併發數(整數)。將此值設置爲大於5的數字可增加Ansible將在其上同時運行任務的服務器的數量。
  • --connection = TYPE(-c TYPE):將使用的連接類型(默認爲ssh;您有時可能希望使用local在本地計算機上或通過cron在遠程服務器上運行劇本)

這裏有一些完整的例子,可以在DevOps實踐中加以運用。

Ubuntu Server上裝 solr

SoWkIImgAStDuIhEpimhI2nAp5KeIaqkISnBpqbLgERYBCelpKjnpY_AIosoiNasf_TfryAdCrVOsIaOcNBLSW41GhLIcAz-S6fHMMgHaWAAMh0v26ME1Od96QaAmVavG8KeCbw9POaA-GMfULafsKeAg7AXIQLv9QKA6ZwPUQKLcY3PMYw7rBmKeDi1

---
hosts: all
  vars_files;
  - var.yml

  pre_tasks:
    - name:  Update apt cache if needed.
      apt: update_cache=yes cache_valid_time=3600
  handlers:
      - name: restart solr
        service: name=solr state=restarted
  tasks:
      - name: Install Java.
        apt: name=openjdk-8-jdk state=present
      - name: Download Solr.
        get_url:
          url: "https://archive.apache.org/dist/lucene/solr/{{ solr_version }}/solr-{{ solr_version }}.tgz"
          dest: "{{ download_dir }}/solr-{{ solr_version }}.tgz"
          checksum: "{{ solr_checksum }}" 
      - name: Expand Solr.    
        unarchive:
            src: "{{ download_dir }}/solr-{{ solr_version }}.tgz"
            dest: "{{ download_dir }}"
            copy: no
            creates: "{{ download_dir }}/solr-{{ solr_version }}/README.txt"
      - name: Run Solr installation script.
        shell: >
            {{ download_dir }}/solr-{{ solr_version }}/bin/install_solr_service.sh
            {{ download_dir }}/solr-{{ solr_version }}.tgz
            -i /opt
            -d /var/solr
            -u solr
            -s solr
            -p 8983
            creates={{ solr_dir }}/bin/solr

       - name: Ensure solr is started and enabled on boot.
         service: name=solr state=started enabled=yes

執行:

ansible-playbook solr.yml --limit-hosts solr

順利的話, 過一會就可以通過瀏覽器訪問8983端口的solr管理界面了。

如有什麼問題,可以參考這裏的 源代碼。

If everything is under control, you are going too slow...

小結

指南就到這裏,實踐纔是關鍵。祝您好運。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章