自動化運維自學第一天

目的

代碼發佈系統python

代碼發佈:把本地的代碼經過某些方式弄到線上,能夠供別人訪問git

部署web

前戲

ansible 批量在遠程主機上執行命令shell

puppet rubyjson

ansiblewindows

saltstack跨域

python開發ruby

openpyxl 操做excel表格 讀寫bash

git 版本控制併發

celery 異步,延時任務,定時任務的一個芹菜

 

ansible

一、安裝epel源

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

二、安裝ansible

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認證方式

  • 密碼

  • 祕鑰


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

ping 走的是icmp協議

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的並集

弱口令校驗

密碼要符合的規則

  • 必須有大寫字母,小寫字母,數字,特殊字符

  • 密碼必須12位以上

  • 密碼須要三個一換

host-pattern的格式

  • 單個的主機

  • 單個組

  • 多個組

    • 交集

      • ‘web:&db’

    • 並集

      • ‘web:db’

      • web,db

    • 差集

      • ‘web:!db’

  • 全部的機器 all

  • 多個主機

  •  

獲取模塊幫助信息

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" # 建立一個目錄
ansible db -m file -a "path=/tmp/baoyuan state=directory owner=alex mode=644" # 建立一個目錄,並制定屬主,權限
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 原文件 目標文件 原文件改變,目標文件也改變 不能夠跨域分區 原文件刪除,不會受影響
複製

今日內容總結

  • ansible 安裝,epel源

  • ansible 裏面ping 走的是ssh

  • host-pattern的格式

    • 單個的ip

    • 多個的ip

    • 單個組

    • 多個組

      • 交集

        • ‘web:&db’

      • 並集

        • ‘web:db’

        • ‘web,db’

      • 差集

        • ‘web:!db’

  • command 執行命令 不支持特殊字符 $ < > | ; &

    • chdir 切換目錄,通常是編譯安裝

    • creates 判斷是否存在,若是存在,就不執行,若是不存在,就執行

    • removes 判斷是否存在,若是存在,就執行,若是不存在,就不執行

  • shell 執行遠程機器上的shell腳本或者python腳本

    • chdir 切換目錄,通常是編譯安裝

    • creates 判斷是否存在,若是存在,就不執行,若是不存在,就執行

    • removes 判斷是否存在,若是存在,就執行,若是不存在,就不執行

  • script 執行本地腳本,執行管控機上的腳本

    • chdir 切換目錄,通常是編譯安裝

    • creates 判斷遠程主機是否存在,若是存在,就不執行,若是不存在,就執行

    • removes 判斷遠程主機是否存在,若是存在,就執行,若是不存在,就不執行

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

    • src 原文件

    • dest 目標文件

    • owner 屬主

    • group 屬組

    • mode 權限

    • backup 備份

    • content 直接寫內容,覆蓋寫

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

    • path 目錄

    • src

      • link

      • hard

    • owner

    • group

    • mode

    • state

      • directory 文件夾

      • touch 文件

      • link 軟鏈接

      • hard 硬連接

      • absent 刪除

      • file

相關文章
相關標籤/搜索