/etc/ansible/ansible.cfg 主配置文件,配置ansible工做特性
/etc/ansible/hosts 主機清單
/etc/ansible/roles/ 存放角色的目錄linux
/usr/bin/ansible 主程序,臨時命令執行工具
/usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy 下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook 定製自動化任務,編排劇本工具
/usr/bin/ansible-pull 遠程執行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基於Console界面與用戶交互的執行工具nginx
Ansible 配置文件/etc/ansible/ansible.cfg (通常保持默認)
web
ansible #主程序命令,臨時執行命令用 ansible-doc #顯示模塊幫助 ansible-playbook #將一系列的任務寫在一塊兒,稱爲:劇本 ansible-vault #管理加密、解密yml文件 ansible-console #2.0+版本新增,可交互執行命令,支持tab ansible-galaxy #鏈接 https://galaxy.ansible.com 下載相應的roles ansible-pull #推送命令至遠程,效率無限提高,對運維要求較高
ansible-doc
shell
Fetch:從客戶端取文件至服務器端,copy相反,拉取目錄可先tar打包
ansible srv -m fetch -a 'src=/root/a.sh dest=/data/scripts'apache
Hostname:管理主機名
ansible all -m hostname -a "name=websrv"編程
Yum:管理包
ansible srv -m yum -a 'name=httpd state=latest' #安裝
ansible srv -m yum -a 'name=httpd state=absent' #刪除 vim
Service:管理服務
ansible srv -m service -a 'name=httpd state=stopped' #中止
ansible srv -m service -a 'name=httpd state=started' #啓動
ansible srv –m service –a 'name=httpd state=reloaded' #重讀配置文件
ansible srv -m service -a 'name=httpd state=restarted' #重啓centos
User:管理用戶
ansible srv -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 '
ansible srv -m user -a 'name=user1 state=absent remove=yes'
#刪除用戶及家目錄等數據bash
Group:管理組
ansible srv -m group -a "name=testgroup system=yes"
ansible srv -m group -a "name=testgroup state=absent" 服務器
將多個play組織在一個playbook中,便可以讓它們聯同起來按事先編排的機制同唱一臺大戲
運行playbook:
ansible-playbook <filename.yml> ... [options] 選項: --check 只檢測可能會發生的改變,但不真正執行操做 --list-hosts 列出運行任務的主機 --limit 主機列表 只針對主機列表中的主機執行 -v,-vv,-vvv 顯示過程,更詳細 例: ansible-playbook file.yml --check #只檢測不運行 ansible-playbook file.yml ansible-playbook file.yml --limit websrvs
- (1)在單一檔案中,可用連續三個連字號(——)區分多個檔案。另外,還有選擇性的連續三個點號( ... )用來表示檔案結尾
- (2)次行開始正常寫Playbook的內容,通常建議寫明該Playbook的功能
- (3)使用#號註釋代碼
- (4)縮進必須是統一的,不能空格和tab混用
- (5)縮進的級別也必須是一致的,一樣的縮進表明一樣的級別,程序判別配置的級別是經過縮進結合換行來實現的
- (6)YAML文件內容和Linux系統大小寫判斷方式保持一致,是區別大小寫的,k/v的值均需大小寫敏感
- (7)k/v的值可同行寫也可換行寫。同行使用:分隔
- (8)v但是個字符串,也但是另外一個列表
- (9)一個完整的代碼塊功能需最少元素需包括 name: task
- (10)一個name只能包括一個task
- (11)YAML文件擴展名一般爲yml或yaml **
- Hosts #執行的遠程主機列表
- Tasks #任務集
- Varniables #內置變量或自定義變量在playbook中調用
- Templates #模板,可替換模板文件中的變量並實現一些簡單邏輯的文件
- Handlers #和notity結合使用,由特定條件觸發的操做,知足條件方纔執行,不然不執行
- tags #標籤 指定某條任務執行,用於選擇運行playbook中的部分代碼。ansible具備冪等性,所以會自動跳過沒有變化的部分,即使如此,有些代碼爲測試其確實沒有發生變化的時間依然會很是地長。此時,若是確信其沒有變化,就能夠經過tags跳過此些代碼片段
能夠是以下形式:
www.bigboss.com www.bigboss1.com:www.bigboss2.com 192.168.1.2 192.168.1.* web:db #兩個組的交集 web:&db #兩個組的並集 web:!db #在web組但不在db組中 例: - host: web:db
此外,甚至能夠在sudo時使用sudo_user指定sudo時切換的用戶
- hosts: websrvs remote_user: root tasks: - name: test connection ping: remote_user: bigboss sudo: yes #默認sudo爲root sudo_user:wang #sudo爲wang
例:
tasks: - name: disable selinux command: /sbin/setenforce 0 #若是命令或腳本的退出碼不爲零,可使用以下方式替代 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand || /bin/true #或者使用ignore_errors來忽略錯誤信息: tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand ignore_errors: True
handlers和notify結合使用觸發條件:
- hosts: websrvs remote_user: root tasks: - name: Install httpd yum: name=httpd state=present - name: Install configure file copy: src=files/httpd.conf dest=/etc/httpd/conf/ notify: restart httpd #當copy動做實現時,就會執行handlers的動做 - name: ensure apache is running service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd status=restarted
http.yml - hosts: web remote_user: root task: - name: Install httpd yum: name=httpd - name: copy configure file copy: src=file/httpd.conf dest=/etc/httpd/conf/ tags: conf #設置tags名爲conf - name: start httpd tags:service service: name=httpd state=started enabled=yes ansible-playbook -t conf httpd.yml #調用名爲conf的tags
文本文件,嵌套有腳本(使用模板編程語言編寫)
Jinja2語言,使用字面量,有下面形式
字符串:使用單引號或雙引號
數字:整數,浮點數
列表:[item1, item2, ...]
元組:(item1, item2, ...)
字典:{key1:value1, key2:value2, ...}
布爾型:true/false
算術運算:+, -, *, /, //, %, **
比較操做:==, !=, >, >=, <, <=
邏輯運算:and, or, not
流表達式:For If When
templates功能:根據模塊文件動態生成對應的配置文件
yaml/yml 文件需和templates目錄平級,目錄結構以下:
[root@centos7 ~]# cat nginx.conf.j2
user nginx;
worker_processes {{ ansible_processor_vcpus*2 }};
#setup模塊中ansible_processor_vcpus變量爲CPU核心數,[root@centos7 ~]# vim temnginx.yml
- hosts: web remote_user: root tasks: - name: template config to hosts template: src=nginx.conf.j2 dest=/etc/nginx/nginx.confansible-playbook temnginx.yml
when: 條件測試
若是須要根據變量、facts或此前任務的執行結果來作爲某task執行與否的前提時要用到條件測試,經過when語句實現,在task中使用,jinja2的語法格式在task後添加when子句便可使用條件測試;when語句支持Jinja2表達式語法
#當setup模塊中ansible_os_family等於RedHat時執行關機
tasks:
name: shutdown redhat system
command: /sbin/shutdown -h now
when: ansible_os_family == 'RedHat'#根據系統版原本安裝軟件
tasks:- name: install nginx to centos7
yum: name=nginx
when: ansible_distribution_major_version == '7'- name: install httpd to centos6
yum: name=httpd
when: ansible_distribution_major_version == '6'
迭代:with_items