最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

ansible安裝及教程4

2023-02-17 10:05 作者:bili_39183997178  | 我要投稿

任務(wù)塊

????????????? 可以通過block關(guān)鍵字,將多個任務(wù)組合到一起

????????????? 可以將整個block任務(wù)組,一起控制是否要執(zhí)行

# 如果test組中的主機系統(tǒng)發(fā)行版是RedHat,則安裝并啟動httpd
[root@control ansible]# vim block1.yml
---
- name: block tasks
? hosts: test
? tasks:
??? - name: define a group of tasks
????? block:
??????? - name: install httpd?? # 通過yum安裝httpd
????????? yum:
??????????? name: httpd
??????????? state: present

??????? - name: start httpd???? # 通過service啟動httpd服務(wù)
????????? service:
??????????? name: httpd
??????????? state: started
??????????? enabled: yes

????? when: ansible_distribution=="RedHat"?? # 條件為真才會執(zhí)行上面的任務(wù)

[root@control ansible]# ansible-playbook block1.yml

rescue和always

????????????? block和rescue、always聯(lián)合使用:

–??????????? block中的任務(wù)都成功,rescue中的任務(wù)不執(zhí)行

–??????????? block中的任務(wù)出現(xiàn)失?。╢ailed),rescue中的任務(wù)執(zhí)行

–??????????? block中的任務(wù)不管怎么樣,always中的任務(wù)總是執(zhí)行

[root@control ansible]# vim block2.yml
---
- name: block test
? hosts: test
? tasks:
??? - name: block / rescue / always test1
????? block:
??????? - name: touch a file
????????? file:
??????????? path: /tmp/test1.txt
??????????? state: touch
????? rescue:
??????? - name: touch file test2.txt
????????? file:
??????????? path: /tmp/test2.txt
??????????? state: touch
????? always:
??????? - name: touch file test3.txt
????????? file:
??????????? path: /tmp/test3.txt
??????????? state: touch

# 執(zhí)行playbook node1上將會出現(xiàn)/tmp/test1.txt和/tmp/test3.txt
[root@control ansible]# ansible-playbook block2.yml
[root@node1 ~]# ls /tmp/test*.txt
/tmp/test1.txt? /tmp/test3.txt

# 修改上面的playbook,使block中的任務(wù)出錯
[root@node1 ~]# rm -f /tmp/test*.txt
[root@control ansible]# vim block2.yml
---
- name: block test
? hosts: test
? tasks:
??? - name: block / rescue / always test1
????? block:
??????? - name: touch a file
????????? file:
??????????? path: /tmp/abcd/test11.txt
??????????? state: touch
????? rescue:
??????? - name: touch file test22.txt
????????? file:
??????????? path: /tmp/test22.txt
??????????? state: touch
????? always:
??????? - name: touch file test33.txt
????????? file:
??????????? path: /tmp/test33.txt
??????????? state: touch
# 因為node1上沒有/tmp/abcd目錄,所以block中的任務(wù)失敗。但是playbook不再崩潰,而是執(zhí)行rescue中的任務(wù)。always中的任務(wù)總是執(zhí)行
[root@control ansible]# ansible-playbook block2.yml
[root@node1 ~]# ls /tmp/test*.txt
/tmp/test22.txt? /tmp/test33.txt

loop循環(huán)

????????????? 相當(dāng)于shell中for循環(huán)

????????????? ansible中循環(huán)用到的變量名是固定的,叫item

# 在test組中的主機上創(chuàng)建5個目錄/tmp/{aaa,bbb,ccc,ddd,eee}
[root@control ansible]# vim loop1.yml
---
- name: use loop
? hosts: test
? tasks:
??? - name: create directory
????? file:
??????? path: /tmp/{{item}}
???? ???state: directory
????? loop: [aaa,bbb,ccc,ddd,eee]

# 上面寫法,也可以改為:
---
- name: use loop
? hosts: test
? tasks:
??? - name: create directory
????? file:
??????? path: /tmp/{{item}}
??????? state: directory
????? loop:
??????? - aaa
??????? - bbb
??????? - ccc
??????? - ddd
??????? - eee

[root@control ansible]# ansible-playbook loop1.yml


