1. 程式人生 > >ansible批量搞機部署及常用模組(一)

ansible批量搞機部署及常用模組(一)

什麼是ansible?
• Ansible是2013年推出的一款IT自勱化和DevOps軟
件,目前由Redhat已簽署Ansible收購協議。其是基
於Python研發,糅合了很多老運維工具的優點實現
了批量作業系統配置,批量程式的部署,批量執行命
令等功能
• ansible可以讓我們實現:
– 自動化部署APP
– 自動化管理配置項
– 自動化的持續交付
– 自動化的(AWS)於服務管理


為什麼要選擇ansible ?
• 選擇一款配置管理軟體總的來說,無外乎從以下幾點來權衡利弊
– 活躍度(社群活躍度)
– 學習成本
– 使用成本
– 編碼詫言
– 效能
– 使用是否廣泛


主機定義與分組
• 安裝好了 Ansible 之後就可以開始一些簡單的任務了

• Ansible配置檔案查詢順序
– 首先檢測 ANSIBLE_CONFIG 變數定義的配置檔案
– 其次檢查當前目彔下的 ./ansible.cfg 檔案
– 再次檢查當前使用者家目彔下 ~/ansible.cfg 檔案
– 最後檢查 /etc/ansible/ansible.cfg 檔案

• /etc/ansible/ansible.cfg 預設配置檔案路徑


實驗環境:
  1 ansible1  192.168.1.10   管理機器
  2 web1     192.168.1.11   託管機器
  3 web2     192.168.1.12   託管機器
  4 db1      192.168.1.21   託管機器
  5 db2      192.168.1.22   託管機器
  6 cache    192.168.1.33   託管機器

一、部署和配置
1. 在 ansible 管理機器上,配置源
yum install -y ansible

2.安裝完成以後執行,沒有報錯,正確顯示版本即可
ansible --version

ansible 的配置檔案是 ansible.cfg 
ansible.cfg 的查詢順序是 
1)ANSIBLE_CONFIG 變數定義的配置檔案
2 ) 當前目錄下的 ./ansible.cfg 檔案
3 ) 前使用者家目錄下 ~/ansible.cfg 檔案
4) /etc/ansible/ansible.cfg 檔案


3. ansible.cfg 中 inventony 指定主機分組檔案的路徑和地址,預設分組檔案 hosts
 14 inventory      = /etc/ansible/hosts   //一般都和ansible.cfg在一個檔案路徑 

hosts 的配置
[web]
web[1:2]

[db]
db1
db2

[app:children]  #指定子組[web組和db組就是子組]
web
db

[app:vars]
ansible_ssh_user="root"
ansible_ssh_pass="123456"

[other]
cache        

3.1 也可以自定義與分組
[[email protected] ~]# mkdir ooxx & cd ooxx
[[email protected] ooxx]# vim ansible.cfg     //建立ansible.cfg檔案 
[defaults]
inventory   = hosts
host_keys_checking = False

4. 動態主機
ansible 的inventony 檔案可以是靜態也可以是指令碼(輸出格式 json)
修改 ansible.cfg 
inventory      = urscript

一個shell 指令碼樣例
#!/bin/bash
echo '
{
    "web"   : ["web1", "web2"],
    "db"    : ["db1", "db2"],
    "other" : ["cache"]
}'

二、常用模組
1.語法格式 
ansible  命令基礎
ansible  主機分組  -m 模組  -a '命令和引數'

ansible命令基礎
• ansible <host-pattern> [options]
– host-pattern 主機戒定義的分組

-M 指定模組路徑
-m 使用模組,預設 command 模組
-a or --args 模組引數
-i inventory 檔案路徑,戒可執行指令碼
-k 使用互動式登彔密碼
-e 定義變數
-v 詳紳資訊,-vvvv 開吭 debug 模式

2.ping模組(主要是檢測託管主機ssh的連通性,與 ping(ICMP)無關)
a.先修改hosts檔案這裡以cache主機為例子
[[email protected] ~]# vim /etc/ansible/hosts
[other]
cache        ansible_ssh_user="root" ansible_ssh_pass="123456"  ansible_ssh_port=22

b.接下來使用ping模組
[[email protected] ~]# ansible  other -m ping    //這裡因為other組只有cache,所以寫組或者寫主機都是可以的
cache | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

3.authorized_key模組(批量傳遞公鑰)         //做這個可以簡化後期的操作,不用像上面在主機後面加新增使用者和密碼了

a.建立金鑰對 id_rsa 是私鑰,  id_rsa.pub 是公鑰
ssh-keygen -f /root/.ssh/id_rsa  -N ''

b.給所有主機部署金鑰
ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key='$(< /root/.ssh/id_rsa.pub)'" -k


