CentOS系統啟動流程:
bootloader(引導模式)>kernel(內核)>rootfs(根文件系統)>/sbin/init(開機啟動服務)
安裝程序啟動過程:
?MBR:isolinux/boot.cat ?
stage2: isolinux/isolinux.bin ?
配置文件:isolinux/isolinux.cfg
每個對應的菜單選項:
加載內核:isolinuz/vmlinuz
向內核傳遞參數:append initrd=initrd.img …
裝載根文件系統,并啟動anaconda (在啟動流程選項界面)
默認啟動GUI接口
若是顯式指定使用TUI接口:向內核傳遞text參數即可
(1)按tab鍵,在后面增加text
(2)按ESC鍵:boot: linux text
系統手動指定安裝源安裝:
1、在啟動流程界面;按Esc:輸入boot:linux askmethod
2、顯示界面后,第三個界面選擇 URL
3、DHCP自動分配。
4、輸入遠程http服務器:http://172.20.0.1/centos/6 (僅是教室環境)
安裝時選MINI最小化安裝時,如果有需要加圖形界面,查找Desktop包組。
安裝圖形界面包組:yum groupinstall Desktop
init 5 切換
anaconda的配置方式:
(1) 交互式配置方式(手動)
(2) 通過讀取事先給定的配置文件自動完成配置(自動)
按特定語法給出的配置選項
kickstart文件
安裝boot引導選項:boot: (安裝選項界面時,按Esc)?
文本安裝方式:輸入 linux text ?
手動指定使用的安裝方法:輸入 linux askmethod
?
與網絡相關的引導選項:(裝系統界面按Esc,root:linux ip=…… network=……)
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR ?
與遠程訪問功能相關的引導選項:
vnc
vncpassword=’PASSWORD’
指明kickstart文件的位置:(安裝類型和路徑) ks=
DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
Hard drive: ks=hd:device:/directory/KICKSTART_FILE
HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
NFS server:ks=nfs:host:/path/to/KICKSTART_FILE
anaconda-ks.cfg 文件,就是安裝格式
創建kickstart(安裝)文件方式:
依據某模板修改并生成新配置 (修改此文件也可生成自動化文件)
/root/anaconda-ks.cfg (復制一份出來,修改成需要安裝的模板)
使用創建工具:
system-config-kickstart
ksvalidator ks6.cfg 可檢查語法是否有錯誤
kickstart文件格式:(此文件是系統自動化安裝文件)
安裝kickstart包:yum install system-config-kickstart
啟動創建工具:system-config-kickstart
設定好后生成ks6.cfg文件
將ks6.cfg文件放到 /var/www/html/下
從網頁上可查找安裝包ks.cfg ;http://172.20.110.91/ks6.cfg
自動化安裝時可直接調用安裝包
自動化安裝程序:(http安裝)
啟動流程界面:按Esc 進入:boot:
boot:linux ip=172.20.0.111 netmask=255.255.0.0 ks=http://172.20.110.91/ks6.cfg
(隨意指定一個IP,用來臨時連接網絡安裝包) (ks后面跟安裝包地址)
CentOS 7 制作kickstart自動化文件:
把本地yum源[base] 修改成[development] (可解決安裝插件)
(vim /etc/yum.repo.d/base.repo)
2018/05/25
DHCP服務:(動態主機配置協議)
給在同一網段的主機分配動態IP。
主要用途:
用于內部網絡和網絡服務供應商自動分配IP地址給用戶
用于內部網絡管理員作為對所有電腦作集中管理的手段
使用場景:
自動化安裝系統 ?
解決IPV4資源不足問題
地址分配記錄 /var/lib/dhcpd/dhcpd.leases
dhclient -d 查看DHCP連接過程
其他配置選項:
filename: 指明引導文件名稱
next-server:提供引導文件的服務器IP地址 ?
示例:
filename “pxelinux.0”;
next-server 192.168.100.100;
service dhcpd configtest 檢查語法
配置dhcp文件文件:vim /etc/dhcp/dhcpd.conf
配置DHCP服務器:
關閉防火墻和selinux(getenforce)。
1、yum install dhcpd (安裝包)
2、systemctl start dhcpd (啟動服務)
3、修改配置文件;重新加載服務;reload,restart
4、測試
網卡模式不能橋接;
示例:
vim /etc/dhcp/dhcpd.conf (修改配置文件)
option domain-name “magedu.org”;
option domain-name-servers 114.114.114.114,1.1.1.1;
option routers 192.168.30.200;
default-lease-time 86400;
max-lease-time 100000;
subnet 192.168.30.0 netmask 255.255.255.0 { (本機段網絡)
range 192.168.30.10 192.168.30.100; (分配網絡范圍)
option routers 192.168.30.254; (網關1或254)
option domain-name-servers 8.8.8.8;
next-server 192.168.30.7;
filename “pxelinux.0”;
}
subnet 6.6.6.0 netmask 255.255.255.0 {
range 6.6.6.1 6.6.6.100;
}
host testclient {
hardware ethernet 00:0c:29:e1:f7:aa;
fixed-address 192.168.30.6;
option routers 192.168.30.123;
option domain-name-servers 223.5.5.5;
tftp server pxelinux.0
}
HTTP服務目錄:/var/www/html/
TFTP服務:
1、yum install tftp-server (安裝包)
2、systemctl start tftp.socket (啟動tftp服務)
3、systemctl enable tftp.socket (開機啟動tftp服務)
防火墻配置:
systemctl status firewalld / iptables -vnL 檢查防火墻狀態
systemctl stop firewalld 臨時關閉防火墻
systemctl disable firewalld 禁止開機啟動防火墻
systemctl enable firewalld 開機啟動防護墻
service iptables status Centos6 查詢防火墻
PXE: (引導和安裝操作系統)
PXE自動化安裝CentOS 7 :
安裝前確定 關閉防火墻和SElinux,DHCP服務器靜態IP
1、安裝包:
yum install dhcp tftp-server httpd syslinux (安裝4個服務)
systemctl enable dhcpd httpd tftp.socket (3個設為開機啟動服務)
systemctl start httpd (開啟httpd服務)
2、準備yum源:
mkdir -pv /var/www/html/centos/7/ (在http服務下創建yum源目錄)
vim /etc/fstab 文件下加入: (將光盤掛載到http yum源目錄,并保存文件)
/dev/sr0 /var/www/html/centos/7/ iso9660 defaults 0 0
mount -a (掛載)
df (查看掛載)
3、準備ks文件:
mkdir -pv /var/www/html/ksdir/7 (在http服務下創建ks目錄)
cp /root/anaconda-ks.cfg /var/www/html/ksdir/7/ks7_desktop.cfg
(把ks文件模板復制到http服務目錄下,并改名為ks7_desktop.cfg)
chmod +r /var/www/html/ksdir/7/ks7_desktop.cfg
(將ks7_desktop.cfg文件+讀權限)
vim /var/www/html/ksdir/7/ks7_desktop.cfg
(編輯ks模板文件)
(文件需要修改的內容)
url –url=http://192.168.30.7/centos/7
text
reboot
network –bootproto=dhcp –device=ens33 –onboot=on –ipv6=auto –activate
network –hostname=centos7.magedu.com
# Root password
zerombr
%packages
@base
@core
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@print-client
@x11
autofs
%end
%addon com_redhat_kdump –enable –reserve-mb=’auto’
%end
%post
systemctl enable autofs
systemctl disable initial-setup.service
systemctl set-default multi-user.target
rm -rf /etc/yum.repos.d/*
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=file:///misc/cd
gpgcheck=0
EOF
%end
4、配置dhcp服務:
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
(將dhcp配置文件示例復制到dhcp配置文件)
vim /etc/dhcp/dhcpd.conf (編輯dhcp配置文件)
(需要修改的內容)
option domain-name “zhang.org”;
option domain-name-servers 114.114.114.114,1.1.1.1;
option routers 192.168.30.200;
default-lease-time 86400;
max-lease-time 100000;
subnet 192.168.30.0 netmask 255.255.255.0 { (本網段網絡)
range 192.168.30.10 192.168.30.100; (分配地址范圍)
option routers 192.168.30.254; (網關1或254)
option domain-name-servers 8.8.8.8;
next-server 192.168.30.7;
filename “pxelinux.0”;
}
systemctl start dhcpd
5、準備PXE相關文件
rpm -ql syslinux (查看syslinux所有配置文件)
mkdir /var/lib/tftpboot/pxelinux.cfg/ (創建啟動選項界面目錄)
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
(將syslinux配置文件pxelinux.0復制到/var/lib/tftpboot/目錄)
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
(將syslinux配置文件menu.c32復制到/var/lib/tftpboot/目錄)
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
vim /var/lib/tftpboot/pxelinux.cfg/default
(編輯啟動選項界面)
(編輯修改的內容)
default menu.c32
timeout 600
menu title Auto Install CentOS
label desktop
menu label Install ^Desktop CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.30.7/ksdir/7/ks7_desktop.cfg
label mini
menu label Install ^Mini CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.30.7/ksdir/7/ks7_mini.cfg
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
6、檢查http服務路徑是否能查看ks內容;
終端啟動加載時按Esc;選擇第四項 網絡安裝。
cobbler介紹:(全自動化安裝)
發行版:
表示一個操作系統版本,它承載了內核和initrd的信息,以及內核參數等其他數據。
配置文件:
包含一個發行版、一個kickstart文件以及可能的存儲庫,還包含更多特定的內核參數等其他數據。
實現cobbler全自動化安裝:
1 安裝包
yum install cobbler(EPEL) dhcp
systemctl enable cobblerd dhcpd httpd tftp
systemctl start cobblerd httpd tftp
2 cobbler check
3
vim /etc/cobbler/settings
server:cobberserverip
next_server:cobberserverip
defaut_password_cryptd: “xxxxxxxxxx” #openssl passwd -1 生成口令
manage_dhcp:1
4
cobber get-loaders 聯網
cobbler sync
5
vim /etc/cobbler/dhcp.template
subnet 192.168.30.0 netmask 255.255.255.0
range dynamic-bootp 192.168.30.10 192.168.30.200;
cobbler sync
systemctl restart dhcpd
6
/dev/sr0 8490330 8490330 0 100% /mnt/cdrom0
/dev/sr1 6049912 6049912 0 100% /mnt/cdrom1
cobbler import –path=/mnt/cdrom0 –name=CentOS_7.4-x86_64 –arch=x86_64
cobbler import –path=/mnt/cdrom1 –name=CentOS_6.9-x86_64 –arch=x86_64
cobbler distro list
7
#cat ks6_mini.cfg
url –url=$tree
cp ks7_desktop.cfg ks6_mini.cfg /var/lib/cobbler/kicstarts/
cobbler profile add –name=CentOS_7.4-x86_64_Desktop –distro=CentOS_7.4-x86_64 –kickstart=/var/lib/cobbler/kicstarts/ks7_desktop.cfg
cobbler profile add –name=CentOS_6.9-x86_64_Mini –distro=CentOS_6.9-x86_64 –kickstart=/var/lib/cobbler/kicstarts/ks6_mini.cfg
刪除自帶的配置
cobbler profile remove –name=CentOS_7.4-x86_64
cobbler profile remove –name=CentOS_6.9-x86_64
8 web實現
yum install cobbler-web
systemctl restart httpd
htdigest -c /etc/cobbler/users.digest Cobbler test1
https://cobberserverip/cobbler_web/
2018/05/28
Ansible:(自動化運維工具)
ansible主控端 管理其他主機、網絡設備
模塊化:調用特定模塊,完成特定任務。
利用ansible實現管理的方式:
ansible命令 主要用于臨時命令使用場景;
ansible-playbook 主要用于長期規劃好的,大型項目的場景,需要有前提的規劃。
Ansible-playbook(劇本)執行過程:
將已有編排好的任務集寫入Ansible-Playbook
通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執 行
Ansible主要操作對象:
HOSTS主機
NETWORKING網絡設備
EPEL源: yum install ansible 確認安裝:ansible –version
/etc/ansible/ansible.cfg 主機配置文件,配置ansible工作特性
/etc/ansible/hosts 主機清單(編輯管理主機IP)
/etc/ansible/roles/ 存放角色的目錄
在配置文件中:
#host_key_checking = False 檢查對應服務器的host_key,建議取消注釋(取消ssh驗證)
#log_path = /var/log/ansible.log 日志文件,建議取消注釋(開啟日志文件)
在vim中 / 是查找;
程序:
ansible 主程序,臨時命令執行工具
ansible-doc 查看配置文檔,模塊功能查看工具
ansible-playbook 定制自動化任務,編排劇本工具
ansible-pull 遠程執行命令的工具
ansible-vault 文件加密工具
ansible-galaxy 下載/上傳優秀代碼或Roles模塊的官網平臺
ansible-console 基于Console界面與用戶交互的執行工
ansible的主要功用在于批量主機操作,為了便捷地使用其中的部分主機,可以在主機清單文件中將其分組命名
主機清單中編輯管理主機IP: (可在IP地址后使用冒號加端口號)
vim /etc/ansible/hosts
1)在文本下方直接添加需要管理的主機IP
2)在文本下方分組管理主機IP;
[webserver]
172.20.30.1
172.20.30.2
172.20.30.3
[dbserver]
172.20.30.5
172.20.30.6
172.20.30.7
3)ip遵循1-10的;
[abserver]
172.20.30.[1:10]
/usr/share/my_modules/ 庫文件存放目錄
$home/.ansible/tmp 臨時命令文件存放的目錄
默認sudo用戶root;遠程端口號默認22;
Ansible 命令:
ansible
ansible-doc (查看模塊幫助)
ansible-playbook (執行劇本任務)
ansible-vault
ansible-console
ansible-galaxy
ansible-pull
ansible -a 顯示所有模塊文檔
-l, –list 列出可以模塊
-s, –snippet 顯示指定模塊的playbook片段
示例:
ansible 192.168.169.170 -a ‘ls /data’
ansible-doc –l 列出所有模塊
ansible-doc ping 查看指定模塊幫助用法
ansible-doc –s ping 查看指定模塊幫助用法
實現基于key認證: ansible通過ssh實現配置管理、應用部署、任務執行等功能;
建議配置ansible 端能基于密鑰認證的方式聯系各被管理節點;
1、ssh-keygen 生成密鑰對兒
2、ssh-copy-id 172.20.111.101 將公鑰直接傳輸至對方
ansible –version 查看版本
-m 指定模塊,默認為command
-v 顯示過程 -vv -vvv 越來越詳細
–list 顯示主機列表;–list-hosts
ansible all –list
-C 查看,不執行
-T 執行命令的超時時間,默認10s
-u 執行遠程執行的用戶
-b 代替舊版的sudo切換
-k 提示了解密碼,默認Key驗證
-K 提示輸入sudo
ansible all -m ping (all 是指在/ansible/hosts文件中的所有 IP)
(ping 是模板,測試是否和其他主機ping通)
ansible all -a ls
ansible all -m ping -u wang -k (以wang用戶執行ping存活檢測)
通配符:*
ansible “*” -m ping
ansible 192.168.1.* -m ping
ansible “*srvs” -m ping
與 或 非 邏輯關系:
與:ansible “websrvs:dbsrvs” -m ping
ansible “192.168.1.10:192.168.1.20” -m ping
或:ansible “websrvs:&dbsrvs” –m ping (在websrvs組并且在dbsrvs組中的主機)
非:ansible ‘websrvs:!dbsrvs’ –m ping (在websrvs組,但不在dbsrvs組中的主機)
執行狀態:
綠色:執行成功并且不需要做改變的操作
黃色:執行成功并且對目標主機做變更
紅色:執行失?。ú榭磮绦惺。f明沒有)
常用模塊:
command : 在遠程主機執行命令,默認模塊,可忽略-m選項;
ansible all -m command -a ‘systemctl restart httpd’
ansible all -a ‘systemctl restart httpd’
ansible all -a ‘chdir=/boot ls -l’ (chdir是切換至哪個目錄,在執行)
command模塊不支持 $ < > | ; & 等;用shell模塊執行
shell : 和command相似,用shell執行命令;
ansible srver -m shell -a ‘echo magedu | passwd –stdin wang’
調用bash執行命令:將一些復雜命令寫到腳本,然后使用copy復制到遠程;
再用ansible all -m shell 統一執行;
ansible all -m shell -a ‘tar jcf /data/log.tar /var/log/*.log’
(將所有主機日志打包,放到data目錄下)
script : 運行腳本模板;
(在本機服務器端 將腳本做好 不需要推送 直接運行腳本 則其他主機也可使用)
ansible all -m script -a f1.sh
(在所有主機上執行f1.sh腳本)
copy : 推送;從本機服務器復制文件到客戶端;
如果目標存在,默認覆蓋;
backup=yes 客戶端主機備份
ansible srver -m copy -a “src=/data/f1.sh dest=/tmp/f2.sh”
(將本機服務器端f1.sh腳本 復制到srver組的主機 并改名為f2.sh)
ansible all -m copy -a “src=/etc/selinux/config dest=/etc/selinux/config backup=yes”
(將本機的config文件復制到所有主機上,如果目標存在,默認覆蓋;所有主機先備份)
ansible srver -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes”
(復制到srver的主機 所有者改為 wang 權限改為 600 如果文件存在則備份)
ansible srver -m copy -a “content=’test content\n’ dest=/tmp/f1.txt”
(利用content生成內容,直接生成客戶端目標文件)
fetch : 提取;從客戶端提取文件至服務器端,與copy相反,目錄可先tar打包,一次只能提取一個文件;
ansible all -m fetch -a ‘src=/var/log/messages dest=/data/’
(將所有主機的日志文件提取到本機/data目錄下,會在/data目錄下自動生成以IP為名稱的目錄)
打包,提取,解包:
ansible all -m shell -a ‘tar jcf /data/log.tar /var/log/*.log’
(將所有主機日志打包,放到log.tar文件下)
ansible all -m fetch -a ‘src=/data/log.tar dest=/data/’
(將打包好的日志文件 提取到/data/目錄下的主機目錄內)
tar xvf log.tar -C /data/
(將提取過來的日志文件 解包到/data目錄下)
cron : 計劃任務;
支持時間: minute, hour, day, month, weekday ( * 每的意思)
ansible all -m cron -a ‘minute=* weekday=1,3,5 job=”/usr/bin/wall FBI warning” name=warncron’
(將所有主機 設置成星期1,3,5,每分鐘顯示一次FBI warning;計劃任務名為warncron;crontab -e 顯示計劃任務)
ansible all -m cron -a ‘disabled=yes job=”/usr/bin/wall FBI warning” name=warncron’
(禁用計劃任務)
ansible all -m cron -a ‘disabled=no job=”/usr/bin/wall FBI warning” name=warncron’
(開啟計劃任務)
ansible all -m cron -a ‘job=”/usr/bin/wall FBI warning” name=warncron state=absent’
(刪除計劃任務)
file : 設置文件屬性;
(狀態)state=
touch 創建文件;absent 刪除文件;
directory 創建目錄;absent 刪除目錄;
link 創建軟鏈接;absent 刪除軟鏈接;
ansible all -m file -a ‘name=/data/f2 state=touch’
(在data目錄下創建f2空文件)
ansible all -m file -a ‘src=/etc/fstab dest=/data/fstab.link state=link’
(將所有主機的fstab文件 創建軟連接fstab.link)
ansible all -m file -a ‘dest=/data/fstab.link state=absent’
(刪除軟鏈接)
hostname : 管理主機名;
ansible all -m hostname -a ‘name=zcyyy’
(修改主機名,會修改文件)
yum : 管理包;
ansible all -m yum -a ‘name=httpd state=latest’ 安裝 (默認)
ansible all -m yum -a ‘name=httpd state=absent’ 刪除
service : 管理服務;
ansible all -m service -a ‘name=httpd state=stopped’
(關閉所有主機的 httpd 服務)
ansible all -m service -a ‘name=httpd state=started’
(開啟所有主機的 httpd 服務)
ansible all –m service –a ‘name=httpd state=reloaded’
(重新加載所有主機的 httpd 服務)
ansible all -m service -a ‘name=httpd state=restarted’
(重啟所有主機的 httpd 服務)
ansible all -m service -a ‘name=vsftpd state=started enabled=yes’
(將所有主機vsftpd服務 開啟,并設為開機啟動) no
user : 管理用戶;
ansible all -m user -a ‘name=yang shell=/sbin/nologin system=yes home=/var/yang group=root uid=80 comment=”yang service”‘
(在所有主機上創建yang賬號,shell類型;是一個系統賬號;家目錄是/var/yang;主組root;uid設為80;最后加注釋信息)
ansible all -m user -a ‘name=yang state=absent remove=yes’
(刪除用戶yang;還有家目錄)
ansible all -m user -a ‘name=zhang system=yes home=/app/zhang groups=bin’
(創建用戶zhang,是個系統賬號,家目錄為/app/zhang,附加組為 bin)
group : 管理組;
ansible all -m group -a “name=testgroup system=yes uid=90”
(創建testgroup組,是個系統組,uid為90)
ansible all -m group -a “name=testgroup state=absent”
(刪除組)
ansible 系統命令;
連接https://galaxy.ansible.com 下載相應的角色roles
安裝galaxy: ansible-galaxy install geerlingguy.redis(可直接從對應網站下載)
列出所有已安裝的galaxy: ansible-galaxy list
刪除galaxy: ansible-galaxy remove geerlingguy.redis
安裝的角色在 .ansible/roles/ 目錄下
push 推送
pull 拉取
ansible-console : 可交互執行命令,支持tab
root@test (2)[f:5]$
執行用戶@當前操作的主機組 (當前組的主機數)[f:并發數]$
設置并發數: forks n 例:forks 10
切換組: cd 主機組/IP/all 例:cd web
列出當前組主機列表: list
列出所有內置命令: ? / help
root@all (2)[f:5]$ yum name=httpd state=latest
(下載安裝 http 服務)
root@all (2)[f:5]$ service name=httpd state=starte
(啟動 http 服務)
ansible-vault encrypt hello.yml (對劇本進行加密,加密不能執行)
ansible-vault decrypt hello.yml (解密)
view 查看
edit 編輯加密文件
rekey 修改加密口令
create hi.yml 創建新的加密文件
playbook 核心元素;(每天例行性做的事,可做個playbook)(小型自動化,200臺以內主機)
ansible-playbook : 制作劇本;(建議生成文件用.yml做后綴)
(統一Tab / 空格 縮進)(YAML語法)
vim /data/hello.yml (創建劇本)
— (表示playbook的開始)
-hosts: all (執行的遠程主機列表)
remote_user: root (表示用誰的身份執行)
tasks: (任務集)
– name: hello (任務名)
command: hostname (模板:要執行的任務)
ansible-playbook hello.yml (執行劇本)
Varniables 內置變量或自定義變量在playbook中調用
Templates 模板,可替換模板文件中的變量并實現一些簡單邏輯的文件
Handlers 和notity結合使用,由特定條件觸發的操作,滿足條件方才執行,否則不執行
tags 標簽;指定執行某條任務,用于選擇運行playbook中的部分代碼。
例:
vim /data/all.yml
—
-hosts: all
remote_user: root
tasks:
– name: create new file
file: name=/data/newfile state=touch
– name: create new user
user: name=yang system=yes shell=/sbin/nologin
– name: install package
yum: name=httpd
– name: copy html
copy: src=/var/www/html/index.html dest=/var/www/html
– name: start service
service: name=httpd state=started enabled=yes
ansible-playbook -C /data/all.yml (測試執行,不真執行)
-C 檢查執行,但不真執行
–list-hosts 列出運行任務的主機
–limit 主機列表 只針對主機列表中的主機執行
-v 顯示過程 -vv -vvv 更詳細
如果劇本中有錯誤,還希望繼續執行,可以使用如下方式替代
tasks:
– name: run result
shell: /usr/bin/somecommand || /bin/true
示例:httpd.yml (安裝;復制推送;開啟)
– hosts: all
remote_user: root
tasks:
– name: Install httpd
yum: name=httpd state=present
– name: Install configure file
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/
– name: start service
service: name=httpd state=started enabled=yes
handlers 和 notify 結合觸發條件;
handlers: 用于當關注的模板發生變化時,才會執行操作;
notify: 這個是跟在某個執行模板后的,與handlers成對兒;描述姓名相同;
示例:httpd.yml (安裝;復制推送;開啟)
– hosts: all
remote_user: root
tasks:
– name: Install httpd
yum: name=httpd state=present
– name: Install configure file
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/
notify: restart service
– name: start service
service: name=httpd state=started enabled=yes
handlers:
– name: restart service
service: name=httpd state=restarted
(在執行完copy模板后,則會觸發handlers,httpd服務重啟)
tags : 標簽 ,可挑著執行劇本中的模板;
例:
vim /data/all.yml
—
-hosts: all
remote_user: root
tasks:
– name: create new file
file: name=/data/newfile state=touch
tags: file
– name: create new user
user: name=yang system=yes shell=/sbin/nologin
tage: user
– name: install package
yum: name=httpd
tage: install
– name: copy html
copy: src=/var/www/html/index.html dest=/var/www/html
tage: copy
– name: start service
service: name=httpd state=started enabled=yes
tage: start
ansible-playbook all -t file,user /data/all.yml
(挑著劇本中的標簽模板執行)
ansible-playbook 中變量使用; (可實現靈活管理)
變量名:僅能由字母、數字和下劃線組成、且只能以字母開頭;
變量優先級:命令行里的變量>playbook里的變量>清單中的變量;
1、在/etc/ansible/hosts中定義
給單個IP地址定義變量 :后面加變量 172.20.11.111 name=file
給[server]主機組定義變量:在IP最下面添加 [server:vars]
file=abc
app=httpd
2、ansible setup facts 遠程主機的所有變量都可直接調用
變量調用方式:
通過{{ variable_name }} 調用變量,且變量名前后必須有空格;
有時用 “{{ variable_name }}”才生效
ansible-playbook –e 選項指定
示例:
vim var.yml
– hosts: all
remote_user: root
tasks:
– name: install package
yum: name={{ app }} state=latest
– name: create log file
file: name=/data/{{ filename }}.log state=touch owner=zhang
執行:ansible-playbook -e app=httpd filename=file var.yml
2018/05/30
模板 templates ; (推送配置文件)
作用:將服務配置文件cp到/etc/ansible/template目錄下,改名為xxxx.conf.j2;
修改.j2配置文件,然后在用playbook推送到各個主機;
(只能放在ansible-playbook 中使用)
Jinja2語言,使用字面量,有下面形式:
字符串:使用單引號或雙引號
數字:整數,浮點數
列表:[item1, item2, …]
元組:(item1, item2, …)
字典:{key1:value1, key2:value2, …}
布爾型:true/false
算術運算:+, -, *, /, //(整除), %(取余), **
比較操作:==, !=, >, >=, <, <=
邏輯運算:and, or, not
流表達式:For If When
templates功能:根據模塊文件動態生成對應的配置文件;
templates文件必須存放在templates目錄下,且后綴為.j2;
ansible-playbook以.yml結尾的文件需和templates目錄平級。
(平級是指同在一級目錄下,或二級目錄下)
在ansible目錄下創建:template 目錄;
例: 將nginx配置文件推送到各個主機;
(由于nginx端口號和httpd端口號相同80;所以端口號改為81)
yum install nginx (epel源)
將nginx配置文件復制到template目錄下,改名為nginx.conf.j2
cp /etc/nginx/nginx.conf /etc/ansible/template/nginx.conf.j2
cd /etc/ansible/
vim testtempl.yml
—
– hosts: all
remote_user: root
vars:
– http_port: 81
tasks:
– name: install package
yum: name=nginx
– name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart service
– name: start service
service: name=nginx state=started enabled=yes
handlers:
– name: restart service
service: name=nginx state=restarted
when: 判斷條件;
哪個條件滿足執行哪個模塊;在模板下面跟when模板可生成判斷條件;
when: 跟判斷條件;
例:判斷版本為6則推送nginx6配置文件;為7則推送nginx7配置文件;
vim testtempl.yml
—
– hosts: all
remote_user: root
vars:
– http_port: 81
tasks:
– name: install package
yum: name=nginx
– name: copy template for centos7
template: src=nginx7.conf.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == “7”
notify: restart service
– name: copy template for centos6
template: src=nginx6.conf.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == “6”
notify: restart service
– name: start service
service: name=nginx state=started enabled=yes
handlers:
– name: restart service
service: name=nginx state=restarted
迭代:with_items ;(需要重復性執行任務時)
例: 將多個文件推送到主機;下載多個服務;
vim copy.yml
—
– hosts: all
remote_user: root
tasks:
– name: copy some files
copy: src=/data/{{ item }} dest=/etc/{{ item }}
with_items:
– file1
– file2
– file3
– name: install some packages
yum: name={{ item }}
with_items
– httpd
– htop
– nginx
迭代 嵌套 子變量:
– name: add some users
user: name={{ item.name }} group={{ item.group }} state=present with_items:
– { name: ‘user1’, group: ‘group1’ }
– { name: ‘user2’, group: ‘group2’ }
– { name: ‘user3’, group: ‘group3’ }
Playbook中template for if ; (循環,判斷條件)
例:將文件循環復制到主機;
vim forcopy.yml
—
– hosts: all
remote_user: root
vars:
ports:
– 81
– 82
– 83
tasks:
– name: copy conf
template: src=for1.conf.j2 dest=/data/for1.conf
調用循環文件模板: vim for1.conf.j2
{% for port in ports %}
server{
listen {{ port }}
}
{% endfor %}
roles(角色): 適合大型自動化,多臺主機;復雜場景;
按一定的邏輯關系,存放到目錄下,一一執行;
把一個playbook文件拆開放,靈活執行;
在/etc/ansible/roles 下創建各自的目錄;(角色集合)
如:mkdir -pv roles/{httpd,nginx,mysql}
目錄結構:(在各自角色目錄下創建)
tasks/ (定義task,role的基本元素,至少應該包含一個名為main(主要).yml的文件)
files/ (存放copy或script模板調用的文件)
templates/(template模塊查找所需要模板文件的目)
handlers/ (至少應該包含一個名為main.yml的文件)
vars/ (定義變量,至少應該包含一個名為main.yml的文件)
default/ (設定默認變量時使用此目錄中的main.yml文件)
meta/ (定義當前角色的特殊設定及其依賴關系,至少應該包含一個名為main.yml的文件)
生成目錄結構:
/etc/ansible/roles :
|
|___httpd
| |___tasks/
| |___files/
| |___templates/
| |___handlers/
| |___vars/
|
|___nginx
|___tasks/
|___files/
|___templates/
|___handlers/
|___vars/
創建role的步驟 :
(1) 創建以roles命名的目錄
(2) 在roles目錄中分別創建以各角色名稱命名的目錄,如httpd等
(3) 在每個角色命名的目錄中分別創建files、handlers、meta、tasks、 templates和vars目錄;用不到的目錄可以創建為空目錄,也可以不創建;
(4) 在創建的每個目錄中 創建任務文件;
(5) 在playbook文件中,調用各角色;
創建任務文件:
vim /tasks/zhang_role.yml
任務文件:- name:任務名
模板:執行任務內容
例:- name: create user
user: name=zhang uid=99 group=root system=yes shell=/sbin/nologin
roles的示例如下所示:(前三個是playbook文件)
ansible/
site.yml
webservers.yml
dbservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/
playbook調用角色:
(在ansible目錄下創建playbook文件,和roles目錄同級)
vim /etc/ansible/httpd_role.yml
—
– hosts: all
remote_user: root
roles:
– role: httpd (創建的角色文件名)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100810