ansible - 基本用法

ansible - 01

一. 安裝與使用

一、安裝epel源linux

yum install -y wget # 安裝wget

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 下載epel源文件

二、安裝ansibleweb

yum install ansible -y

ansible命令格式

Usage: ansible <host-pattern> [options]
-a MODULE_ARGS, --args=MODULE_ARGS # 模塊的參數
 -C, --check  # 會去執行,可是不作任何的改變,幹跑,白跑
 -f FORKS, --forks=FORKS # 指定進程數,作併發
 --list-hosts #列出主機
 -m MODULE_NAME # 模塊名稱
 --syntax-check #檢查語法
 -k, --ask-pass      ask for connection password #指定密碼

查看ansible生成的配置文件

rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
10.0.0.132
10.0.0.133
10.0.0.134

ssh認證方式

  • 密碼redis

  • 祕鑰shell

    ssh-keygen # 生成祕鑰
    
          ssh-copy-id root@10.0.0.132 # 將祕鑰文件複製到遠程主機

ansible的第一個命令

ansible 10.0.0.132 -m ping
ansible 10.0.0.133 -m ping
ansible 10.0.0.134 -m ping
ansible all -m ping # 全部機器,
    hosts文件裏面
ansible 10.0.0.133,10.0.0.132 -m ping # 部分機器
## 分組信息
[web]
10.0.0.132
10.0.0.133
[db]
10.0.0.133
10.0.0.134
[cache]
10.0.0.134
## www[001:006].example.com 從www001到www006
ansible web --list-hosts # 用來獲取符合條件的主機
ansible web -m ping # 探測組內的機器
ansible web,db -m ping # 獲取db和web的並集
ansible 'web:&db' -m ping # 獲取db和web的交集
ansible 'web:!db' -m ping # 獲取db和web的差集,在web中可是不在db中的
ansible 'web:db' -m ping # 獲取db和web的並集

弱口令校驗

密碼要符合的規則django

  • 必須有大寫字母,小寫字母,數字,特殊字符
  • 密碼必須12位以上
  • 密碼須要三個一換

host-pattern的格式

  • 單個的主機json

    ansible 127.0.0.1 -m ..
      逗號分隔
  • 單個組flask

    ansible 組名 -m ...
  • 多個組
    • 交集
      • ‘web:&db’
    • 並集
      • ‘web:db’
      • web,db
    • 差集windows

      • ‘web:!db’
  • 全部的機器 allcentos

  • 多個主機

模塊

獲取模塊幫助信息

Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j, --json #以json的方式返回全部模塊的信息
-l # 列出全部的模塊
-s, --snippet # 以片斷式顯示模塊的幫助信息
# 顯示所有信息
ansible-doc -l |wc -l #統計ansible的模塊

command

執行遠程主機上的命令, 不特殊字符支持

chdir #切換目錄,通常在編譯安裝
creates # 判斷是否存在,若是存在,就不執行,若是不存在,就執行
removes # 若是不存在,就不執行,若是存在,就執行

ansible web -m command -a "pwd" 
ansible web -m command -a "ls /tmp"
ansible web -m command -a "chdir=/tmp pwd" # 切換目錄,通常作編譯安裝
ansible web -m command -a "creates=/tmp pwd" # 不被執行,由於/tmp已經存在,
ansible web -m command -a "creates=/tmp2 pwd" # 被執行,由於/tmp2目錄不存在
ansible web -m command -a "creates=/tmp2 mkdir /data" # 會被執行,由於/tmp2目錄不存在
ansible web -m command -a "removes=/tmp2 pwd"   # 不被執行,由於/tmp2目錄不存在
ansible web -m command -a "removes=/tmp pwd" # 會被執行,由於/tmp已經存在,

補充

#查看用戶建立成功與否
1.ll /home
2.tail -1 /etc/passwd
3.tail  /etc/shadow
4.id alex
echo "alex3714" |passwd --stdin alex # 給用戶設置密碼,不須要二次確認
[root@localhost ~]# name=alex
[root@localhost ~]# echo "$name"
alex
[root@localhost ~]# echo '$name'
$name
shabang

shell

執行遠程主機的命令或腳本

