Ansible入門及基本操做

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命令

  推送命令至遠程,效率無限提高,對運維要求比較高

相關文章
相關標籤/搜索