顯示具有 ansible 標籤的文章。 顯示所有文章
顯示具有 ansible 標籤的文章。 顯示所有文章

2021/08/13

Stop The Process By Condition In Ansible

Ansible 的任務沒有下中斷的話,即便有使用 when 偵測,playbook 會繼續往下走,可以利用 fail 這個參數讓條件不符合時直接把 process 中斷,以 stat 偵測目錄是否存在來做範例。

- hosts: localhost

  vars:
    path: /tmp/sync/

  tasks:
    - name: "stat {{ path }}"
      stat:
        path: "{{ path }}"
      register: the_dir

    - name: "shutdown when {{ path }} is not exists"
      fail:
        msg: "{{ path }} not exists"
      when: the_dir.stat.exists == False

    - name: "echo yes when {{ path }} exists"
      debug:
        msg: 'yes'
      when: the_dir.stat.exists

當我們設定的 path 不存在時,會直接中斷,不會走道最後的 "echo yes when {{ path }} exists"

2020/08/19

初探 ansible

ansible 是一個基於 python 的工具,在 CI/CD 的世界挺受歡迎,可以做的事情很多,網路上很多 ansible 教學了,我這邊筆記一下一些比較常用的東西

deploy.yml
- hosts: localhost
  vars:
    NAME: chan

  tasks:
  - name: echo name
    command: "echo {{ NAME }}"
  
  - name: echo age from outside
    command: "echo {{ AGE }}"
    
  - name: echo name from env
    command: "echo {{ lookup('env', 'LBJ') }}"

這是一個最基礎的 ansible playbook 架構,只要把命令寫好,ansible 就會照 task name 一個一個執行,上面我的範例第一個是 echo 本地設定的 NAME,第二個 AGE 會從外部導入,第三個 LBJ 是抓取環境變數,因此要正確執行的話要這樣下

$ export LBJ=GOAT
$ ansible-playbook deploy.yml -e "AGE=40" -v

執行後可以依序看到 NAMEAGELBJ 的變數結果相繼印出,基本上架構瞭解,做的事情只是從 tasks 去變化,搭配 ansible 本身強大的 modules 可以幾乎沒有事情辦不到,也可以使用 role 來做群組管理,但如果想要簡單部署,接下來示範如何把上面的工作打散

/a.yml
- hosts: localhost
  vars:
    TARGET: a
  vars_files:
    - ./vars/var.yml

  tasks:
    - include_tasks: ./tasks/deploy.yml

    - name: echo self stuff
      command: "echo this is {{ TARGET }}"
/vars/var.yml
NAME: chan
/tasks/deploy.yml
- name: echo name
  command: "echo {{ NAME }}"

- name: echo age from outside
  command: "echo {{ AGE }}"

這樣的設定,如果要生另一個類似的流程只要複製 a.yml 改一下內容即可。