ansible批量管理服務(wù)

ansible批量管理

ansible優(yōu)勢

1.ansible無需單獨安裝客戶端,也不需要啟動任何服務(wù)
2.ansible是python中的一套完整的自動化執(zhí)行任務(wù)模塊
3.ansible playbook(劇本)感混,采用yaml配置,對于自動化任務(wù)執(zhí)行一目了然
4.ansible模塊較多吧史,對于自動化的場景比較豐富

image.png

管理機安裝ansible

yum install -y ansible

1、查看ansible下的配置文件

[ root@m01 ~]# rpm -ql ansible|grep -v /usr/
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles

2、編輯主機配置清單

vim /etc/ansible/hosts
最后一行
創(chuàng)建一個主機清單纯出,名稱為oldboy
[oldboy]
172.16.1.31
172.16.1.41
172.16.1.7

3昼窗、使用ping檢查

ansible oldboy -m ping
oldboy ---是主機清單的名稱
-m ---表示使用什么模塊

[root@m01 ~]# ansible oldboy -m ping
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"      \\pong表示通了
}
172.16.1.31 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"      \\pong表示通了
}
172.16.1.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"      \\pong表示通了
}

ansible模塊

格式:ansible +主機清單+指定模塊的參數(shù)+模塊名稱+執(zhí)行命令的參數(shù)+命令
ansible oldboy -m command hostname -I
-m ---指定模塊的參數(shù)
-a ---模塊中的命令或參數(shù)

命令行中查詢模塊的參數(shù)

ansible-doc -s +模塊名稱

官網(wǎng)查詢模塊的應(yīng)用

https://docs.ansible.com
網(wǎng)站中主要的單詞
src source源
dest 目標(biāo)
content 文件內(nèi)容
state 狀態(tài)

1是趴、command模塊

執(zhí)行命令的模塊
默認(rèn)的模塊:只能執(zhí)行簡單的命令。不支持特殊符號

2澄惊、shell模塊

萬能模塊 支持特殊符號及正則表達(dá)式
可以執(zhí)行命名或腳本

3唆途、copy模塊

推送文件的模塊
src= 源 推送數(shù)據(jù)的全路徑
dest= 目標(biāo) 推送數(shù)據(jù)的目標(biāo)路徑
owner= 指定推送文件的所有者信息
group= 指定推送文件的用戶組信息
mode= 指定推送文件的權(quán)限信息
backup= 對傳送過去的數(shù)據(jù)進行備份
content= 批量在服務(wù)端文件內(nèi)添加內(nèi)容 先清空再增加 與src二選一
force=yes 強制覆蓋 (默認(rèn)為yes)
force=no 對端不存在該文件時才覆蓋

4富雅、script模塊

先把腳本傳送到遠(yuǎn)端再執(zhí)行

5、yum模塊

安裝模塊
name 指定要安裝的軟件包名稱
state 要執(zhí)行的yum動作 installed&present 安裝軟件包 lastet更新軟件包

6肛搬、file模塊

文件模塊
path 指定遠(yuǎn)程主機目錄或文件信息
recurse 遞歸授權(quán)
state directory 在遠(yuǎn)端創(chuàng)建目錄
state touch 在遠(yuǎn)端創(chuàng)建文件
state absent 刪除文件或目錄
state link&hard 創(chuàng)建軟連接或硬鏈接文件
mode 設(shè)置文件或目錄權(quán)限
owner 設(shè)置文件或目錄屬主信息
group 設(shè)置文件或目錄屬組信息

6没佑、service模塊

開啟 關(guān)閉 重啟服務(wù)模塊
name 指定服務(wù)名稱
state started 啟動服務(wù)
state stoped 停止服務(wù)
state restarte 重啟服務(wù)
state reload 平滑重啟
enabled:yes 讓服務(wù)開機自啟 no 默認(rèn)disable

7、group模塊

組模塊
name 指定創(chuàng)建的組名
gid 指定組的gid
state absent 移除遠(yuǎn)端主機的組
state present 創(chuàng)建遠(yuǎn)端的組

8温赔、user模塊

用戶模塊
name 創(chuàng)建的用戶名
uid 指定創(chuàng)建用戶的uid
gid 指定創(chuàng)建用戶的gid
group 指定用戶組名稱
groups 指定附加組名稱
password 給用戶添加密碼
shell 指定用戶登錄shell
create_home 是否創(chuàng)建家目錄