4.command | shell | raw 模組
command 是預設模組,沒有啟用 shell ,所有shell 相關特性命令無法使用,例如 < > | &  set
raw    模組,沒有 chdir create remove 等引數,能執行大部分操作(一些古老的uliunx系統)
shell  模組,啟動 /bin/sh 執行命令,可以執行所有操作

測試
ansible cache -m command -a 'chdir=/tmp touch f1'   建立成功
ansible cache -m shell -a 'chdir=/tmp touch f2'     建立成功
ansible cache -m raw -a 'chdir=/tmp touch f3'       檔案可以建立,但無法切換目錄,檔案在使用者家目錄下生成


[[email protected] ~]# ansible cache  -a 'cat /etc/passwd | wc -l'    //執行失敗
[[email protected] ~]# ansible cache  -m shell -a 'cat /etc/passwd | wc -l'   //執行成功


5.script 模組(支援shell指令碼)
複雜操作怎麼辦,使用指令碼來解決
[[email protected] ~]# cd /etc/ansible/

[[email protected] ansible]# vim uscript.sh
#!/bin/bash
id  zhang3
if [ $? != 0 ];then
    useradd li4
    echo 123456 |passwd --stdin li4
      chage  -d  0  li4       //要求li4在第一次登陸的時候必須修改密碼                    
fi

ansible all -m script -a "uscript.sh"   //這裡指令碼是在當前路徑,可以直接相對路徑,如果不是在當前路徑需要寫絕對路徑


6.copy lineinfile replace 模組
copy 把檔案釋出到遠端其他主機上面
lineinfile  修改一個檔案的一行,以行為基礎,整行修改
replace    修改檔案的某一部分,以正則表示式匹配為基礎修改

a. 利用 copy 模組修改所有機器的 /etc/resolv.conf 為 
[[email protected] ~]# vim /etc/resolv.conf
nameserver 8.8.8.8

[[email protected] ~]# ansible all -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'

b. 利用 lineinfile 修改 /etc/sysconfig/network-scriopts/ifcfg-eth0(整行替換) 
ONBOOT=yes|no
ansible cache -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^ONBOOT" line="ONBOOT=\"no\""

c. 利用 replace 修改 /etc/sysconfig/network-scriopts/ifcfg-eth0  ONBOOT=no|yes(匹配什麼替換什麼)
ansible cache -m replace -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^(ONBOOT=).*" replace="\1\"yes\""'


7. yum 模組  installed 安裝, removed 刪除
ansible other -m yum -a 'name="lrzsz" state=removed' 
ansible other -m yum -a 'name="lftp"  state=removed'
ansible other -m yum -a 'name="lrzsz,lftp" state=installed'


8.service 模組  name 指定服務名稱,enabled= yes|no 設定開機啟動, state=stopped|started 啟動關閉服務

設定 chronyd 服務開啟啟動,並啟動服務
ansible other -m service -a 'name="chronyd" enabled="yes"  state="started"'

9.setup 模組,檢視資訊  filter 過濾指定的關鍵字


模組 
ansible-doc  檢視幫助,必須掌握
ansible-doc -l  列出所有模組
ansible-doc  模組名   檢視該模組的幫助資訊

相關推薦

ansible批量部署常用模組

什麼是ansible? • Ansible是2013年推出的一款IT自勱化和DevOps軟 件,目前由Redhat已簽署Ansible收購協議。其是基 於Python研發,糅合了很多老運維工具的優點實現 了批量作業系統配置,批量程式的部署,批量執行命 令等功能 • ansib

python標準庫常用模組-----------------------------time模組詳解相關演示程式碼

要想了解time模組,我們需要首先了解一下時間的三種表現形式: 1.時間戳:當前距離1970年的秒數 2.格式化的字串:即2018年9月11日的這種表現形式 3.struct_time:元組時間,以元組的形式顯示時間,一共有九個元素 下面來介紹一下它具體的方法及示例程

ansible常用模組

運維自動化發展歷程及技術應用   ansible命令執行過程  載入自己的配置檔案 預設/etc/ansible/ansible.cfg  載入自己對應的模組檔案,如command 通過ansible將模組或命令生成對應的臨時py檔案,並將該 檔案傳輸至遠端伺服器的對

Hadoop建設工具Ambari的安裝部署完整使用——介紹

一.介紹(請詳見百度百科等連結) 1.Hadoop介紹 Hadoop原本來自於谷歌一款名為MapReduce的程式設計模型包。谷歌的MapReduce框架可以把一個應用程式分解為許多平行計算指令,跨大量的計算節點執行非常巨大的資料集。Hadoop這個名字不是一個縮寫,而是一個虛構的名字

模組、包常用模組time/random/os/sys/shutil

一、模組 模組的本質就是一個.py 檔案。 匯入和呼叫模組: import module from module import xx from module.xx.xx import xx as rename from module.xx.xx import * 模組呼叫時發生了三件事: i

DAY-8 Linux基礎常用命令4

