Ansible的介紹node
ansible是一種自動化運維工具,基於paramiko開發的,而且基於模塊化工做,Ansible是一種集成IT系統的配置管理、應用部署、執行特定任務的開源平臺,它是基於python語言,由Paramiko和PyYAML兩個關鍵模塊構建。集合了衆多運維工具的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能.ansible是基於模塊工做的,自己沒有批量部署的能力.真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架.ansible不須要在遠程主機上安裝client/agents,由於它們是基於ssh來和遠程主機通信的.python
Ansible的基本價架構linux
Ansible的下載:web
能夠經過源碼下載安裝,也能夠用yum安裝,這裏我用比較方便的yum安裝。redis
yum -y install ansible
下載完成後,咱們須要和被控主機相和呼應,這就用到了ssh無密碼登錄,個人博客裏有。作完這些後咱們就須要在主機清單裏添加被控主機的ip地址。shell
vim /etc/ansible/hosts 10.6.12.71#在最後一行添加主機IP地址
作完這些咱們就能夠經過ansible來控制其餘主機了!vim
ansible 10.6.12.71 -m ping#查看其餘主機網絡狀態
Ansible中比較重要的文件服務器
/ect/ansible/ansible.cfg----主配置文件網絡
/ect/ansible/hosts--------主機清單架構
/etc/ansible/roles/--------存放角色的目錄。角色就是好多playbook的集合
/usr/bin/ansible------主程序,臨時執行命令工具
/usr/bin/ansible-doc------查看配置模塊,模塊功能查看工具
/usr/bin/ansible- galaxy-------下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook-----制定自動化任務,編排劇本
/usr/bin/absible-pull------遠程執行命令工具
/usr/bin/ansible-vault----文件加密工具
/usr/bin/nsible-console-----基於console界面與用戶交互的執行工具
Ansible調用基本模塊
能夠經過Ansible --help來查看怎麼用這個命令。
ansible 10.6.12.71 -m ping -k#-m是指定調用什麼模塊,-k是交互輸入口令,建議作ssh無密碼登錄。
Anaible的文件之/etc/hosts,注意***在當ssh端口改變的是時候要指定ssh端口***
1.能夠添加單個主機的IP地址
2.能夠添加主機組,在主機組裏再添加主機ip能夠批量控制主機
3.進行命令測試
Ansible的主配置文件/etc/ansible/ansilnble.cng(通常保持默認)
[defaults] # some basic default values... #inventory = /etc/ansible/hosts#主機列表配置文件 #library = /usr/share/my_modules/#庫文件存放目錄 #module_utils = /usr/share/my_module_utils/#模塊路徑 #remote_tmp = ~/.ansible/tmp#臨時py命令文件存放在遠程主機目錄 #local_tmp = ~/.ansible/tmp#本機的臨時命令執行目錄 #forks = 5#默認併發數 #poll_interval = 15 #sudo_user = root#默認sudo用戶 #ask_sudo_pass = True#每次執行ansible敏玲是否詢問ssh密碼 #ask_pass = True #transport = smart #remote_port = 22 #module_lang = C #module_set_locale = False
#host_key_cheking=False#建議取消註釋,檢查對應服務器的host_key
#log_path=/var/log/ansible.log#日誌文件建議啓用
Ansible系列命令
ansible ansible-doc ansible- playbook ansible-vault
ansible-console ansible-galaxy ansible-pull
ansible-doc:顯示模塊幫助
ansible-doc [options] [modul..]
-a 顯示全部模塊的文檔
-I, --list 列出可用模塊
-s, --snippet顯示指定模塊的playbook片斷
示例:
ansible-doc -|列出全部模塊
ansible-doc ping查看指定模塊幫助用法
ansible-doc -s ping 查看指定模塊幫助用法
Ansible命令用法
例子:如下面這條命令爲例,須要作ssh無密碼登錄,而後須要給zr用戶sudo的權限,這樣才能夠訪問被控制端的目錄文件等等
受權能夠在visudo修改,將zr用戶加入到%whell組中,免密登錄的時候就修改visudo,而後增長這個%wheel ALL=(ALL) NOPASSWD: ALL
ansible 10.612.56 -a 'la /root' -u zr -k -b -K
當有多個主機組須要執行操做時:
Ansible命令執行過程
1.加載本身的配置文件 默認/etc/ansible/ansible.cfg
2.加載本身對應的模塊文件,如command
3.經過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳送至遠程服務器的對應執行用戶$HOME/.ansible/tmp/ansible-tmp-數字/xxx.py文件
4.給文件+x執行
5.執行並返回結果
6.刪除臨時py文件,sleep 0退出
Ansible的相關模塊:-m 指定模塊默認是command
以command爲例子:
- chdir#到一個目錄下執行命令時須要這個ansible all -a 'chdir=/etc/fs cat /etc/fstab' Change into this directory before running the command. [Default: (null)] version_added: 0.6 - creates#將一個文件存在將不進行下面的操做ansible all -a 'createst=/etc/fs cat /etc/fstab' A filename or (since 2.0) glob pattern, when it already exists, this step will *not* be run. [Default: (null)] = free_form The command module takes a free form command to run. There is no parameter actually named 'free form'. See the examples! - removes#若是不存在將不執行後續命令ansible all -a 'removes=/etc/fs cat /etc/fstab' A filename or (since 2.0) glob pattern, when it does not exist, this step will *not* = free_form The command module takes a free form command to run. There is no parameter actually named 'free form'. See the examples! - removes A filename or (since 2.0) glob pattern, when it does not exist, this step will *not* be run. [Default: (null)] version_added: 0.8 - stdin Set the stdin of the command directly to the specified value. [Default: None] version_added: 2.4 - warn If command_warnings are on in ansible.cfg, do not warn about this particular line if set to `no'. [Default: yes] type: bool version_added: 1.8
可是commdel這個模塊的缺點就是命令裏不能有管道、重定向等符號沒法處理,因此在須要的時候須要-m指定所須要的模塊。
Shell模塊:和command類似,用shell執行命令
Script:運行腳本
只須要在控制端寫好要運行的腳本,Script就會自動給其餘被控主機推送腳本。
ansible all -m script -a '/root/ansible/host.sh'
COPY模塊:ansible-doc -s copy查看選項參數
例子:修改selinux的狀態
[root@localhost ~]# ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes'
src是指定源 dest是指定目的 backup作複製的時候會備份
例子:在被控主機上直接生成文件
ansible all -m copy -a 'content="hello\nthanks\n" dest=/data/fs'#直接在被控主機生成內容爲
hello\nthanks\n的文件/data/fs1
Fetch模塊:從客戶端取文件至服務器端和cp是相反的
ansible src -m fetch -a 「src=/root/a.sh dast=/data/scripts」
file模塊:設置文件屬性
重要的參數state:能夠建立文件,目錄,和軟鏈接,具體和state的狀態有關
ansible srv -m file -a "pas=/root/a.sh owner=wang mode=755" ansible web -m file -a 'src=/app/testfile dest=/app/testfile-like state=link'#建立軟鏈接
ansible all -m file -a 'name=/data/g3 state=touch'#建立一個文件,對象是/data/g3
ansible all -m file -a 'name=/data/g3 state=absent'#刪除一個文件也能刪除文件夾,對象是/data/g3
ansible all -m file -a 'name=/data/g3 state=dirrectory'#建立一個文件夾,對象是/data/g3
unarchive模塊:打包模塊
archive模塊:解包模塊
hostname模塊:修改主機名
ansible 192.168.157.131 -m hostname -a 'name=node'#把主機名改成node
cron模塊:計劃任務#和crontab -e 差很少
ansible all -m crom -a 'minute=* week=1,3,5 job="/usr/bin/wall FBIwaring" name=warningcron'#在這裏name=的內容會寫入定時任務的註釋部分
ansible all -m crom -a 'disabled=ture job="/usr/bin/wall FBIwaring" name=warningcron'#關閉定時任務
刪除任務
ansible all -m crom -a 'state=absent name=warningcron'
yum模塊:
ansible all -m yum -a 'name=vsftpd'#list能夠查看全部安裝的包,若是是安裝多個包的話能夠用逗號隔開
ansible all -m yum -a 'name=vsftpd state=absent'#刪除包
services模塊:開機自啓動設置,也能夠啓動服務
ansible all -m service -a 'name=vsftpd enabled=yes'#啓動服務是state=start
user模塊:管理用戶
ansible srv -m user -a 'name=user1 comment="test user」uid= 2048 home=/app/user1 group=root'#comment是對用戶的描述 ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1’#system系統信息 ansible srv -m user -a 'name=user1 state=absent remove=yes'#刪除用戶及家目錄等數據
geoup模塊:管理組
ansible srv -m group -a"name=testgroup system=yes' ansible srv -m group -a "name=testgroup state=absent"
Ansible-galaxy命令
鏈接http://aglaxy.ansible.com下載響應的roles(角色)角色就是許多playbook的組合,而playbook是調用許多模塊的組合 列出全部安裝的galaxy
ansible-galaxy list
安裝galaxy
ansible-galaxy install geerlingguy.redis
刪除galaxy
ansible-galaxy remove geerlingguy.redis
Ansible-pull命令
推送命令至遠程,效率無限提高,對運維要求比較高