# 使用復(fù)雜變量。創(chuàng)建zhangsan用戶,密碼是123;創(chuàng)建lisi用戶,密碼是456
# item是固定的,用于表示循環(huán)中的變量
# 循環(huán)時,loop中每個-后面的內(nèi)容作為一個整體賦值給item。
# loop中{}中的內(nèi)容是自己定義的,寫法為key:val
# 取值時使用句點表示。如下例中取出用戶名就是{{item.uname}}
[root@control ansible]# vim loop_user.yml
---
- name: create users
? hosts: test
? tasks:
??? - name: create multiple users
????? user:
??????? name: "{{item.uname}}"
??????? password: "{{item.upass|password_hash('sha512')}}"
????? loop:
??????? - {"uname": "zhangsan", "upass": "123"}
??????? - {"uname": "lisi", "upass": "456"}
[root@control ansible]# ansible-playbook? loop_user.yml

role角色

????????????? 為了實現(xiàn)playbook重用,可以使用role角色

????????????? 角色role相當(dāng)于把任務(wù)打散,放到不同的目錄中

????????????? 再把一些固定的值,如用戶名、軟件包、服務(wù)等,用變量來表示

????????????? role角色定義好之后,可以在其他playbook中直接調(diào)用

# 使用常規(guī)playbook,修改/etc/motd的內(nèi)容
# 1. 修改默認(rèn)配置
[root@control ansible]# vim ansible.cfg
[defaults]
inventory = hosts

# 2. 創(chuàng)建motd模板文件
[root@control ansible]# vim motd.j2
Hostname: {{ansible_hostname}}???? # facts變量,主機名
Date: {{ansible_date_time.date}}?? #? facts變量,日期
Contact to: {{admin}}????????????? # 自定義變量

# 3. 編寫playbook
[root@control ansible]# vim motd.yml
---
- name: modifty /etc/motd
? hosts: test
? vars:
??? admin: root@tedu.cn??????????? # 自定義名為admin的變量
? tasks:
??? - name: modify motd
????? template:
?? ?????src: motd.j2
??????? dest: /etc/motd

[root@control ansible]# ansible-playbook motd.yml
[root@node1 ~]# cat /etc/motd
Hostname: node1
Date: 2021-11-01
Contact to: root@tedu.cn


# 創(chuàng)建角色
# 1. 聲明角色存放的位置
[root@control ansible]# vim ansible.cfg
[defaults]
inventory = hosts
roles_path = roles??? # 定義角色存在當(dāng)前目錄的roles子目錄中

# 2. 創(chuàng)建角色目錄
[root@control ansible]# mkdir roles

# 3. 創(chuàng)建名為motd的角色
[root@control ansible]# ansible-galaxy init roles/motd
[root@control ansible]# ls roles/
motd???? # 生成了motd角色目錄
[root@control ansible]# yum install -y tree
[root@control ansible]# tree roles/motd/
roles/motd/
├── defaults???????? # 定義變量的目錄,一般不用,因為優(yōu)先級太低
│??? └── main.yml
├── files??????????? # 保存上傳的文件(如copy模塊用到的文件)
├── handlers???????? # handlers任務(wù)寫到這個目錄的main.yml中
│??? └── main.yml
├── meta???????????? # 保存說明數(shù)據(jù),如角色作者、版本等
│??? └── main.yml
├── README.md??????? # 保存角色如何使用之類的說明
├── tasks??????????? # 保存任務(wù)
│??? └── main.yml
├── templates??????? # 保存template模塊上傳的模板文件
├── tests??????????? # 保存測試用的playbook??蛇x
│??? ├── inventory
│??? └── test.yml
└── vars???????????? # 定義變量的位置,推薦使用的位置
???? └── main.yml

# 4. 將不同的內(nèi)容分別寫到對應(yīng)目錄的main.yml中
# 4.1 創(chuàng)建motd.j2模板文件
[root@control ansible]# vim roles/motd/templates/motd.j2
Hostname: {{ansible_hostname}}
Date: {{ansible_date_time.date}}
Contact to: {{admin}}

# 4.2 創(chuàng)建變量
[root@control ansible]# vim roles/motd/vars/main.yml? # 追加一行
admin: zzg@tedu.cn

# 4.3 創(chuàng)建任務(wù)
[root@control ansible]# vim roles/motd/tasks/main.yml? # 追加
- name: modify motd
? template:
??? src: motd.j2????? # 這里的文件,自動到templates目錄下查找
??? dest: /etc/motd