打開 ip地址 grep 軟件包 linux基礎 tro mks 官網 vim 一、制作swap分區(命令) swapon –s 查看當前激活狀態的swap分區 free –m 以m為單位查看分區 swapoff關閉分區 swapon打開分區 添加swap分區——mks

DAY-9 Linux基礎常用命令5

mod conf 自己的路 linux操作 解包 二進制安裝 netstat iptables usr 一、Samba(類似共享網盤) 1、功能:Linux操作系統給win用戶共享文件用 2、如何部署 》》準備環境:iptables –F(清除防火墻)、systemctl

logstash部署基本語法

.com linu TE www. tput dex 格式 sea mage 一、logstash介紹 Logstash是一個開源的數據收集引擎,可以水平伸縮,而且logstash是整個ELK當中擁有最多插件的一個組件,其可以接收來自不同源的數據並統一輸入到指定的且可以是不

Learning-Python【21】:Python常用模組4—— re、logging、hashlib、subprocess

re 模組:與正則相關的模組 在使用 re 模組之前,需要先了解正則表示式(regular expression),描述了一種字串匹配的模式(pattern),可以用來檢查一個字串是否含有某個子字串、將匹配的子字串替換或者從某個字串中取出符合某個條件的子字串等。 import

Learning-Python【19】:Python常用模組2—— os、sys、shutil

os模組:與作業系統相關的模組 import os # 獲取當前的工作目錄 print(os.getcwd()) # 切換工作目錄 os.chdir(r'E:\Python\test') print(os.getcwd()) # 當前目錄, 一個點 print(o

Hadoop建設工具Ambari的安裝部署完整使用——Ambari使用之叢集解除安裝

五.Ambari使用——解除安裝叢集 方式一: ambari本身並沒有提供基於web管理端的自動化解除安裝的功能。ambari web管理端的操作更多的是實現服務或是主機的擴充套件(無法完全清除服務和主機)。因此本人通過實踐,也整理了一份手動解除安裝指令碼: 注:因為此指令碼只是根

Hadoop建設工具Ambari的安裝部署完整使用——Ambari使用之叢集建立

四.Ambari使用——建立叢集 登入並建立叢集 1) 以管理員登入ambari-server,使用者名稱和密碼預設為:admin/admin 2) 點選【Launch Install Wizard】開始安裝叢集   3) 給叢集命名

Hadoop建設工具Ambari的安裝部署完整使用——部署安裝

三.部署安裝 1.安裝Ambari-server 線上安裝 1) 在hortonworks公共資源庫,選擇ambari倉庫地址並下載 wget http://s3.amazonaws.com/public-repo-1.hortonworks.com/ambari/centos

Hadoop建設工具Ambari的安裝部署完整使用——準備工作

二.準備工作   關於linux環境建立,yum源配置等基礎系統搭建過程就不在此贅述了。以下內容完全是基於centos7環境,root使用者。   1.安裝JAVA環境 1) 下載jdk套件,此處作者使用的是:jdk1.8.0_111 (選擇合適的穩定版本即可

Python3常用語句用法介紹——print/import/賦值語句

1.print語句 ①括號括起來(自python3),逗號隔開 ②輸出時,隔開的各個字串前會自動加空格 ③需要輸出的符號可包含在字串中,也可單獨輸出,使用+號則不增加空格 ④同行列印的幾種方法 2.import語句 ①輕量化:匯入某模組的某函式 ②大塊匯入:匯入某

Python3常用資料結構方法介紹——列表

一.列表 list 1特點: ①列表可更改 ②方括號 [1, 2, 3] 2常用列表操作: ①索引: >>> list1 = [1,2,3,4,5,6,7,8,9,10] >>> list1[4] 5 ②分片: >>>

安裝JDK和Tomcat常用命令Linux

檢視ip: -------------------------- ifconfig -a 配置網路選項 ------------------------ setup service network restart (配置完IP等必須重啟網路服務才生效) 檢視使用者登入資

selenium模組:介紹安裝

一、介紹 selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript程式碼的問題。 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點選、下拉等,來拿到網頁渲染之後的結果,可支援多種瀏覽器 f

Python常用模組1

一、 collections 模組 python中的擴充套件資料型別 在內建資料型別(dict、list、set、tuple)的基礎上,collections模組還提供了幾個額外的資料型別:Counter、deque、defaultdict、namedtuple和OrderedDict等。 1.name

python標準庫常用模組-----------------------------OS模組詳解,呼叫系統的命令

OS模組是呼叫系統命令的模組,和執行cmd的命令相似。 1.獲取當前的工作目錄:getcwd() 2.改變當前指令碼的工作目錄:chdir(path) 3.返回當前目錄:curdir() 4.獲取當前目錄的父目錄:pardir() 5.若目錄為空,則刪除,遞迴到上一