ansible --- 4. playbook

一. playbook格式

Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
(代碼執行格式)

optons:
-C, --check #白跑,執行可是不會有結果
--list-hosts #列出符合的主機
-f FORKS, --forks=FORKS #作併發
--syntax-check #檢查語法
-k, --ask-pass #輸入密碼

 

補充:

① vi 的快捷操做
yy 複製一行 # yy 複製多行 p 粘貼 dd 刪除一行 # dd 刪除多行 d$ 從當前位置刪除到結尾


②echo的操做

  echo `date +%F`
  echo $(date +%F)python


  a=10
  echo '$a'
  $a
  echo "$a"
  10nginx

 

 

 二. setup 模塊(收集某主機信息)

 

 

ansible_all_ipv4_addresses #全部的ipv4地址
ansible_all_ipv6_addresses #全部的ipv6地址
ansible_architecture #系統的架構
ansible_date_time #系統時間
ansible_default_ipv4 #默認的ipv4地址
    address ip地址
    alias 網卡名稱
    broadcast 廣播地址
    gateway 網關
    netmask 子網掩碼
    network 網段
ansible_default_ipv6 #默認的ipv6地址
ansible_device_links #系統的磁盤信息
ansible_distribution #系統名稱
ansible_distribution_file_variety #系統的基於公司
ansible_distribution_major_version #系統的主版本
ansible_distribution_version #系統的所有版本
ansible_dns #系統的dns 默認udp 端口53
ansible_domain #系統的域 ldap
ipv4 #ipv4地址
ansible_env #系統的環境
ansible_fqdn #系統的完整主機名
ansible_hostname #系統的簡寫主機名
ansible_kernel #系統的內核版本
ansible_machine #系統的架構
ansible_memtotal_mb #系統的內存
ansible_memory_mb #系統的內存使用狀況
ansible_mounts #系統的掛載信息
ansible_os_family #系統家族
ansible_pkg_mgr #系統的包管理工具
ansible_processor #系統的cpu
ansible_processor_cores #每顆cpu的核數
ansible_processor_count #cpu的顆數
ansible_processor_vcpus #cpu的個數=cpu的顆數*每顆cpu的核數
ansible_python #系統python信息
ansible_python_version #系統python的版本
ansible_system #系統名字

 

 

 

三.   .yaml (.yml)文件的基本格式

  

字典 key:value

列表 [] -
  - alex
  
  - wusir

   - yantao
    - yuchao

[alex,wusir,yantao,yuchao]web

  
  • 冒號後面必須有空格redis

  • 橫線後面必需要空格shell

  • 嚴格保持對齊安全

  • 等號前面不能有空格架構

 

 

 

  1.單個的playbook

僅建立一個用戶

- hosts: web remote_user: root (默認是root) tasks: - name: createuser user: name=alex20 home=/opt/alex20 uid=4000


執行時的代碼爲:
  
ansible-playbook 文件名.yml
 

 

  2.多個playbook

建立一個用戶 和 複製文件

- hosts: web remote_user: root tasks: - name: createuser user: name=alex20 home=/opt/alex20 uid=4000 - name: copyfile copy: src=/etc/fstab dest=/tmp/fs


執行時的代碼:
  ansible-playbook 文件名.yml

 

  3.傳參

優先級:
  -e > playbook > hosts

 

  ①第一種方式併發

把要建立的用戶名 在執行文件時傳入

- hosts: web tasks: - name: create{{user}} user: name={{user}}


執行時的代碼:   ansible
-playbook -e user=wusir20 p3.yml

 

  ②第二種方式dom

修改 hosts 配置文件  加入 user
hosts文件中:
[web]
192.168.226.[101:102] user=alex30 192.168.226.104 user=alex100



在playbook 文件中:  
- hosts: web
  tasks:
  - name: create{{user}} user: name={{user}}

直接執行playbook文件:
  ansible-playbook 文件名.yml
  

 

  ③第三種方式socket

修改hosts配置文件:

[web:vars] user
=alex31

 

在playbook 文件中內容如上 
 
 
直接執行playbook文件:
  ansible-playbook 文件名.yml
 

 

  ④第四種方式

修改playbook文件

- hosts: web vars: - user: alex32 tasks: - name: create{{user}} user: name={{user}}

直接執行playbook文件:
  ansible-playbook 文件名.yml


 

  ⑤第五種方式

修改 playbook文件

- hosts: web tasks: - name: yum yum: name=bc #下載bc計算組件 - name: sum shell: echo 11+22|bc register: user # 註冊成變量,返回結果爲後面使用
- name: create{{user.stdout}} user: name=alex{{user.stdout}}


直接執行playbook文件:
  ansible-playbook 文件名.yml

 

  4.tags(標籤,只執行帶標籤的代碼)

在playbook 中加入標籤

- hosts: web tasks: - name: install yum: name=redis - name: copyfile copy: dest=/etc/redis.conf src=/etc/redis.conf tags: copy - name: start service: name=redis state=started


