ansibke playbook (劇本) yaml

 - ansible-playbook命令格式

   - 執行順序 :從上往下python

   - 特性:冪等性 無論執行多少遍,結果都是同樣的nginx

ansible-playbook [options] playbook.yml [playbook2 ...] 
-C, --check   # 檢查,白跑,幹跑
-f FORKS, --forks=FORKS #用來作併發
--list-hosts # 列出主機列表
--syntax-check # 語法檢查 

 - 簡單用法web

- hosts: web
  tasks:
  - name: creategroup
    group: name=jamlee1
  - name: cretaeuser
    user: name=jam1

 - 傳參redis

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

   - 方法一 shell

ansible-playbook -e 'user=jamlee1' p1.yml

   - 方法二 (host文件)架構

vi /etc/ansible/hosts 

[db]
192.168.33.131 user=jam1
192.168.107.132 user=jam2

   - 方法三 (host文件)併發

[db:vars] #表示組的參數
user=jam2

   - 方法四dom

- hosts: db
  vars:
  - user: jam3
  tasks:
  - name: create{{ user }}
    user: name={{ user}}

   - 方法五ide

- hosts: db
  tasks:
  - name: sum
    shell: echo 7+8|bc
    register: user
  - name: createuser
    user: name={{user.stdout}}

傳參方式的優先級工具

-e > playbook vars > hosts文件

  - setup  模塊用於收集遠程主機的一些基本信息。

ansible cache -m setup
ansible_all_ipv4_addresses # ipv4的全部地址
ansible_all_ipv6_addresses # ipv6的全部地址
ansible_date_time # 獲取到控制節點時間
ansible_default_ipv4 # 默認的ipv4地址
ansible_distribution # 系統
ansible_distribution_major_version # 系統的大版本
ansible_distribution_version # 系統的版本號
ansible_domain #系統所在的域
ansible_env #系統的環境變量
ansible_hostname #系統的主機名
ansible_fqdn #系統的全名
ansible_machine #系統的架構
ansible_memory_mb #系統的內存信息
ansible_os_family # 系統的家族
ansible_pkg_mgr # 系統的包管理工具
ansible_processor_cores #系統的cpu的核數(每顆)
ansible_processor_count #系統cpu的顆數
ansible_processor_vcpus #系統cpu的總個數=cpu的顆數*CPU的核數
ansible_python # 系統上的python
setup
ansible cache -m setup -a 'filter=*processor*' # 用於進行條件過濾。若是設置,僅返回匹配過濾條件的信息。 用到了正則
# 正則小結

* 匹配數量,表示0或者屢次
? 匹配數量,表示0或者1次
. 除換行符之外的全部字符 
+ 至少一次
[123abc] 匹配內容,or
() 分組
{m} 次數,出現m次
{m,} 至少m次
{m,n}出現m-n次

 - 條件判斷

   - when

     - 不一樣的系統,版本,環境,用戶

- hosts: db
  remote_user: root
  tasks:
  - name: createfile
    copy: content="擡頭望明月" dest=/tmp/a.txt
    when: a=="3"
  - name: cratefile
    copy: content="低頭思故鄉" dest=/tmp/a.txt
    when: a=="4"
ansible-playbook -e 'a="3"' p6.yml 

Ubuntu 安裝包的方式是apt-get

 - tags

   - 若是想單獨的執行某一個動做,例如只是複製配置文件可是不重啓服務,tags就是給任務打個標籤,未來只運行標籤就能夠

- hosts: web
  tasks:
  - name: installnginx
    yum: name=nginx
  - name: copyfile
    copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf
    tags: copyfile
  - name: start
    service: name=nginx state=started
ansible-playbook -t copyfile p7.yml 

 - 循環 with_item

   - 一次性建立多個

- hosts: web
  tasks:
  - name: crateuser
    user: name={{item}}
    with_items:
    - jam11
    - jam22
    - jam33

   - 嵌套循環

- hosts: web
  tasks:
  - name: crategroup
    group: name={{item}}
    with_items:
    - canglaoshi30
    - canglaoshi31
    - canglaoshi32
  - name: createuser
    user: name={{item.name}} group={{item.group}}
    with_items:
    - {'name':jam40,'group':canglaoshi30}
    - {'name':jam41,'group':canglaoshi31}
    - {'name':jam42,'group':canglaoshi32}

  - template:

   - 根據模塊文件動態生成對應的配置文件

- hosts: web
  tasks:
  - name: installredis
    yum: name=redis
  - name: copyfile
    template: src=/etc/redis.conf dest=/etc/redis.conf
  - name: start
    service: name=redis state=started
  
  vi /etc/redis.conf  
  配置文件: bind {{ ansible_default_ipv4.address }} 
copy和tamplate的區別

- copy模塊不替代參數
- template模塊替代參數

   - 相對路徑: 在當前目錄下新建一個templates目錄,而後把文件放在templates目錄裏面

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

 - handlers

   - 修改配置文件

- hosts: web
  tasks:
  - name: installredis
    yum: name=redis
  - name: copyfile
    template: src=redis.conf dest=/etc/redis.conf
    tags: copyfile
    notify: restart
  - name: start
    service: name=redis state=started
  handlers:
  - name: restart
    service: name=redis state=restarted

 

templates文件必須存放於templates目錄下,且命名爲 .j2 結尾
 yaml/yml 文件需和templates目錄平級,目錄結構以下:
./
├── temnginx.yml
└── templates
              └── nginx.conf.j2
相關文章
相關標籤/搜索