# 5. 創(chuàng)建playbook,調(diào)用motd角色
[root@control ansible]# vim role_motd.yml
---
- name: modify motd with role
? hosts: test
? roles:
??? - motd

# 6. 執(zhí)行playbook
[root@control ansible]# ansible-playbook role_motd.yml

????????????? ansible的公共角色倉庫:https://galaxy.ansible.com/

# 在公共倉庫中搜索與httpd相關(guān)的角色
[root@zzgrhel8 ~]# ansible-galaxy search httpd
# 如果找到相應(yīng)的角色,如名字為myhttpd,可以下載它到roles目錄
[root@zzgrhel8 ~]# ansible-galaxy install myhttpd -p roles/

role練習(xí)

1.????????? 創(chuàng)建名為pkgs的角色。用于裝包。包名使用變量pkg代表

2.????????? 創(chuàng)建inst_http.yml,調(diào)用pkgs角色,安裝httpd

3.????????? 創(chuàng)建inst_php.yml,調(diào)用pkgs角色,安裝php

# 1. 創(chuàng)建名為pkgs的角色。
# 1.1 創(chuàng)建角色目錄
[root@control ansible]# ansible-galaxy init roles/pkgs
# 1.2 創(chuàng)建裝包的任務(wù),包名使用變量pkg代表
[root@control ansible]# vim roles/pkgs/tasks/main.yml
---
# tasks file for roles/pkgs
- name: install rpm pkg
? yum:
??? name: "{{pkg}}"
??? state: present
# 1.3 定義變量
[root@control ansible]# vim roles/pkgs/defaults/main.yml
---
# defaults file for roles/pkgs
pkg: httpd

# 2. 創(chuàng)建inst_http.yml,調(diào)用pkgs角色,安裝httpd
[root@control ansible]# vim inst_httpd.yml
---
- name: install httpd pkg
? hosts: test
? roles:
??? - pkgs
[root@control ansible]# ansible-playbook inst_httpd.yml

# 3. 創(chuàng)建inst_php.yml,調(diào)用pkgs角色,安裝php
[root@control ansible]# vim inst_php.yml
---
- name: install php pkg
? hosts: node2
? vars:
??? pkg: php
? roles:
??? - pkgs
[root@control ansible]# ansible-playbook inst_php.yml

ansible加解密文件

????????????? ansible加解密文件使用ansible-vault命令

[root@control ansible]# echo "Hi ni hao" > hello.txt
[root@control ansible]# cat hello.txt
Hi ni hao

# 加密文件
[root@control ansible]# ansible-vault encrypt hello.txt
New Vault password: 123456
Confirm New Vault password: 123456
Encryption successful
[root@control ansible]# cat hello.txt
$ANSIBLE_VAULT;1.1;AES256
37373366353566346235613731396566646533393361386131313632306563633336333963373465
6164323461356130303863633964393339363738653036310a666564313832316263393061616330
32373133323162353864316435366439386266616661373936363563373634356365326637336165
6336636230366564650a383239636230623633356565623461326431393634656666306330663533
6235

# 解密
[root@control ansible]# ansible-vault decrypt hello.txt
Vault password: 123456
Decryption successful
[root@control ansible]# cat hello.txt
Hi ni hao


# 加密后更改密碼
[root@control ansible]# ansible-vault encrypt hello.txt
New Vault password: 123456
Confirm New Vault password: 123456
Encryption successful

[root@control ansible]# ansible-vault rekey hello.txt?? # 改密碼
Vault password: 123456??? # 舊密碼
New Vault password: abcd? # 新密碼
Confirm New Vault password: abcd
Rekey successful

# 不解密文件,查看內(nèi)容
[root@control ansible]# ansible-vault view hello.txt
Vault password: abcd
Hi ni hao


# 使用密碼文件進行加解密
# 1. 將密碼寫入文件
[root@control ansible]# echo 'tedu.cn' > pass.txt
# 2. 創(chuàng)建明文文件
[root@control ansible]# echo 'hello world' > data.txt
# 3. 使用pass.txt中的內(nèi)容作為密碼加密文件
[root@control ansible]# ansible-vault encrypt --vault-id=pass.txt data.txt
Encryption successful
[root@control ansible]# cat data.txt??? # 文件已加密
# 4. 使用pass.txt中的內(nèi)容作為密碼解密文件
[root@control ansible]# ansible-vault decrypt --vault-id=pass.txt data.txt
Decryption successful
[root@control ansible]# cat data.txt
hello world

