運維自動化部署

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

(0)
kar.98k_kar.98k_
上一篇 2018-06-10 20:57
下一篇 2018-06-10 21:34

相關推薦

欧美性久久久久