Ansible:Ansible的核心程序
Host Lnventory:記錄了每個由Ansible管理的主機信息,信息包括ssh端口,root賬號密碼,ip地址等等。能夠經過file來加載,能夠經過CMDB加載
Playbooks:YAML格式文件,多個任務定義在一個文件中,使用時能夠統一調用,「劇本」用來定義那些主機須要調用那些模塊來完成的功能.
Core Modules:Ansible執行任何管理任務都不是由Ansible本身完成,而是由核心模塊完成;Ansible管理主機以前,先調用core Modules中的模塊,而後指明管理Host Lnventory中的主機,就能夠完成管理主機。
Custom Modules:自定義模塊,完成Ansible核心模塊沒法完成的功能,此模塊支持任何語言編寫。
Connection Plugins:鏈接插件,Ansible和Host通訊使用php
第一種方法:python
第二種方法:git
1.vim /etc/ansible/hosts
2.ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=rootweb
-f forks:啓動併發線程數
-m model_name:要使用的模塊
-a args:特有的參數shell
yaml介紹vim
yaml是一個可讀性高的用來表達資料序列的格式,yaml參考了其餘多種語言,包括:xml,c語言,python,perl以及電子郵件格式RFC2822等,ClarkEvans在2001年在首次發表了這種語言。安全
示例1:基礎服務器
示例2:變量併發
示例3:迭代ssh
示例4:觸發器notify
示例5:模板templates
什麼狀況下用到roles
假如咱們如今有3個被管理主機,第一個要配置成httpd,第二個要配置成php服務器,第三個要配置成MySQL服務器。咱們如何來定義playbook?
第一個play用到第一個主機上,用來構建httpd,第二個play用到第二個主機上,用來構建php,第三個play用到第三個主機上,用來構建MySQL。這些個play定義在playbook中比較麻煩,未來也不利於模塊化調用,不利於屢次調。好比說後來又加進來一個主機,這個第4個主機既是httpd服務器,又是php服務器,咱們只能寫第4個play,上面寫上安裝httpd和php。這樣playbook中的代碼就重複了。
roles: roles的做用是減小代碼的複寫 [root@localhost ~]# tree playbooks/ playbooks/ ├── roles │ ├── dbservers │ │ ├── files │ │ │ └── httpd.conf │ │ ├── handlers │ │ │ └── main.yaml │ │ ├── tasks │ │ │ └── main.yaml │ │ ├── templates │ │ │ └── httpd.conf │ │ └── vars │ │ └── main.yaml │ └── webservers │ ├── files │ ├── handlers │ ├── tasks │ ├── templates │ └── vars └── site.yaml
site.yml - hosts: webservers remote_user: root roles: - websrvs - dbsrvs 將文件拷貝到files目錄下 cp /etc/httpd/conf/httpd.conf /root/ansible_playbooks/roles/websrvs/files/
ansible的相關命令及使用:
playbooks:
若是用模塊形式通常有冪等性,若是用shell或者command沒有冪等性
playbooks至關因而shell腳本,能夠把要執行的任務寫到文件當中,一次執行,方便調用
tasks:一個task至關因而一個play
varibles: 變量,必定定義,多處調用
template:模板,能夠區分不一樣主機的特色
handlers:觸發器,依賴於前一個任務,前一個任務若是執行改變,那麼就會觸發handlers
定義playbook任務:
- hosts: testhosts remote_user: root vars: - file: httpd.conf tasks: - name: copy httpd.conf copy: src=/root/{{ file }} dest=/etc/httpd/conf/{{ file }} - name: restart httpd service: name=httpd state=restarted
定義變量:
在yaml文件當中傳入模板變量:{{變量名}}
第一種:
vars:
- file: httpd.conf
第二種:
vim /etc/ansible/hosts
[testhosts:vars]
file=httpd.conf
packages=tree
第三種
執行playbook文件時候給與變量 --extra-vars
ansible-playbook test.yaml --extra-vars "touch_file=test.txt"
註冊變量:
register註冊變量:把date命令輸出的結果賦予給date_output
- hosts: 192.168.254.10 remote_user: root tasks: - name: get date command: date register: date_output - name: echo date_output shell: "echo {{date_output.stdout}}>/tmp/a.txt"
一、when語句:
when條件語句:能夠根據setup顯示出客戶端信息爲依據來判斷
- hosts: 192.168.254.12 remote_user: root tasks: - name: echo date_output shell: "touch /tmp/a.txt" when: ansible_distribution=='CentOS' and ansible_distribution_major_version=='8'
二、異常處理:
ignore_errors:若是任務出錯,直接跳過,不會影響其餘任務
- hosts: 192.168.254.12 remote_user: root tasks: - name: add several user command: touch1 a.txt ignore_errors: yes
三、循環語句:
第一種:{{ item }}:循環建立
- hosts: 192.168.254.12 remote_user: root tasks: - name: add many users user: name={{ item }} state=present with_items: - user1 - user2 - user3 - user4 第二種: - hosts: 192.168.254.12 remote_user: root tasks: - name: add several user user: name={{item.name}} state=present groups={{item.groups}} with_items: - { name: 'testuser1', groups: 'wheel'} - { name: 'testuser2', groups: 'root'}
四、觸發器:
handlers:若是執行的任務被改變那麼會觸發handlers的任務
- hosts: testhosts remote_user: root tasks: - name: copy httpd.conf copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restarted httpd service handlers: - name: restarted httpd service service: name=httpd state=restarted rolse:
五、模板拷貝:
template,用來區分不一樣客戶端上的特性
1.copy模塊替換成template
2.vim httpd.conf編輯要拷貝的文件,把不一樣的地方定義成變量形式{{變量名}}
3.vim /etc/ansible/hosts 在主機後面定義變量的值:變量名=變量值
- hosts: testhosts remote_user: root tasks: - name: copy httpd.conf template: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restarted httpd service handlers: - name: restarted httpd service service: name=httpd state=restarted