ansible(三)

一.setup模塊(收集信息 )

1.ansible中的setup模塊能夠收集到的信息

ansible web -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 #系統cp
u的顆數
ansible_processor_vcpus #系統cpu的總個數=cpu的顆數*CPU的核數
ansible_python # 系統上的pythoni
ansible cache -m setup -a 'filter=*processor*' # 用來搜索

2.虛擬機的設置

 

處理器的數量表明CPU的顆數
每一個處理器的核心數量表明當前虛擬機可使用的內核數量

3.使用setup模塊時可使用正則過濾

anxible cache -m setup -a 'filter=*processor*' #找關於processor的
注:a.b和a.b的區別
a.*b和a*.b的區別

# . 表示匹配除換行以外的全部字符
# * 表示匹配量詞以前的字符出現0次或屢次

# a.*b 能夠匹配只要以a開頭,以b結尾的字符串就能夠
# a*.b 能夠匹配a.b和.b

 

二.ansible-playbook模塊

1.用when 來表示的條件判斷

僞代碼python

- hosts :wed
tasks:
- name: zzgbgn
  by: zzdong
  when: zz
- name: pzgbgn
  by: pzdong  
  when: pz

若是a=="3",就將「大弦嘈嘈如急雨」,寫入到web組下被管控機的/opt/.p2.yml中,若是a=="4",就將「小弦切切如私語」,寫入到web組下被管控機的/opt/.p2.yml中nginx

- hosts: web
remote_user: root#表明用root用戶執行,默認是root,能夠省略
tasks:
- name: createfile
  copy: content="大弦嘈嘈如急雨" dest=/opt/p2.yml
  when: a=='3'
- name: createfile
  copy: content="小弦切切如私語" dest=/opt/p2.yml
  when: a=='4'

語法校驗web

ansible-playbook  --syntax-check p2.yml

執行redis

ansible-playbook -e 'a="3"' p2.yml #大弦嘈嘈如急雨

應用環境:不一樣的系統,不一樣的版本,不一樣的環境,不一樣的下載方式,使用的下載語句的不一樣windows

2.標籤(只執行配置文件中的一個任務)

僞代碼架構

- hosts: web
tasks:
- name: wadong
  tieqiao: wadong
- name: toukan
  dong: toukan
  tags: bianqian

只執行配置文件中的一個任務dom

- 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 static=restarted

語法校驗工具

ansible-playbook  --syntax-check p3.yml

執行spa

ansible-playbook -t copyfile p3.yml 

3.循環with_items

目的:一次性作多個類似的事情rest

- hosts :wed
tasks:
- name: qichuang
  dong: {{ item }}
  with_items:
  - qichuang
  - chifan
  - shoushi

建立三個用戶

- hosts: web
tasks:
- name: createruser
  user: name={{ item }}
  with_items:
  - shy1
  - shy2
  - shy3
- name: creategroup
  group: name={{ item }}
  with_items:
  - group1
  - group2
  - group3  

語法校驗

ansible-playbook  --syntax-check p4.yml

執行

ansible-playbook p4.yml 

4.循環嵌套

用戶shy1的屬組是group1,用戶shy2的屬組是group2,用戶shy3的屬組是group3

- hosts: web
tasks:
- name: creategroup
  group: name={{item}}
  with_items:
  - group3
  - group4
  - group5
- name: createuser
  user: name={{item.user}} group={{item.group}}
  with_items:
  - {'user': shy3,'group': group3}
  - {'user': shy4,'group': group4}
  - {'user': shy5,'group': group5}

語法校驗

ansible-playbook  --syntax-check p5.yml

執行

ansible-playbook p5.yml 

 

5.template模塊(與copy模塊類似)

(1)讓web組的被管控機下載並啓動redis

管控機上下載redis包

yum install -y redis

編寫redis.conf配置文件

vi /etc/redis.conf
port 16379
bind {{ansible_default_ipv4.address}}

讓web組的被管控機下載並啓動redis

- 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

語法校驗

ansible-playbook  --syntax-check p.yml

執行

ansible-playbook p6.yml 

注:copy與template的區別

copy模塊不替代參數,template模塊替代參數
template的參數幾乎與copy的參數徹底相同
(2)相對路徑
- 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

注:在當前目錄(執行playbook的目錄)下創建一個templates文件夾,將配置文件放在templates中,就可使用相對路徑了

6.handlers(觸發事件)

notify:觸發
handlers:觸發的動做

使用上場景:修改配置文件時

注:正常狀況時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

執行

ansible-playbook -t copyfile p7.yml

結果:複製文件並重啓

三.roles

1.做用

經過規劃角色來實現備份

2.優勢

目錄結構特別清晰
能夠重複調用別的用戶建立的任務

3.使用

 

注:通常狀況下將roles寫在/etc/ansible/roles中,也能夠寫在其餘任意位置(寫在其餘位置要本身手動創建一個roles文件夾)

使用實例
mkdir roles #建立一個roles文件夾
cd roles #進入該目錄
mkdir web #分別建立三個與ansible組名相同的文件夾
mkdir db
mkdir cache
mkdir -pv web/{templates,files,tasks,vars} #templates:專門放置配置文件的文件夾,files:專門放置不須要傳參的文件夾,tasks:用來保存任務,vars:用來保存變量
cd web/tasks #進入到tasks文件夾,編寫任務(將多個任務拆開編寫)

vi install.yml(具體任務的文件)

- name: install
  yum: name=redis

vi copyfile.yml(具體任務的文件)

- name: copyfile
  copy: src=redis.conf.j2 dest=/etc/redis.conf
  tags: copyfile
  notify: restart

注:jinjia2的後綴名是.j2

vi start.yml(具體任務的文件)

- name: start
  service: name=redis state=started

vi main.yml(執行以上三個文件的文件)

- import_tasks: install.yml
- import_tasks: copyfile.yml
- import_tasks: start.yml

準備copyfile.yml的配置文件(放到templates文件夾中)

cp /root/yaml/templates/redis.conf templates/redis.conf.j2
cd templates/redis.conf.j2

有觸發事件的狀況

cd web
mkdir handlers
vi handlers/main.yml

main.yml

- name: restart
  service: name=redis state=started

調用(web.yml在哪寫均可以)

vi web.yml
- hosts:
  remote_user: root
  roles:
  - web

語法校驗

ansible-playbook  --syntax-check web.yml

執行

ansible-playbook web.yml 

4.目錄結構

- roles
  - web
    - templates
      - redis.conf.j2
    - files
    - tasks
      - main.yml(執行文件)
      - install.yml
      - copyfile.yml
      - start.yml
    - vars
    - handlers
      - main.yml(copyfile.yml的觸發事件)
  - cache
  - db
    - tasks
      -createuser.yml
- web.yml  

5.經過roles調用別人的任務(實現相互之間的調用)

準備任務

cd db
mkdir tasks
vi tasks/createuser.yml

createuser.yml

- name: createuser
  user: name=shy20

在web中執行db中的任務

cd web
vi tasks/main.yml

main.yml

- import_tasks: install.yml
- import_tasks: copyfile.yml
- import_tasks: start.yml
- import_tasks: roles/db/createuser.yml #加上這句話

語法校驗

ansible-playbook  --syntax-check web.yml

執行

ansible-playbook web.yml 

####

四.同步時間

同步時間的模塊

yum install -y ntp
ntpdate time.windows.com #同步時間
cp /user/share/zoneinfo/Asia/shanghai /etc/localtime #同步爲上海時間
注:yum安裝多個包
ansible web -m yum -a 'name=wget,lrzsz' #用逗號隔開
相關文章
相關標籤/搜索