Linux中級之ansible概念及hoc命令行調用模式

1、Ansible簡介html

ansible是新出現的開源的自動化運維工具,基於Python開發,集合了衆多運維工具(puppetcfenginecheffuncfabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。python

ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:shell

(1)connection plugins:鏈接插件,AnsibleHost通訊使用,負責和被監控端實現通訊;編程

(2)host inventory:記錄了每個由Ansible管理的主機信息,信息包括ssh端口,root賬號密碼,ip地址等等。能夠經過file來加載,能夠經過CMDB加載;指定操做的主機,是一個配置文件裏面定義監控的主機;vim

(3)、各類模塊核心模塊、command模塊、自定義模塊;安全

Core ModulesAnsible執行任何管理任務都不是由Ansible本身完成,而是由核心模塊完成;Ansible管理主機以前,先調用core Modules中的模塊,而後指明管理Host Lnventory中的主機,就能夠完成管理主機。併發

Custom Modules:自定義模塊,完成Ansible核心模塊沒法完成的功能,此模塊支持任何語言編寫。框架

(4)、藉助於插件完成記錄日誌郵件等功能;運維

(5)playbooks:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。ssh

(6)AnsibleAnsible的核心程序

ansible的特色:

(一)批量管理工具

(二)模塊

(三)python

(四)無終端,是基於ssh實現管理的

(五)也支持主從模式

(六)也支持playbook

Ansible的優勢:

1Stupied Simple ,上手簡單,學習曲線平滑

2SSH by default ,安全,無需安裝客戶端

3)配置簡單、功能強大、擴展性強

4)支持API(應用程序接口)及自定義模塊,可經過Python輕鬆擴展

5)經過Playbooks來定製強大的配置、狀態管理

6)提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺(收費產品,通常不多用)

7冪等性:一種操做重複屢次結果相同

2、ansible的安裝

1、安裝

yum install epel-release           #須要安裝epel

yum install ansible -y

2、查看ansible的版本信息

ansible --version

3、查看ansible配置文件

[root@ren5 ~]# rpm -qc ansible

/etc/ansible/ansible.cfg

/etc/ansible/hosts

4、調用模塊(python

paramiko   #模擬ssh協議批量管理主機

jinja2            #模板語言,主要用來傳遞變量

yaml             #至關因而一種編程語言

5、控制方式:

1)免密鑰:key-gen

server: ssh-keygen

scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys

2)用戶密碼:

參數形式:ansible_ssh_user=root; ansible_ssh_pass=root ansible_ssh_port=22

host inventory:記錄着客戶端的ip信息

[root@ren5 ~]# vim /etc/ansible/hosts

在文件最後添加:

[test_ren1]

192.168.11.4 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22

192.168.11.6 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22

注意:/root/.ssh/known_hosts需在此文件中有ssh鏈接的記錄纔可

或者取消/etc/ansible/ansible.cfg文件中#host_key_checking = False的註釋

若是用了密鑰登陸,則密碼登陸無效;也就是說這兩種方式沒法混合使用

6、調用ansible的三種模式:

hoc:命令行

playbooks:劇本|腳本

roles:角色

3、Ansible使用基本格式

1、使用格式

[root@ren5 ~]# ansible

Usage: ansible <host-pattern> [options]

2、參數:

-m:(--module-name=MODULE_NAME)指定模塊名稱

-a:(--args=MODULE_ARGS)指定模塊的具體參數

-s:以sudo的方式運行操做

-i:(--inventory=INVENTORY)指定被管理節點的主機列表

-f:(--forks=FORKS)一批鏈接幾個主機進行操做(默認是5個主機,最高255)控制併發數

             線程是最小的調度單位,進程是最小的管理單元

ansible-doc -l                          #查看所支持的模塊

ansible-doc -s MODEL_NAME   #模塊的具體用法和參數

ansible all --list-hosts    #查看全部主機

4、ansible管理節點的三種方法

1、指定主機組名

[root@ren5 ~]# ansible test_ren1 -a "ip a"         #默認調用command模塊

2、指定一個特定IP

[root@ren5 ~]# ansible 192.168.11.4 -a "ls"

3、使用all

[root@ren5 ~]# ansible all -a "date"

5、配置文件

