ansible

image

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

1.Ansible優勢:

  • Stupied Simple ,上手簡單,學習曲線平滑
  • SSH by default ,安全,無需安裝客戶端
  • 配置簡單、功能強大、擴展性強
  • 支持API及自定義模塊,可經過Python輕鬆擴展
  • 經過Playbooks來定製強大的配置、狀態管理
  • 提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺
  • 冪等性:一種操做重複屢次結果相同

2.ansible安裝

  1. yum install epel-release
  2. yum install ansible

3.ansible配置客戶端(無密碼登陸)

第一種方法:python

  1. server: ssh-keygen
  2. scp .ssh/id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys

第二種方法:git

1.vim /etc/ansible/hosts
2.ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=rootweb

4.ansible經常使用命令

  • ansible-doc -l #查看支持的模塊
  • ansible-doc -s MODEL_NAME #查看模塊用法
  • ansible命令應用基礎
  1. ansible [options]

-f forks:啓動併發線程數
-m model_name:要使用的模塊
-a args:特有的參數shell

  • ansible all -m ping #查看client端是否正常ping通
  • ansible webserver -m setup #查看客戶端信息
  • ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test' #copy文件到cient端
  • ansible webserver -m user -a "name=test state=present" #建立test用戶
  • ansible webserver -m user -a "name=test state=absent" #刪除test用戶
  • ansible webserver -m yum -a ‘name=epel-relese state=latest‘ #yum安裝
  • ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘ #中止httpd服務
  • ansible webserver -m script -a ‘/tmp/test.sh‘ #運行腳本
  • ansible webserver -m command 'date' #查看時間

5.playbook

  • tasks
  • variables
  • templates
  • handlers
  • roles

yaml介紹vim

yaml是一個可讀性高的用來表達資料序列的格式,yaml參考了其餘多種語言,包括:xml,c語言,python,perl以及電子郵件格式RFC2822等,ClarkEvans在2001年在首次發表了這種語言。安全

  • yaml的可讀性好
  • yaml和腳本語言的交互性好
  • yaml使用實現語言的數據類型
  • yaml有一個一致的信息模型
  • yaml易於實現
  • yaml能夠基於流程來處理
  • yaml表達能力強,擴展性好

示例1:基礎服務器

image

示例2:變量併發

image

示例3:迭代ssh

image

 示例4:觸發器notify

image

示例5:模板templates

image

roles介紹

什麼狀況下用到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
相關文章
相關標籤/搜索