ansible學習1

1、常見的自動化運維工具html

1.功能上分類node

OS Provisioning:PXE,cobbler:參考連接 http://renjunjie622.blog.51cto.com/2913680/1782190python

        物理機:PXE、Cobblermysql

        虛擬機:Image Templates(鏡像模板)sql


OS Config:程序包管理、用戶管理、配置文件、服務管理、cron任務等等;shell

        puppet (ruby) vim

        saltstack (python)ruby

        chefbash

        cfenginebabel

Task Exec:

        fabric,func,saltstack


Deployment:

        fabric



2.從代理上分類:

        agent: puppet, func

        agentless: ansible, fabric(運行ssh服務)


2、ansible介紹

1.ansible特性:

    1.高度模塊化,藉助模塊完成各類任務

    2.agentless,即無需在被控制端安裝agent

    3.默認基於ssh協議向被控制端發送操做指令

       基於密鑰認證

       在inventory文件中指定帳號和密碼       

    4.一系列任務執行可寫成劇本(playbook)

    5.具備冪等性:不會重複執行相同操做,好比不會重複安裝軟件

    6.主從模式:master:ansible,ssh client  slave:ssh server


2.ansible的核心組件:

    ansible core(核心程序)

    host inventory(主機列表)

    core modules(核心模塊)

    custom modules(自定義模塊)

    playbook(yaml,jinjia2)(劇本)

    connection plugin(鏈接插件,負責和被控制端通訊)

    plugin(其餘插件:郵件發送、日誌)


3.安裝

ansible依賴於Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。

1.編譯安裝
解決依賴關係
# yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
# tar xf ansible-1.5.4.tar.gz
# cd ansible-1.5.4
# python setup.py build
# python setup.py install
# mkdir /etc/ansible
# cp -r examples/* /etc/ansible

2.rpm包安裝(配置epel yum源)   #建議採用
# yum install ansible

 3.ansible重要文件               

配置文件:/etc/ansible/ansible.cfg 
主機列表文件:/etc/ansible/hosts


4.root基於密鑰,免密登入

(1)yum -y install openssh-clients 
(2)ssh-keygen -t rsa
(3)ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.193.129

具體解釋參見:http://nxyboy.blog.51cto.com/10511646/1944205


3、經常使用模塊與命令

1.命令格式:

ansible命令基礎:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
	-f forks: 啓動的併發線程數
	-m module_name:
	-a args:
	   args:   key=value
	-i 指定hosts文件,不使用默認


2.查看模塊幫助:

ansible-doc  -l      #列出ansible所支持的模塊
ansible-doc  -s  MODULE_NAME  #查看指定模塊
ansible-doc  -s  yum


3.經常使用模塊module_name介紹

1.command  命令模塊,默認模塊,用於在遠程執行命令	
	 -a 'COMMAND'	
#ansible node2 -m command -a "date"


2.user  管理用戶   	
	-a 'name= state={present|absent} system=  uid='
                name=:指明用戶名  password=加密串
#ansible node2 -m user -a 'name=mysql uid=306 system=yes group=mysql'


3.group	    	
	-a 'name= gid= state= system='
			 state:present,absent
#ansible node2 -m group -a 'name=mysql gid=306 system=yes state=present '


4.cron	週期性任務計劃模塊	
	-a 'name= minute= hour= day= month= weekday= job= user= state='
#ansible node2 -m cron -a 'minute="*/10" job="/bin/echo hahaha" name="test" state="present" '          


5.copy(複製文件)
	-a 'dest= src= mode= owner= group=   content='
                src=:本地源文件路徑(能夠相對和絕對路徑)
		dest=:目標文件路徑(絕對路徑)
		content=: 直接生成文件內容,取代src(不能與src同時存在)
		force: 當設置爲yes時,若是目標主機存在該文件,但內容不一樣,會強制覆蓋。默認爲yes
                backup: 在覆蓋以前備份源文件,yes/no