ansible配置文件:(/etc/ansible/ansible.cfg)

     14#inventory      = /etc/ansible/hosts                主機管理資產清單

      15#library        = /usr/share/my_modules/         ansible操做的動做,不管是本地或者遠程,都使用一小段代碼來執行,這小段代碼稱之爲模塊,這個library就是用來存放這些模塊的路徑

      16#module_utils   = /usr/share/my_module_utils/             

      17#remote_tmp     = ~/.ansible/tmp

      18#local_tmp      = ~/.ansible/tmp

      20#forks          = 5                            ansible默認操做主機的併發數

      21#poll_interval  = 15                                                 

      22#sudo_user      = root                    這是默認的執行命令的用戶,也能夠在playbook中從新設置這個參數

      23#ask_sudo_pass = True                 用來控制Ansible playbook 在執行sudo以前是否詢問sudo密碼.默認爲no

      24#ask_pass      = True                     Ansible 劇本playbook 是否會自動默認彈出彈出密碼.默認爲no

      25#transport      = smart

      26#remote_port    = 22                     這個指定鏈接被管理節點的端口,默認是22,除非設置了特殊的ssh端口

      27#module_lang    = C                       默認模塊和系統之間通訊的計算機語言,默認爲’C’語言

      28#module_set_locale = False                  

      61#host_key_checking = False            這是設置是否檢查ssh祕鑰,能夠設置爲FalseTrue

      103#timeout = 10                                ssh鏈接超時時間

      111#log_path = /var/log/ansible.log        ansible默認是不記錄日誌的,若是想把ansible系統輸出的日誌存放到文件中能夠開啓這個選項

      136#private_key_file = /path/to/file         使用ssh公鑰私鑰登陸系統的時候,使用的祕鑰路徑

      .......

      還有更多的配置項,你們能夠參考官方文檔,以下:             http://docs.ansible.com/ansible/latest/intro_configuration.html#private-key-file

6、經常使用模塊

1ping模塊:指定ansible serverclient的連通性,測試成功會返回「pong

[root@ren5 ~]# ansible all -m ping

2command模塊:命令模塊,默認模塊,用於在遠程執行命令(不支持正則和管道符)

[root@ren5 ~]# ansible test_ren1 -m command -a "date '+%F %T'"

3cron模塊:管理定時任務

      state:(prsent:安裝;absent:移除)

      dayenvhourjobminutemonthnamestateuserweekday

[root@ren5 ~]# ansible test_ren1 -m cron -a "minute=*/5 job='echo HELLO' state=present name=cron_test1"

[root@ren5 ~]# ansible test_ren1 -a "crontab -l"

[root@ren5 ~]# ansible test_ren1 -a "crontab -r"

4user模塊:管理用戶帳戶

      name=:指明建立的用戶的名字

      remove=USERNAMEstate=absent

      state=present        #建立用戶          shell=:指定用戶shell類型

      #ansible testhosts -m user -a 'name=user1 uid=250 group=group250'

5group模塊:添加或者刪除用戶組

      #ansible testhosts -m group -a 'name=group250 gid=250'

6copy模塊:複製本地文件到遠程主機

      src=:定義本地源文件路徑

      dest=:定義遠程目標文件路徑

[root@ren5 ~]# ansible test_ren1 -m copy -a "src=/root/a.txt dest=/root/a.txt"

      content=:取代src,表示直接用此處指定的信息生成爲目標的內容

      #ansible all -m copy -a 'content=nihao dest=/root/a.txt'

7service模塊:管理程序服務,指定運行狀態

[root@ren5 ~]# ansible all -m service -a "name=httpd state=restarted"

[root@ren5 ~]# ansible all -m shell -a "ss -tnl |grep 80"

      enabled=:是否開機自動啓動,取值爲true或者false

      name=:服務名稱

      state=:狀態,取值有started,stopped,restarted

8shell模塊:和command模塊相似,在遠程主機上運行命令,支持變量等符號,尤爲是在用到管道符等功能的複雜命令

      [root@ren5 ~]# ansible all -m shell -a "ls /tmp |wc -l"

9script模塊:將本地腳本複製到遠程主機並運行(無需加多餘參數,只須要在-a後面加上本地腳本路徑便可)

      ansible testhosts -m script -a '/root/a.sh'

10yum模塊:安裝程序包

      [root@ren5 ~]# ansible all -m yum -a "name=httpd state=present"

      [root@ren5 ~]# ansible all -m yum -a "list=httpd"

      name=:指定要安裝的程序包,能夠帶上版本號

      state=present,latest,installed表示安裝,absent,removed表示卸載

      list=:查看安裝的程序包

11setup模塊:收集遠程主機的facts

      每一個被管理的節點在接受並運行管理命令以前,會將本身主機相關信息,如操做系統版本,ip地址等報告給遠程ansible主機

      [root@ren5 ~]# ansible all -m setup

12file模塊:設置文件屬性

[root@ren5 ~]# ansible all -m file -a "state=touch path=/root/test.txt"

相關文章
相關標籤/搜索