9蛤奢、mount模塊

掛載模塊
src 目標(biāo)路徑
path 掛載路徑
fstype 掛載類型
opts 掛載方式
state present 僅將掛載信息寫入fstab
state mounted 掛載并將信息寫入fstab
state umount 取消掛載
state absent 取消掛載并清除fstab內(nèi)的掛載

10、cron模塊

定時任務(wù)模塊
minute=* hoour=* day=* month=* weekday=*
job 要執(zhí)行的動作
minute=* 分
hour=* 時
day=* 日
month=* 月
weekday=* 周

ansible各模塊使用案例

模塊案例

推送 ansible all -m copy -a 'src=/etc/hostname dest=/tmp/'
查看 ansible all -a 'cat /tmp/hostname'

copy模塊

推送文件模塊

[root@m01 ~]# ansible all -m copy -a 'src=/etc/hostname dest=/tmp/'
172.16.1.31 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "f434396716e2c9aed47cfde87c491cce5a2c08fa", 
    "dest": "/tmp/hostname", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "318d7defb693a2eb0d4f1a7a96575a57", 
    "mode": "0644", 
    "owner": "root", 
    "size": 4, 
    "src": "/root/.ansible/tmp/ansible-tmp-1559017854.64-224769717508792/source", 
    "state": "file", 
    "uid": 0
}
...省略
[root@m01 ~]# ansible all -a 'cat /tmp/hostname'
172.16.1.31 | CHANGED | rc=0 >>
m01

172.16.1.41 | CHANGED | rc=0 >>
m01

172.16.1.7 | CHANGED | rc=0 >>
m01
[root@m01 ~]# ansible all -m copy -a 'src=/etc/hosts dest=/tmp/hostname backup=yes' 
172.16.1.31 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/tmp/hostname.8691.2019-05-28@12:41:13~", 
    "changed": true, 
    "checksum": "d2c63329a65fa8c2a390e468cf037e28e6796f0f", 
    "dest": "/tmp/hostname", 
    "gid": 0, 

script 模塊