ansible web -m shell -a "echo 'alex'|passwd --stdin alex" # 給用戶設置密碼
ansible 10.0.0.132 -m shell -a "bash a.sh" # 執行shell腳本
ansible 10.0.0.132 -m shell -a "./a.sh"
ansible 10.0.0.132 -m shell -a "/root/a.sh"
ansible 10.0.0.132 -m shell -a "/root/a.py" # 執行python腳本
ansible 10.0.0.132 -m shell -a "python a.py" 
# shell 腳本
#!/bin/bash
mkdir /alex2sb11
# python腳本
#!/bin/env python 
#coding:utf-8
print "停車坐愛楓林晚,霜葉紅於二月花"

script

執行本機的腳本

ansible db -m script -a "/root/a.sh" # 執行的是本地的腳本,管控機上的腳本
ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判斷是遠程主機是否存在,若是存在,就不執行,若是不存在,就執行
ansible db -m script -a "removes=/root/a.sh /root/a.sh" # 判斷的主機是否存在,若是存在,就執行,若是不存在,就不執行

copy

將本地的文件複製到遠程主機上

backup # 建立備份文件,以時間戳結尾,
content # 直接寫內容
dest # 目標地址
group #文件的屬組
mode # 文件的權限W 2 R 4  X 1
owner #文件的屬主
src # 原文件

 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh" # 複製文件
 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755" # 複製文件,並修改文件的權限
 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex"  #複製文件,修改文件的權限,屬主,根據md5值來判斷
 ansible db -m copy -a "src=/etc/init.d dest=/tmp/" # 複製文件夾
 ansible db -m copy -a "src=/etc/init.d/ dest=/tmp/" # 複製文件夾下面的全部文件
 ansible db -m copy -a "src=/etc/init.d dest=/tmp/ owner=alex " # 複製文件夾,並改變文件夾的屬性,文件夾的文件的屬性也會跟着改變
 ansible db -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私語' dest=/tmp/a.sh" # 直接寫文字,覆蓋寫入,要慎用
 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex backup=yes"  #備份文件,若是遠程機器上沒有要備份的文件,即便指定了backup=yes 也不會去備份文件

file

在遠程主機上建立文件夾, 文件, 軟鏈接, 硬連接

access_time # 訪問事件
group # 屬組
mode #權限
owner #屬主
path #路徑
src # 原文件,link和hard的時候使用
state:
    directory 文件夾
    file
    touch 空文件
    link  軟鏈接
    hard  硬連接
    absent 刪除

ansible db -m file -a "path=/tmp/baoyuan state=directory" # 建立一個目錄
*-

88
ansible db -m file -a "path=/tmp/baoyuan.txt state=touch owner=alex mode=644" # 建立一個文件,並制定屬主,權限
ansible db -m file -a "path=/tmp/f src=/etc/fstab state=link" # 建立一個軟鏈接
ansible db -m file -a "path=/tmp/f state=absent" # 刪除

補充

軟鏈接  windows的快捷方式  ln —s 原文件 目標文件  源文件改變,目標文件也改變  能夠跨越分區  原文件刪除,連接失效
硬連接  指向同一個硬盤的地址 ln 原文件 目標文件  原文件改變,目標文件也改變 不能夠跨域分區 原文件刪除,不會受影響

fetch

將遠程機器上的文件拉取到本地, 以ip或者主機名生成目錄,並保結構留原來的目錄

dest  #目標地址

src   #源地址

ansible web -m fetch -a "dest=/tmp src=/var/log/cron"

yum

1.yum 和rpm的區別

rpm redhat package manage
yum會解決依賴關係

2.yum源的配置

[epel]     # 名稱
name=Extra Packages for Enterprise Linux 7 - $basearch   # 描述信息
baseurl=http://mirrors.aliyun.com/epel/7/$basearch  # yum源的地址
failovermethod=priority
enabled=1     # 指定yum源是否可用,1表明可用,0表明不可用
gpgcheck=0    # 是否檢查gpgkey文件,0表明不檢查,1表明的檢查
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

3.包組

linux lib  windows dll  、
rpc 遠程過程調用
yum grouplist #查看包組
yum groupinstall # 安裝包組rpm

4.查看包安裝狀態

yum list|grep redis @表明安裝成功
rpm -q redis 
rpm -qa 查看全部的包
rpm -ql 查看包安裝生成的文件

.

disable_gpg_check # 是否要檢,查key
disablerepo # 禁用repo
enab
name # 包名
state # 狀態 installed removed
ansible web -m yum -a "name=python2-pip" # 安裝一個包
ansible web -m yum -a "name='@Development Tools'" # 安裝包組
ansible web -m yum -a "name=redis,python2-pip" # 同時安裝多個包
ansible web -m yum -a "name=redis state=absent" # 卸載

