ansible7種常用模塊

什麼是ansible: 基於python研發,(yum也是基於python開發的)
自動發部署APP自動化持續交付自動化雲服務管理

爲什麼選擇ansible:學習,使用成本低性能高使用廣泛,社區活躍度高

ansible優點:只需要ssh和python即可使用無客戶端功能強大,模塊豐富
上手容易門檻低基於python開發,做二次開發容易使用公司多,社區活躍

ansible特性:模塊化設計

一:安裝ansible
華爲雲場景:(不是華爲雲的場景,需要自定義yum倉庫,默認沒有ansible的軟件包)
yum -y install ansible 安裝ansible
ansible --version 驗證

主機管理:
/etc/ansible/ansible.cfg //是ansible的默認配置文件路徑
vim /ect/ansible/ansible.cfg
inventory = /etc/ansible/hosts 去掉註釋 指定配置文件,寫入遠程主機的地址。
host_key_checking = False 去掉註釋 如果爲False ssh時候不需要輸入yes
做主機名映射 /etc/ansible/hosts就可以寫主機名了
192.168.1.41 web1
192.168.1.42 web2
192.168.1.43 db1
192.168.1.44 db2
192.168.1.45 cache
vim /etc/ansible/hosts
[web] web組下有web1,web2 相對應的ip就是1.41 和1.42
web1
web2

[db]
db[1:2]
[other]
cache
當前是雲主機做的ansibal之前做過密鑰對認證
如不是用雲主機做的需要密鑰對連接

inventory擴展參數
vim /etc/ansible/host
[db:vars] //db(組名) :vars是(固定字符)給組定義參數
ansible_ssh_user=“root” //ansible連接db組所有主機時候默認用root用戶連接

[db]
db1
db2 ansible_ssh_port=222 //給單臺機器定義參數,默認連接22,需要指定新的端口
再次用ansible db -m ping //驗證

[app:children] //用children聲明一下是組名並非主機名
db //db組
web //web組

分組信息: web,db,other localhost all (本機和全部是自帶的)
查看分組列表
ansible web --list-hosts //列出web組的主機
ansible db --list-hosts //列出db組的主機
ansible all --list-hosts //列出所有主機
ansible db,web --list-hosts //看db組和web組
ansible db2,web --list-hosts

ansible 組名 -m 模塊的名稱 -a 模塊的參數
ansible web -m ping //ping模塊沒有參數所以不加
ansible all -m ping //如果回覆都是綠色的則環境正確

二 若多人想分不同的組可以自定義配置文件,利用ansible配置文件查找順序在./ansible.cfg
-創建目錄myansible
cd /myansible
創建配置文件必須爲ansible.cfg
[defaults]
inventory = myhost //指定主機文件
host_key_checking = False
-創建並配置主機文件
vim myhost
[app1]
web1
db1
cache
[root@ecs-proxy myansible]# ls
ansible.cfg myhost
在當前目錄測試:ansible app1 --list-hosts
離開當前目錄就測試沒有app1組了
我們配置的分組信息配置文件是靜態的,好處是簡單
主機列表可以是動態,需要用python腳本和json實現。
json是一種基於文本獨立與語言的輕量級數據交互格式, 按照特定的語法,表示特定的含義

一。ansible的使用
查看某個模塊的幫助信息 ansible-doc 模塊名
ansbile-doc -l //列出所有模塊
1.command模塊(默認模塊) 不能執行<>|等一些命令
ansible 主機組 -m 模塊 -a ‘遠程命令’
ansible-doc -l | wc -l //查看ansible模塊數量
ansible web -m command -a ‘uptime’ //-a後面跟在主機組上執行的命令
ansible web -a ‘df -h /’ //默認就是command模塊可以不加

2.sheel模塊大部分命令都可以運行,不能交互
shell模塊開啓/bin/sh
ansible web -m sheel -a ‘ss -ntulp | grep 80’
ansible web -m shell -a “echo ${HOSTNAME}” 雙引號是輸出本機主機名
ansible web -m shell -a ‘echo ${HOSTNAME}’ 單引號是遠程主機主機名
ansible執行命令是二次解析,第一次在本機第二次在遠程主機

3.script模塊,把本機的腳本考到遠程主機執行,在把遠程主機的腳本刪除掉
ansible 主機組 -m script -a ‘腳本所在的路徑’
vim uu.sh
案例一:在所有web主機上創建wk
要求有nb用戶不能和wk用戶出現在一臺主機上
設置wk用戶的密碼爲456
vim uu.sh
#!/bin/bash
id nb
if [ $? -ne 0 ];then
useradd wk
echo 456 | passwd --stdin wk
fi
ansible web -m script -a ‘./uu.sh’ //執行當前路徑下的腳本uu.ssh
也可以在腳本里寫
id nb || useradd wk && echo 456 | passwd --stdin wk
前面命令執行成功了則不執行後面命令
前面命令執行失敗則創建用戶並且設置密碼

4.yum模塊的使用 裝包用
name:要進行操作的軟件包名字
state:動作(installed,removed)
yum -y install httpd
state(動作) name(名字)
ansible db -m yum -a 'name=“mariadb-server”‘state=installed’
ansible db -m yum -a 'name=“mariadb-server,lrzsz”‘state=“installed”’
//如果下多個軟件用逗號間隔
ansible web -m yum -a ‘name=“lrzsz”,“gcc” state=“installed”’

5.service模塊 啓服務用
name:必選項,服務名稱
enabled:是否開機啓動yes|no
sleep:執行restarted,會在stop和start之間沉睡幾秒
state:對當前服務執行啓動,停止,重啓等操作 started,stopped,restarted,reloaded
ansible db -m service -a ‘name=“mariadb” state=“started” enabled=“yes”’

6.capy模塊
複製文件到遠程主機
ansible web -m copy -a ‘src=/etc/resolv.conf dest=/etc/resolv.conf’ //src=本地文件 dest的遠程主機文件
ansible web -m shell -a ‘cat /etc/resolv.conf’
複製目錄到遠程主機
ansible web -m copy -a ‘src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/’
格式跟sync差不多不加斜槓整個目錄就同步過去了
ansible web -m shell -a ‘yum repolist’

  1. lineinfile模塊 匹配到那一行,把那一行刪了改爲line=的樣子
    參數path 要修改的文件
    regexp 要修改的行(使用正則表達式)
    line 修改後的樣子
    ansible db -m lineinfile -a ‘path="/etc/my.cnf" regexp="^binlog-format" line=“binlog-format = row”’

8.replace 匹配到什麼就修改什麼
參數 path 要修改的文件
regexp 要修改的字符(使用正則表達式)
replace 修改後的字符
ansible db -m replace -a ‘path="/etc/my.cnf" regexp=" row$" replace=" mixed"’
replace和lineinfile的區別是,lineinfile是整行替換,replace是匹配什麼替換什麼,後面不動。
換單個字符用replace 換整句用lineinfile

  1. setup模塊
    參數filter:過濾所需信息
    ansible db -m setup -a ‘filter=ansible_distribution’
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章