#ansible node2 -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640 '
#ansible node2 -m copy -a 'content="Hello\n  hello\n " dest=/tmp/hello.ansible '


6.file(設置文件屬性) 
	-a 'path= mode= owner= group= state={directory|link|present|absent} src='
		path=:指定文件路徑,可使用name或dest來替換
		src=:被連接的源文件路徑,只應用於 state=link 的狀況
		    建立文件的連接:
			src=:指定源文件   path=:指定連接文件
	        state=:後面接文件的各類狀態,如directory, link, hard, file及absent(刪除)
                  directory: 若是目錄不存在,則建立目錄
                  file: 即便文件不存在,也不會被建立
                  absent: 刪除目錄、文件或連接文件
                  touch: 若是文件不存在,則會建立一個新文件,若是存在,則更新其時間戳
                  link: 建立軟連接
                  hard:硬連接

#ansible node2 -m file -a 'owner=mysql group=mysql mode=644 path="/tmp/fstab.ansible"'
#ansible node2 -m file -a ' path="/tmp/fstab.link"  src="/tmp/fstab.ansible" state=link '	
       
7.ping 測試遠程主機可否能鏈接,沒有參數
#ansible node2 -m ping


8.yum(安裝或卸載程序包)
	-a 'name= state={present|latest|absent}'
		name=指明要安裝的軟件包,能夠帶上版本號
#ansible node2 -m yum -a 'name=zsh  state=present'
          
             
9.service(指定程序運行狀態)
	-a 'name= state={started|stopped|restarted} enabled='
	    enabled=:是否開機自啓,取值爲true或false
		state=如今狀態
#ansible node2 -m service -a 'enable=true name=httpd state=started '


10.shell (管道,變量 複雜命令) 
	-a 'COMMAND'
#ansible node2 -m shell -a 'echo 123456 | passwd --stdin user1 '


11.script(本地腳本,複製到遠程主機上並運行)
		-a '/path/to/script' 
#ansible node2 -m script -a '/tmp/test.sh' 


12.setup(收集遠程主機的facts)
ansible-doc -s setup
#ansible node2 -m setup

playbook運行時,會自動調用setup模塊收集遠程主機的相關信息(稱爲facts,如操做系統版本、ip地址、cpu數量等),這些信息保存於變量中,可在playbook中引用。

咱們也可直接使用ansible命令直接獲取這些變量信息:
ansible all -m setup [-a 'filter=ansible_eth[0-2]']
       filter:過濾器,表示只返回與指定shell風格通配符匹配的變量信息
ansible all -m setup --tree /tmp/facts
       --tree:表示將收集的facs以樹狀的結構輸入到指定文件中
       
[root@node1 ~]#  ansible node2 -m setup -a 'filter=ansible_fqdn'
192.168.193.129 | SUCCESS => {
    "ansible_facts": {
        "ansible_fqdn": "node2"
    }, 
    "changed": false
}
       
       
13.template
 template是使用了Jinjia2格式做爲文件模版,進行文檔內變量的替換的模塊。它的每次使用都會被ansible標記爲」changed」狀態。       
      舉個例子:
         vim /root/httpd.conf
           ...
           ServerName {{ ansible_fqdn }}
#ansible node2 -m template -a 'src=/root/httpd.conf desc=/etc/httpd/conf/httpd.conf

當/root/httpd.conf文件被複制到第一個主機時,ServerName的值被替換成第一個主機的ansible_fqdn的值node2,而被複制到第二個主機時,ServerName的值會被替換成node3


14.synchronize
該模塊會調用rsync命令,用於將ansible機器的指定目錄推送到客戶機器 的指定目錄下
#ansible node2 -m synchronize -a 'src=/usr/local/src/ dest=/usr/local/src/ delete=yes compress=yes'

15.get_url
經常使用模塊,能夠實如今遠程主機上下載url到本地
#ansible node2 -m get_url -a 'url=http://xxx.com dest=/tmp'

更多模塊,參考http://www.361way.com/ansible-modules/4415.html
相關文章
相關標籤/搜索