pip

pip list #查看全部的python第三方包
pip freeze > a.txt # 導出pi
pip install -r a.txt # 安裝

.

requirements #導出的文件
name # 包名
virtualenv # 虛擬環境
ansible web -m pip -a "name=django==1.11.18" # 安裝
ansible web -m pip -a "name=flask

service

ps -ef|grep redis # 查看進程
ss -tnlp #查看端口信息
# 啓動服務
systemctl start redis  centos7
service redis start    centos6
# 開機自啓動
systemctl enable redis centos7
chkconfig redis on centos6

.

enabled # 設置開機自啓動
name # 名稱"
state
    startedansi 
    stopped
    restarted
    reloaded
ansible web -m service -a "name=redis state=started" # 啓動
ansible web -m service -a "name=redis state=stopped" # 關閉
ansible web -m service -a "name=redis state=started enabled=yes" # 啓動並設置開機自啓動

crontab

* * * * * job
分 時 日 月 周 任務
1 * * * * job    # 表明每小時的第一個分鐘
2/* * * * * job  # 每隔2分鐘執行job
1 10-19 * * * job  # 表明10到19點的第一分鐘
0-59 0-23 1-31 1-12  0-7 job
* * * * * tar -zcf /opt/etc.tar.gz /etc
分鐘不要用*,最好是指定時間
分鐘不要用*,最好是指定時間
分鐘不要用*,最好是指定時間
收集日誌
備份數據
同步時間

crontab -l # 查看計劃任務
crontab -r # 刪除全部的計劃任務
crontab -e # 編輯計劃任務

.

day # 天
hour # 小時
job #任務
minute #分鐘
month # 月
name #名字,描述信息,不能夠重複
state # 狀態
user # 執行計劃任務的用戶
weekday # 周
disabled # 禁止
ansible web -m cron -a "minute=21 job='touch /tmp/cron.txt' name=touchfile" # 設置計劃任務
ansible web -m cron -a "minute=23 job='touch /tmp/cron.txt' name=touchfile4 disabled=yes" # 禁用計劃任務,表現爲加註釋
ansible web -m cron -a "name=touchfile4 state=absent" # 刪除計劃任務

user

用戶的分類
超級管理員   root                      0
其餘用戶  
    系統用戶 啓動服務來專門設置的用戶      1-999 centos7   1-499 centos6
    登錄用戶 普通的登錄用戶              1000-65535centos7 500-65535 centos6
    
useradd 
 -d # 指定家目錄
 -g # 組id
 -G, --groups GROUPS  # 附加組
 -r, --system  # 建立系統用戶
  -s, --shell SHELL # 登錄shell
  -u, --uid UID #用戶id
   useradd -s /sbin/nologin -u 2000 -d /opt/wusir wusir #建立用戶,指定用戶的登錄shell,id,家目錄
   useradd -s /sbin/nologin -G root,wusir  -d /opt/wusir2 wusir2 #指定附加組,最大的後面+1
   useradd -r baoyuan # 建立系統用戶,從999倒序
userdel wusir2 # 刪除用戶
userdel -r baoyuan4 # 刪除用戶並刪除用戶的家目錄

.

group # 組
groups #附加組
home #家目錄
name #用戶名
password #密碼
shell #登錄shell
remove # 刪除用戶並刪除用戶的家目錄
state # 狀態
system #系統用戶
uid # 用戶id
ansible db -m user -a "name=alex2 shell=/sbin/nologin home=/opt/alex2 uid=2000 group=root" # 建立用戶,並指定用戶的家目錄,登錄shell,uid,組
ansible db -m user -a "name=alex3 system=yes" #建立系統用戶
ansible db -m user -a "name=alex3 state=absent" # 刪除用戶
ansible db -m user -a "name=alex2 state=absent remove=yes" # 刪除用戶並刪除用戶的家目錄

group

用戶組的分類
超級組   root                      0
其餘組  
    系統組   1-999 centos7   1-499 centos6
    普通組   1000-65535centos7 500-65535 centos6
groupadd 
-g 指定組的id
-r 指定系統組
groupdel

.

gid #組的id
name # 組名
state #狀態
system #系統組
ansible db -m group -a "name=canglaoshi" #建立普通組
ansible db -m group -a "name=wutenglan system=yes" # 建立系統組
ansible db -m group -a "name=wutenglan state=absent" # 刪除組
相關文章
相關標籤/搜索