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*' # 用來搜索
處理器的數量表明CPU的顆數
每一個處理器的核心數量表明當前虛擬機可使用的內核數量
anxible cache -m setup -a 'filter=*processor*' #找關於processor的
a.*b和a*.b的區別
# . 表示匹配除換行以外的全部字符
# * 表示匹配量詞以前的字符出現0次或屢次
# a.*b 能夠匹配只要以a開頭,以b結尾的字符串就能夠
# a*.b 能夠匹配a.b和.b
僞代碼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
僞代碼架構
- 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
目的:一次性作多個類似的事情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
用戶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
管控機上下載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的參數徹底相同
- 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中,就可使用相對路徑了
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寫在/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
- 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
準備任務
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 #同步爲上海時間
ansible web -m yum -a 'name=wget,lrzsz' #用逗號隔開