Ansible自动化运维基础-------ad-hoc
前言:ansible是一款自動化運維工具,基于Python開發,所以被管理主機需要安裝有Python
另外:下例模塊僅供參考如有錯誤還請聯系本人
目錄
一.準備ansible
1.Control控制節點
2.配置SSH密鑰實現免密碼登錄
3.安裝ansible
????????? 4.Ansible基本功能介紹
二.ansible的書寫
1.修改主配置文件準備環境
2.常見模塊
1.批量系統配置 ????????2.批量程序部署 ????????3.批量運行命令等功能
4.批量修改服務器密碼???????? 5.批量安裝軟件包 ????????6.批量修改配置
ansible原理:
控制端主機自帶很多模塊(模塊就是腳本);
ansible通過ssh遠程被管理主機,將控制端的模塊(腳本)或命令傳輸到被管理主機; 在被管理端主機執行模塊(腳本)或命令,執行不同的模塊或命令可以實現不同的功能;
注:絕大多數模塊(腳本)都需要參數才能執行成功!!!類似于shell腳本的位置變量!
一.準備ansible
控制節點要求:
域名解析(為了方便后期操作,可以不做)
配置SSH密鑰(ansible是基于ssh實現遠程控制)
安裝Ansible軟件(自帶2800多個腳本)
1.Control控制節點
如:以下寫法;ping?? node1 測試聯通性
vim /etc/host192.168.4.253 control 192.168.4.11 node1 192.168.4.12 node2 192.168.4.13 node3 192.168.4.14 node4 192.168.4.15 node52.配置SSH密鑰實現免密碼登錄
Ansible是基于SSH遠程的原理實現遠程控制,如果控制端主機無法免密登錄被管理端主機,后續的所有試驗都會失敗!!?????測試 : ssh? node1?
ssh-keygen #生成ssh密鑰 for i in node1 node2 node3 node4 node5 do ssh-copy-id $i done3.安裝ansible
1).連網即可(如后續該網站不能下請見諒,這里只是提供思路)
yum -y install wget
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum repolist
yum install ansible
2).Git方式
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
3).pip安裝
pip 是安裝Python包的管理器,類似 yum
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel? rpm-bulid openssl-devel
pip install? --upgrade pip
pip install ansible --upgrade
確認安裝
????????ansible --version
注:下包盡量去關網下!!!!!!
4.Ansible基本功能介紹
1)Ansible相關工具
/usr/bin/ansible 主程序,臨時命令執行工具
/usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy 下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook 定制自動化任務,編排劇本工具
/usr/bin/ansible-pull 遠程執行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面與用戶交互的執行工具
2)ansible配置文件查找順序
首先檢測ANSIBLE_CONFIG變量定義的配置文件(默認沒有這個變量)
其次檢查當前目錄下的./ansible.cfg文件
再次檢查當前用戶家目錄下~/ansible.cfg文件
最后檢查/etc/ansible/ansible.cfg文件
3)ansible的使用必須在ansible目錄里
mkdir? ~/ansible
cd? ~/ansible
二.ansible的書寫
很多ansible模塊都具有冪等性的特征。(只在ansible) 冪等性:任意次執行所產生的影響均與一次執行的影響相同。 萬能模塊 shell(沒有冪等性)
1.修改主配置文件準備環境
mkdir?? ansible ;cd ansible
vim? ~/ansible/ansible.cfg #手動書寫配置文件或cp? /etc/ansible/ansible.cfg? /ansible/ansible.cfg??
[defaults] inventory = ~/ansible/inventory //清單=文件名 #主機清單配置文件(inventory可以是任意文件名) remote_user = root //連接受管機的遠程用戶 roles_path = roles //指定默認的角色目錄 [privilege_escalation] //設置用戶 sudo 提權 become=True //需要提權 become_method=sudo //提權方式為 sudo become_user=root //提權為 root become_ask_pass=False //無需驗證密碼 #forks = 5 #ssh并發數量(默認是5) #host_key_checking = False (不提示)#是否校驗密鑰(第一次ssh時是否提示yes/no)?2) 修改主機清單文件(清單文件名必須與主配置文件inventory定義的一致)
[test]????????????????????#定義主機組(組名稱任意)(也可以一臺一臺寫) node1????????????????????#定義組中的具體主機,組中包括一臺主機node1 [proxy] #定義主機組(組名稱任意) node2 #proxy組中包括一臺主機node2 [webserver] node[3:4] #這里的node[3:4]等同于node3和node4 [database] node5 [cluster:children]????????#嵌套組(children為關鍵字),不需要也可以不創建嵌套組 webserver #嵌套組可以在組中包含其他組 database測試??? ansible? all? --list-hosts?
2.常見模塊
通過ansible-doc獲取幫助
ansible-doc -l ????#列出所有模塊 ansible-doc -l | grep yum????????????#在所有模塊中過濾關鍵詞 ansible-doc yum ????????#查看模塊幫助 resetping模塊
它不會發送任何ICMP協議的ping數據包,控制端主機僅僅是ssh遠程被管理端主機,檢查其是否有python環境,能順利遠程并且有Python環境就會返回正確的提示信息,否則報錯
ansible all –m pingcommand模塊
模塊就是腳本(多數為Python腳本),多數腳本都支持參數,默認模塊為command
ansible node1 -m command -a "uptime" #查看CPU負載 ansible node1 -m command -a "uname -r" #查看內核版本 ansible node1 -a "ip a s" #查看網卡信息 ansible all -a "date" #查看時間shell模塊
command和shell模塊的區別,command不支持bash的特性(bash特性如:管道和重定向等功能),但是shell模塊可以支持。
ansible test -m command -a "ps | wc -l" #報錯 ansible test -m command -a "ls &" #報錯 ansible test -m shell -a "ps aux | wc -l" #進程數量 ansible test -m shell -a "who" #登陸信 ansible test -m shell -a "touch /tmp/txt.txt"#使用shell模塊創建文件會有Warning警告提示,正常!!!
script模塊
script模塊會把-a后面的腳本拷貝到被管理端主機,然后執行這個腳本。
vim ~/ansible/test.sh #!/bin/bash dnf -y install httpd systemctl start httpd ansible test -m script -a "./test.sh"file模塊
file模塊可以創建文件、目錄、鏈接;修改權限與屬性等
ansible test -m file -a "path=/tmp/file.txt state=touch" #遠程test組中所有主機,新建文件,path后面指定要創建的文件或目錄的名稱 ansible test -m file -a "path=/tmp/mydir state=directory" #遠程test組中所有主機,創建目錄,path后面指定要創建的文件或目錄的名稱ansible test -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777" #修改文件或目錄權限,path后面指定要修改的文件名或目錄名稱,owner后面指定用戶, ansible test -m file -a "path=/tmp/mydir state=absent" abset(卸載,刪) perset(裝包,增) ansible test -m file -a "path=/tmp/file.txt state=absent" #state=absent代表刪除(刪除目錄) ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link" #給/etc/hosts文件創建一個鏈接文件/tmp/host.txt(src指定源文件,path是軟鏈接文件名)link(軟鏈接) hard(硬鏈接1)copy模塊
可以將文件拷貝到遠程主機
echo AAA > ~/a3.txt ansible test -m copy -a "src=~/a3.txt dest=/root/" #把管理端本機的a3.txt文件,拷貝到test組中所有主機的/root/目錄 #src代表源文件,dest代表目標文件fetch模塊
fetch模塊與copy類似,但是作用相反,可以將其他主機的文件拷貝到本地
ansible test -m fetch -a "src=/etc/hostname dest=~/" #將遠程test組中所有主機的hostname文件下載到本地家目錄lineinfile|replace模塊
在修改單個文件的單行內容時可以使用lineinfile模塊
ansible test -m lineinfile -a "path=/etc/issue line='hello world'" #在/etc/issue文件中添加一行內容hello world,默認添加到最后,line后面跟的是需要添加的文件內容 ansible test -m lineinfile -a "path=/etc/issue line='hello world'" #基于冪等原則,重復執行,不會創建多行內容lineinfile會替換一整行,replace可以替換關鍵詞
ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean" #將node1主機中/etc/issue.net文件全文所有的Kernel替換為Oceanuser模塊
user模塊可以實現Linux系統賬戶管理
ansible test -m user -a "name=tuser1" ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2" #創建賬戶并設置對應的賬戶屬性,uid指定用戶ID號,group指定用戶屬于哪個基本組 #groups指定用戶屬于哪些附加組,home指定用戶的家目錄 ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}" #修改賬戶密碼,用戶名是tuser1,密碼是abc,密碼經過sha512加密ansible test -m user -a "name=tuser1 state=absent" #刪除賬戶tuser1,state=absent代表刪除賬戶的意思,name指定要刪除的用戶名是什么ansible test -m user -a "name=tuser2 state=absent remove=true" #刪除tuser2賬戶同時刪除家目錄、郵箱,相當于執行userdel -r tuser2yum_repository模塊
使用yum_repository可以創建或修改yum源配置文件
ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no" #新建一個yum源配置文件/etc/yum.repos.d/myyum.repoansible test -m yum_repository -a "name=myyum description=test baseurl=ftp://192.168.4.254/centos gpgcheck=yes gpgkey=…(密鑰文件)" #修改yum源文件內容 ansible test -m yum_repository -a "name=myyum state=absent" #刪除yum源文件myyumyum模塊
使用yum模塊可以安裝、卸載、升級軟件包
ansible test -m yum -a "name=unzip state=present"(可寫可不寫) #安裝unzip軟件包,state默認為present,也可以不寫 ansible test -m yum -a "name=unzip state=latest" #升級unzip軟件包,軟件名稱可以是*,代表升級所有軟件包ansible test -m yum -a "name=unzip state=absent" #調用yum模塊,卸載unzip軟件包,state=absent代表卸載軟件service模塊
service為服務管理模塊(啟動、關閉、重啟服務等)
ansible test -m yum -a "name=httpd" #調用yum模塊,安裝httpd軟件包 ansible test -m service -a "name=httpd state=started" #調用service模塊,啟動httpd服務 ansible test -m service -a "name=httpd state=stopped" #調用service模塊,關閉httpd服務 ansible test -m service -a "name=httpd state=restarted" #調用service模塊,重啟httpd服務 ansible test -m service -a "name=httpd enabled=yes" #調用service模塊,設置httpd服務開機自啟lvg模塊
創建、刪除卷組(VG),修改卷組大小
ansible test -m yum -a "name=lvm2" #安裝lvm2軟件包,安裝了lvm2軟件后,才有pvcreate、vgcreate、lvcreate等命令 ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1" #創建名稱為myvg的卷組,該卷組由/dev/vdb1組成lvol模塊
創建、刪除邏輯卷(LV),修改邏輯卷大小
ansible test -m lvol -a "lv=mylv vg=myvg size=2G" #使用myvg這個卷組創建一個名稱為mylv的邏輯卷,大小為2G ansible test -m lvol -a "lv=mylv vg=myvg size=4G" #修改LV邏輯卷大小 ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes" #刪除邏輯卷,force=yes是強制刪除ls ansible test -m lvg -a "vg=myvg state=absent" #刪除卷組myvg總結
以上是生活随笔為你收集整理的Ansible自动化运维基础-------ad-hoc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx基本配置
- 下一篇: Ansible自动化运维基础------