執行時的代碼(僅運行標籤所在的一項):   ansible
-playbook -t copy p7.yml



 

  5.handlers(改變時 觸發 某一項)

在 playbook 文件中加 notify;和 handlers


- hosts: web tasks: - name: install yum: name=redis - name: copyfile copy: dest=/etc/redis.conf src=/etc/redis.conf tags: copy notify: restart #改變時觸發 - name: start service: name=redis state=started handlers:        #觸發項 - name: restart service: name=redis state=restarted


執行時的代碼(僅運行標籤所在的一項):
  ansible-playbook -t copy p7.yml

 

  6.template  模塊(基於jinja2)

  能夠進行動態替換

  用法,做用和copy同樣

  ①絕對路徑

利用收集的信息

在playbook 文件中
- hosts: web tasks: - name: install yum: name=redis - name: copyfile template: dest=/etc/redis.conf src=/etc/redis.conf #將copy直接替換 tags: copy notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted

在 redis.conf 文件中(利用收集的信息保證安全)

 

執行時的代碼(僅運行標籤所在的一項):
  ansible-playbook -t copy p7.yml


copy完成以後就引用了收集的信息
 

 

  ②相對路徑

mv redis.conf{,.j2} = mv redis.conf redis.conf.j2

 


- hosts: web tasks: - name: install yum: name=redis - name: copyfile template: dest=/etc/redis.conf src=redis.conf.j2 tags: copy notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted
在當前目錄下建立一個templates的目錄,
把要copyd的文件放在 templates 文件下
就能夠使用相對路徑


執行時的代碼(僅運行標籤所在的一項):
  ansible-playbook -t copy p7.yml
 

 

 

  7.when (相似於python 中的 if)

- hosts: web
  tasks:
  - name: copyfile
    copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
    when: ansible_distribution_major_version=="7"    #利用收集的信息
  - name: copyfile
    copy: content="小弦切切如私語" dest=/tmp/a.txt
    when: ansible_distribution_major_version=="6"


執行時的代碼:
  ansible-playbook  p7.yml
 

 


- hosts: web tasks: - name: copyfile copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt when: user=="4" - name: copyfile copy: content="小弦切切如私語" dest=/tmp/a.txt when: user=="3"

執行時的代碼:
  ansible-playbook -e user=4 p3.yml
只執行第一項

 

  8.with_items (相似於python中的 while)

  ①.循環

建立多個用戶

- hosts: web tasks: - name: createuser user: name={{item}} with_items: - alex50 - wusir50 - taibai50

執行時的代碼:
  ansible-playbook  p7.yml

 

建立多個用戶  和  多個組(建立完用戶再建立組)

- hosts: web tasks: - name: createuser user: name={{item}} with_items: - alex51 - wusir51 - taibai51 - name: creategroup group: name={{item}} with_items: - alex60 - wusir60 - taibai60

執行時的代碼:
  ansible-playbook  p7.yml

 

  ②嵌套循環

建立用戶並添加屬組

- hosts: web tasks: - name: crateuser user: name={{item.name}} group={{item.group}} with_items: - {"name":alex52,"group":alex60} - {"name":wusir52,"group":wusir60} - {"name":taibai52,"group":taibai60}


執行時的代碼:
  ansible-playbook  p7.yml

 

九. roles  (角色)

- 目錄結構清晰
- 能夠相互調用 - import_tasks: roles/nginx/tasks/install.yml
- 備份方便

 

roles/nginx/
├── files       -- 靜態文件
│   └── c.txt
├── handlers    -- 觸發的任務
│   └── main.yml
├── tasks       -- 任務(必須的)
│   ├── copyfile.yml
│   ├── install.yml
│   ├── main.yml
│   └── start.yml
├── templates  -- 動態文件,須要傳遞參數
│   └── nginx.conf
└── vars      -- 變量
    └── main.yml

 

 

查找順序:

- 主文件看到roles,就回去roles目錄下面找對應的目錄
- 先去tasks目錄裏面找main.yml文件,若是遇到import_task則加載任務
- 若是遇到了template,則去templates目錄裏面找文件
- 若是遇到了copy,則去files目錄裏面找文件
- 若是遇到了變量,則去vars目錄裏面找main.yml文件
- 若是遇到了notify,則去handlers目錄裏面找main.yml文件

 

 

 

 

 

③啓動

 

 

十.補充( 回憶  nginx+uwsgi)

第一種方式

uwsgi的配置

http = 0.0.0.0:8000

nginx的配置

proxy_pass http://127.0.0.1:8000;

pkill -9 uwsgi 殺掉uwsgi的進程



第二種方式 uwsgi的配置 socket
= 0.0.0.0:8000 nginx的配置 include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8000;

第三種方式 uwsgi的配置 socket
= /data/mysite/mysite.socket nginx的配置 include /etc/nginx/uwsgi_params; uwsgi_pass unix:/data/mysite/mysite.socket;
相關文章
相關標籤/搜索