ansile作爲去除安裝agent的自動化工具,通過ssh協議的簡單功能強大的自動化工作。
在ansile使用的過程中,有三種使用方式,個有特點。
1、ansible自行一次性任務,即執行命令如:
ansible 10.59.87.11 -m ping
ansible 10.59.87.11 -m copy -a "src=/etc/issue dest=/tmp/"
執行的方式是:
anbile + 執行的主機可以多種方式匹配(默認在./etc/ansible/hosts中)+ -m 模塊 -a "模塊的屬性"
2、ansible-playbook 執行方式,將任務都寫在一個yml文件中,yaml文件可簡單可複雜
如執行:ansible-playbook /tmp/scp.yml
等於 ansible 10.59.87.11 -m copy -a "src=/etc/issue dest=/tmp/" 這個效果,yml文件內容如下
- hosts: 10.59.87.11
remote_user: root
vars:
var_has: none
tasks:
- name: scp issue file
copy:
src: /etc/issue
dest: /tmp/
注意:
1、hosts 指定的主機或者主機組一定要在/etc/ansible/hosts中或者通過-i 指定的inventory 文件中
2、如果裏面用到template模塊,則模塊的路徑需要在執行的$(dirname /tmp/scp.yml ) 目錄下的templates 目錄下
3、如果是有notify的使用,handlers可以是目錄也可以是直接 handlers關鍵字指定
ansible-playbook 常用的選項
-C, --check
--verbose 執行顯示詳情
--syntax-check 語法檢查
-D 打印更改的diff
--list-hosts
--list-tags
--list-tasks
-i INVENTORY, --inventory-file=INVENTORY 默認在 /etc/ansible/hosts 文件中
來一個httpd的安裝的yml文件
- hosts: 10.59.87.11
remote_user: root
vars:
httpd_port: 80
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: install configure file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: reload httpd
- name: stop httpd servcie
service: name=httpd state=stopped
tags:
- stop
handlers:
- name: reload httpd
service: name=httpd state=reloaded
cat templates/httpd.conf.j2 (查看jinjia2文件)
3、ansible-playbook + roles 方式
如果使用ansible管理公司服務器的配置初始化服務,這種模式是必須的,是分模塊管理的。
ansible的目錄結構:
標紅的是常用的。
如:生產環境中的一個nginx模塊roles
roles的目錄是通過 /etc/ansible/ansible.cfg 文件決定的,默認是在roles_path = /etc/ansible/roles
如:
- hosts: web-group
tags:
- hosts
roles:
- hosts
如執行:
ansible-playbook /etc/ansible/top.yml
會對web-group的主機執行roles問hosts下的yml文件。 hosts roles目錄下默認會找tasks目錄下的main.yml文件。
main.yml文件中通過include,導入tasks目錄下的其他.yml文件。
關於ansile的變量的優先級。
ansible變量優先級高低(從高往低):
ansible-playbook 執行yml任務的時候-e 參數指定的變量
ansible-playbook yml文件中vars: 中定義的變量
inventory 中host後面跟的變量定義的變量
inventory 中[:vars]中全局組定義的變量