sudo命令

????????????? 一般用于普通用戶執(zhí)行需要root權(quán)限的命令

????????????? 在node1上配置zhangsan擁有sudo權(quán)限

# 如果沒有zhangsan,手工創(chuàng)建
[root@node1 ~]# visudo?? # 將會打開vi,在尾部追加以下一行
zhangsan? ??????ALL=(ALL)?????? ALL
# 中間的ALL=(ALL)在集中認(rèn)證的域環(huán)境中才有效,單機忽略即可
# zhangsan是用戶名,最后的ALL表示zhangsan可以以管理員的身份執(zhí)行所有命令

# 切換成zhangsan用戶,執(zhí)行命令
[root@node1 ~]# su - zhangsan
[zhangsan@node1 ~]$ useradd wangwu?? # 失敗,因為還是張三身份
[zhangsan@node1 ~]$ sudo useradd wangwu? # 以管理員身份執(zhí)行
... ...
[sudo] password for zhangsan: # 輸入zhangsan的密碼,不是root


# 配置lisi不輸入密碼可以直接運行sudo
[root@node1 ~]# visudo??? # 在最后追加一行
lisi??? ALL=(ALL)?????? NOPASSWD: ALL

# 切換成lisi運行
[root@node1 ~]# su - lisi
[lisi@node1 ~]$ ls /root/?? # 沒權(quán)限
ls: cannot open directory '/root/': Permission denied
[lisi@node1 ~]$ sudo ls /root/??? # 成功運行,無需輸入密碼
a3.txt anaconda-ks.cfg

特殊的主機清單變量

????????????? 如果遠程主機沒有使用免密登陸,如果遠程主機ssh不是標(biāo)準(zhǔn)的22端口,可以設(shè)置特殊的主機清單變量

????????????? ansible_ssh_user:指定登陸遠程主機的用戶名

????????????? ansible_ssh_pass:指定登陸遠程主機的密碼

????????????? ansible_ssh_port:指定登陸遠程主機的端口號

# 刪除遠程主機的/root/.ssh/authorized_keys,以便恢復(fù)通過密碼登陸
[root@control ansible]# ansible all -m file -a "path=/root/.ssh/authorized_keys state=absent"

# 創(chuàng)建新的工作目錄
[root@control ~]# mkdir myansible
[root@control ~]# cd myansible
[root@control myansible]# vim ansible.cfg
[defaults]
inventory = hosts
[root@control myansible]# vim hosts
[group1]
node1
node2
node3
[root@control myansible]# ansible all -m ping? # 報錯,因為無法免密執(zhí)行

# 修改node1 ssh服務(wù)的端口為220
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# vim +17 /etc/ssh/sshd_config
Port 220
[root@node1 ~]# systemctl restart sshd
# 退出再登陸時,需要指定端口號
[root@zzgrhel8 ~]# ssh -p220 192.168.4.11



# 配置ssh通過用戶名、密碼管理遠程主機,通過220端口連接node1
[root@control myansible]# vim hosts
[group1]
node1 ansible_ssh_user=root ansible_ssh_pass=a ansible_ssh_port=220
node2 ansible_ssh_user=root ansible_ssh_pass=a
node3 ansible_ssh_user=root ansible_ssh_pass=a

[root@control myansible]# ansible all -m ping


ansible安裝及教程4的評論 (共 條)

分享到微博請遵守國家法律
青州市| 易门县| 环江| 黑水县| 镇巴县| 江口县| 北海市| 玉林市| 临颍县| 庐江县| 洪湖市| 嵊州市| 闽侯县| 漳浦县| 新建县| 垦利县| 霞浦县| 奉化市| 安达市| 呼伦贝尔市| 安义县| 天柱县| 卢湾区| 阿拉善右旗| 佳木斯市| 苏尼特左旗| 英吉沙县| 建宁县| 蕉岭县| 河北省| 陇南市| 沂源县| 新建县| 凤阳县| 平谷区| 灌阳县| 镇安县| 屏东市| 威信县| 皮山县| 行唐县|