[root@m01 ~]# #ansible all  -m script  -a "/server/scripts/yum.sh"
[root@m01 ~]# ansible all -a 'rpm -qa ipvsadm'
 [WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because
yum, dnf or zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.

172.16.1.41 | CHANGED | rc=0 >>
ipvsadm-1.27-7.el7.x86_64

172.16.1.7 | CHANGED | rc=0 >>
ipvsadm-1.27-7.el7.x86_64

yum模塊

ansible all   -m yum  -a 'name=sl state=present'

使用yum模塊的格式為:‘name=命令 state=present或者install(表示動作)’

file模塊

[root@m01 ~]# #ansible all -m file  -a 'path=/tmp/a/b/c/d/e/f/g   state=directory '
[root@m01 ~]# #ansible all -m file  -a 'path=/tmp/a/b/c/d/e/f/g/oldboy.txt   state=touch '
[root@m01 ~]# ansible all  -a 'tree  /tmp/ '

user模塊

caiav 創(chuàng)建用戶指定uid和gid 1111让腹,不創(chuàng)建家目錄也不允許登陸

groupadd -g 1111  caiav 
useradd -u 1111 -g caiav    -s /sbin/nologin  -M  caiav 

ansible all -m group  -a 'name=caiav gid=1111 state=present'
ansible all -m user  -a  'name=caiav uid=1111 group=caiav  shell=/sbin/nologin create_home=no '

cron模塊

[root@m01 /etc/ansible]# vim cron.yml 
---
  - hosts: all
    tasks:
    - name: chuangjian dingshirenwu
      cron:
        name: sync time V2
        minute: "*/10"
        job: /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
        state: present

- hosts: all ---指定主機清單
注:開頭縮進兩個空格

tasks: ---指定工作內(nèi)容
注:比- hosts還縮進兩個空格

- name: ---指定要做的事兒的名字
注:比tasks還縮進兩個空格

cron: ---模塊名稱
注:比- name還縮進兩個空格

命令行執(zhí)行定時任務(wù)

1.檢查是否安裝ntpdate

[09:32 root@m01 ~]# ansible all -a 'rpm -qa ntpdate'

2.每5分鐘同步一次時間:

[09:34 root@m01 ~]# ansible all -m cron  -a 'name="sync time" minute="*/5" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1"'

3.再添加一個定時任務(wù)

[09:55 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1"'

4.把此定時任務(wù)刪除:

[09:55 root@m01 ~]# ansible all -m cron -a 'name="guoav-date" state=absent'

查看一下

[09:56 root@m01 ~]# ansible all -a 'crontab -l'

5.再添加一個定時任務(wù)

[09:57 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1"'

6.給定時任務(wù)添加注釋:

[10:00 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" disabled=yes'

查看一下

[10:00 root@m01 ~]# ansible all -a 'crontab -l'
172.16.1.31 | CHANGED | rc=0 >>
#Ansible: guoav-date
#*/30 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

7.取消注釋:

[10:02 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" disabled=no'

查看一下

[10:02 root@m01 ~]# ansible all -a 'crontab -l'
172.16.1.7 | CHANGED | rc=0 >>
#Ansible: guoav-date
*/30 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

mount掛載模塊

1.首先保證nfs01客戶端的nfs服務(wù)開啟
[10:12 root@nfs01 ~]# systemctl is-active rpcbind
active
[10:13 root@nfs01 ~]# systemctl is-active nfs
active
2.將/nfs共享目錄掛載到web01服務(wù)端上
[10:09 root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs    172.16.1.0/24
/upload 172.16.1.0/24
[10:09 root@web01 ~]# mount -t nfs 172.16.1.31:/nfs/ /mnt/
[10:09 root@web01 ~]# df -h
Filesystem        Size  Used Avail Use% Mounted on
/dev/sda3          19G  1.7G   18G   9% /
devtmpfs          476M     0  476M   0% /dev
tmpfs             487M     0  487M   0% /dev/shm
tmpfs             487M  7.7M  479M   2% /run
tmpfs             487M     0  487M   0% /sys/fs/cgroup
/dev/sda1         197M  105M   93M  54% /boot
tmpfs              98M     0   98M   0% /run/user/0
172.16.1.31:/nfs   19G  1.7G   18G   9% /mnt
測試完把/mnt卸載掉:
umount /mnt
3.用ansible將/nfs掛載到web01上的/upload

1.查看掛載信息
2.掛載 state=mounted
3.查看

[10:27 root@m01 ~]# ansible 172.16.1.7 -a 'showmount -e 172.16.1.31'
172.16.1.7 | CHANGED | rc=0 >>
Export list for 172.16.1.31:
/nfs    172.16.1.0/24
/upload 172.16.1.0/24

[10:26 root@m01 ~]# ansible 172.16.1.7 -m mount -a 'fstype=nfs src=172.16.1.31:/nfs path=/upload state=mounted'
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/upload", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "172.16.1.31:/nfs"
}

[10:26 root@m01 ~]# ansible 172.16.1.7 -a 'df -h'
172.16.1.7 | CHANGED | rc=0 >>
Filesystem        Size  Used Avail Use% Mounted on
....
172.16.1.31:/nfs   19G  1.7G   18G   9% /upload
4.不掛載远剩,只添加到fstab文件

state=present

[10:46 root@m01 ~]# ansible 172.16.1.7 -m mount -a 'fstype=nfs src=172.16.1.31:/date path=/tmp state=present'
5.卸載,會刪除/etc/fstab

state=absent

[11:04 root@m01 ~]# ansible 172.16.1.7 -m mount -a ' src=172.16.1.31:/nfs path=/upload state=absent'

查看命令行的返回值是否執(zhí)行成功

asnible的變量

一、實現(xiàn)變量調(diào)用的方法:

1.在nfs01 backup 創(chuàng)建/backup/lidao的目錄 骇窍,把 /etc/目錄打包壓縮到/backup/lidao目錄下面 etc.tar.gz 瓜晤,目錄名存放在變量中

image
[09:55 root@m01 /etc/ansible]# vim vars.yml 
---
  - hosts: all
    vars:
      dir1: /backup/lidao
    tasks:
    - name: mkdir
      file:
        path: "{{ dir1 }}"
        state: directory
    - name: tar /etc
      archive:
        path: /etc
        dest: "{{ dir1 }}/etc.tar.gz"

image
image

二、變量注冊

1.注冊變量信息

[11:31 root@m01 /etc/ansible]# vim vars1.yml 
---
  - hosts: all
    tasks:
      - name: ip
        shell: hostname -I|awk '{print $NF}'
        register: ipaddr
      - name: print ip
        shell: echo {{ ipaddr.stdout }} >>/tmp/ip.txt

2.追加到文件中

image

3.查看追加過去的內(nèi)容:

最后的一行是stdout_lines: [u172.16.1.31] 是我們要的內(nèi)容

image

4.ansible的調(diào)試

需要用到叫register的內(nèi)容
把/etc/打包備份到/backup/ip地址命名目錄/etc-時間.tar.gz
(因為時間關(guān)系這里就打包/etc下的profile和hosts了)
ip是每臺機器的內(nèi)網(wǎng)ip
時間是當(dāng)天的日期:年-月-日

image
[12:10 root@m01 /etc/ansible]# vim vars.yml 
---
  - hosts: all
    tasks:
    - name: ip
      shell: hostname -I|awk '{print $NF}'
      register: ipaddr
    - name: date
      shell: date +%F
      register: time

    - name: mkdir dir
      file:
        path: /backup/{{ ipaddr.stdout }}
        state: directory
    - name: tar /etc/profie && /etc/hosts
      archive:
        path: /etc
        dest: /backup/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz
    - name: mkdir xf-dir
      file:
        path: /backup/{{ ipaddr.stdout }}/tc-{{ time.stdout }}
        state: directory
    - name: tar xf
      unarchive:
        src: /backup/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz
        copy: no
        dest: /backup/{{ ipaddr.stdout }}/

三腹纳、內(nèi)置變量

image
查看主機名:
[12:35 root@m01 /etc/ansible]# vim vars2.yml
---
  - hosts: all
    tasks:
      - name: 內(nèi)置變量
        debug: msg={{ ansible_hostname }}

四痢掠、查看所有內(nèi)置變量

用ansible_facts 內(nèi)容太多可以篩選

[12:35 root@m01 /etc/ansible]# vim vars2.yml
---
  - hosts: all
    tasks:
      - name: 內(nèi)置變量
        debug: msg={{ ansible_facts }}

循環(huán)的使用

---
- hosts: all
  remote_user: root
  tasks:
    - name: Installed Pkg
      yum: name={{ item }} state=present
      with_items:
        - wget
        - tree
        - lrzsz

判斷的使用

[root@m01 ~]# vim 05.var.yaml
---
   - hosts: all
     tasks:
       - name: yum
         yum:
          name: tree
          state: installed
         when: (ansible_hostname == 'nfs01')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘲恍,隨后出現(xiàn)的幾起案子足画,更是在濱河造成了極大的恐慌,老刑警劉巖佃牛,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淹辞,死亡現(xiàn)場離奇詭異,居然都是意外死亡俘侠,警方通過查閱死者的電腦和手機象缀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爷速,“玉大人央星,你說我怎么就攤上這事”苟” “怎么了莉给?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廉沮。 經(jīng)常有香客問我颓遏,道長,這世上最難降的妖魔是什么滞时? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任叁幢,我火速辦了婚禮,結(jié)果婚禮上漂洋,老公的妹妹穿的比我還像新娘遥皂。我一直安慰自己,他們只是感情好刽漂,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布演训。 她就那樣靜靜地躺著,像睡著了一般贝咙。 火紅的嫁衣襯著肌膚如雪样悟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天庭猩,我揣著相機與錄音窟她,去河邊找鬼。 笑死蔼水,一個胖子當(dāng)著我的面吹牛震糖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趴腋,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼吊说,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了优炬?” 一聲冷哼從身側(cè)響起颁井,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢护,沒想到半個月后雅宾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡葵硕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年眉抬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贬芥。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡吐辙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蘸劈,到底是詐尸還是另有隱情昏苏,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布威沫,位于F島的核電站贤惯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棒掠。R本人自食惡果不足惜孵构,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烟很。 院中可真熱鬧颈墅,春花似錦蜡镶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至毒坛,卻和暖如春望伦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煎殷。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工屯伞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豪直。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓劣摇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親弓乙。 傳聞我的和親對象是個殘疾皇子饵撑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容