ansible之Ad-Hoc

一. Ad-Hoc

  1. ansible的一種模式Ad-Hoc

    ansible是一個可以在遠程主機上批量執行命令或者腳本的一個工具python

    Ad-Hoc是ansible的一種模式linux

  2. ansible的安裝

    yum install -y ansiblenginx

  3. 命令格式

    ansible <host-pattern> [options]web

  4. host-pattern主機組

    主機組的配置文件在/etc/ansible/hostsredis

    - 單個的的ip地址shell

    - 多個ip地址, 用逗號分割django

    - 單個組flask

    - 多個組centos

      - 並集: web, db 或  "web: db"數組

      - 交集: "web: &db"

      - 差集: "web: !db"

    - 所有: all  

  5. options參數

-m modulename    # 使用的模塊名
-a args                   # 模塊的參數
-f fork                    # 併發的線程數, 默認5個
-C                          # 幹跑    

  6. 管控主機, 鏈接被管控主機

    - 管控主機, 生成密鑰

      ssh-keygen

    - 複製到被管控主機

      ssh-copy-id  username@ip

  7. ansible-doc 查看文檔

    ansible-doc -s modulename    查看模塊的參數

二. 關於命令和腳本的模塊

  1. command模塊

    在遠程主機上執行命令, 不支持  <>|&$;  一些特殊符號

1. 參數
    chdir        切換目錄
    creates    存在就不執行後面命令, 反之則執行
    removes    存在就執行後面命令, 反之則不執行
2. 實例
    ansible web -m command -a "pwd"        # 執行pwd命令
    ansible web -m command -a "chdir=/tmp pwd"        # chdir參數是切換目錄
    ansible web -m command -a "creates=/tmp pwd"    # creates=/tmp 有這個文件就是false,後面的不執行,沒有就是true,後面執行
    ansible web -m command -a "removes=/tmp pwd"    # 有就是true,沒有就是false
command模塊

  2. shell模塊

    和comman模塊同樣, 可是能夠識別特殊符號

1. linux補充
    echo "password" | passwd --stdin username    # 一行命令直接修改密碼
2. 參數
    chdir            切換目錄
    creates         和command模塊同樣
    removes       和command模塊同樣

3. 實例
    ansible web -m shell -a "echo "password" | passwd --stdin username"        # 識別|符號
    
    ansible web -m shell -a "/tmp/a.sh"            # 執行a.sh腳本    要有可執行權限
    ansible web -m shell -a "bash /tmp/a.sh"    # 執行腳本, 不須要有可執行權限    

    
shell模塊

  3. script模塊

    在遠程主機上運行本地腳本

1. 參數
    chdir        切換目錄
    creates      和command模塊同樣
    removes    和commadn模塊同樣

2. 實例
    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 "creates=/tmp /root/a.sh" #判斷被控機上的文件
script模塊

三. 關於文件的模塊

  1. copy模塊

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

1. 參數
    src            源地址, 一/結尾就是複製文件夾內全部文件
    dest          目標地址
    backup      yes的時候就備份
    mode        指定文件權限
    group        指定數組
    owner        指定屬主
    content      覆蓋寫入

2. 實例
    ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #複製本地文件到遠程主機,並修改文件名,屢次執行不會改變,由於checksum值是同樣的
    ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #複製本地文件,並備份
    ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=alex mode=755"# 複製本地文件到遠程主機,並指定屬組和權限
    ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755" #複製本地的目錄到遠程主機,修改目錄權限,則目錄裏面的文件也會跟着變動
    ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755" #複製本地目錄下的全部文件,
    ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私語,嘈嘈切切錯 雜彈,大珠小珠落玉盤' dest=/tmp/b" #直接往文件裏面寫內容,覆蓋寫,慎用
copy模塊

  2. file模塊

    對遠程主機文件的操做

1. linux補充
    軟鏈接  快捷方式  ln -s   源文件修改軟鏈接修改  源文件刪除軟鏈接失效  能夠跨分區 
    硬連接  硬盤的位置 ln     源文件修改硬連接修改  源文件刪除硬連接不變 不能夠跨分區
    複製    開闢新空間 cp     源文件修改cp的不變   源文件刪除不變 能夠跨分區

2. 參數
    path          文件路徑
    mode        指定權限
    group        指定屬組
    owner        指定屬主
    state          操做的類型  
        directory  目錄
        touch       空文件
        absent     刪除
        link         軟鏈接
        hard        硬連接
    src              源文件, state=link或hard時用

3. 實例
    ansible web -m file -a "path=/alex5 state=directory owner=alex" #建立目錄,並制定屬主
    ansible web -m file -a "path=/tmp/wusir.txt state=touch mode=777" #建立文件,並指定權限
    ansible web -m file -a "path=/tmp/cron src=/var/log/cron state=link" #建立軟連接,連接的是本身的文件
    ansible web -m file -a "path=/tmp/cron state=absent" # 刪除軟鏈接
    ansible web -m file -a "path=/alex5 state=absent" #刪除文件夾
file模塊

  3. fetch模塊

    在遠程主機上拉取文件, 以主機名或ip建立目錄並保存原有目錄結構

1. linux補充
    scp -rq 文件 地址    # 兩臺linux之間傳輸文件
    scp -r root@ip:/tmp/text /tmp

2. 參數
    src        源地址, 遠程主機上的文件, 不能是文件夾
    dest      目標地址, 拉取到本地主機的地址

3. 實例
    # 拉取被控主機上的/var/log/cron文件到/tmp目錄下
    ansible web -m fetch -a "src=/var/log/cron dest=/tmp"
fetch模塊

  4. template模塊

  5. replace模塊

四. 關於下載和啓停服務的模塊

  1. yum模塊

    在遠程主機上進行yum安裝

1. linux的補充
    - yum跟rpm有什麼關係,有什麼區別
        rpm redhat package manager
        yum 基於rpm進行優化的軟件管理包, 能夠解決依賴關係

    - yum源怎麼配置
###############################################
[epel]    #名稱
name=Extra Packages for Enterprise Linux 7 - $basearch  #全名或者描述信息
baseurl=http://mirrors.aliyun.com/epel/7/$basearch  # 源url地址
failovermethod=priority
enabled=1  #是否啓用,1啓用,0不啓用
gpgcheck=0  #是否檢驗key文件,0不校驗 1校驗
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
################################################

    - yum怎麼安裝包組
        yum grouplist #查包組信息    
        yum groupinstall xxx

2. 參數
    name            要下載的包名
    disablerepo    禁用某個源
    enablerepo    啓用某個源
    state            進行的操做
        install        安裝
        remove     卸載

3. 實例
    # 給被控主機配置epel源
    ansible web -m copy -a "src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d"
    
    # 給被控主機安裝redis
    ansible web -m yum -a "name=redis"

    #安裝多個包
    ansible web -m yum -a "name=python2-pip,redis" 
    #安裝包組
    ansible web -m yum -a "name='@Development Tools'"
 
    #卸載
    ansible web -m yum -a "name=nginx state=absent" 
yum模塊

  2. pip模塊

    在遠程主機上進行pip安裝

1. linux補充
    pip freeze > requirement.txt        將本地環境全部的包都導出
    pip install -r requirement.txt        安裝全部的包
    pip uninstall flask                卸載包
    python setup.py build     
    python setup.py install

2. 參數
    name             安裝的包名
    requirement    安裝文件中全部的包
    virtualenv        虛擬環境

3. 實例
    # 給被控主機pip一個flask包
    ansible web -m pip -a "name=flask"
        
    # 給被控主機pip一個1.11.14的django包
    ansible web -m pip -a "name=django==1.11.14"
    
pip模塊

  3. service模塊

    在遠程主機上啓停服務

1. linux補充
    - centos 7
        systemctl start redis        開啓服務
        systemctl enable redis     設置開機自啓
    - centos 6
        service redis start        開啓服務
        chkconfig redis on        設置開機自啓

2. 參數
    name        服務名
    state        進行的操做
        started        啓動服務
        restarted     重啓服務
        reloaded      平滑重啓服務
        stopped        中止服務
    enable           設置開機自啓

3. 實例
    # 在被控主機上開啓redis服務
    ansible web -m service -a "name=redis state=started"
    # 關閉被控主機上的redis服務
    ansible web -m service -a "name=redis state=stopped"
    # 在被控主機上開啓redis服務而且開機自啓
    ansible web -m service -a "name=redis state=started enabled=yes"
service模塊

五. 關於定時任務的模塊

  1. cron模塊

    在遠程主機上設置定時任務

1. linux補充
    crontab -e    編輯定時任務
    crontab -l    查看定時任務
    crontab -r    刪除定時任務
    * * * * * 絕對路徑的命令

2. 參數
    name        定時任務的名字, 默認爲None, 不能重複
    job            任務
    minute         分
    hour             時
    day              日
    month          月
    weekday       周 
    state        進行的操做
        create    建立任務, 默認
        absent    刪除任務
    disable        禁用任務, 就是把任務註釋掉
    user            指定指定的用戶

3. 實例
    # 給被控主機設置一個定時任務:每分鐘都建立/tmp/1文件夾
    ansible web -m cron -a "job='/usr/bin/mkdir /tmp/1'    name=makedirectory"
    # 清除上面的定時任務
    ansible web -m cron -a "name=makedirectory state=absent"
    # 註釋定時任務
    ansible web -m cron -a "minute=12 name=touchfile2 job='touch /tmp/xiaoqiang.txt' disabled=yes"
    
cron模塊

六. 關於用戶和用戶組的模塊

  1. user模塊

    對遠程主機的用戶的操做

1. linux補充
    - 查看本機的用戶
    vi /etc/passwd
    vi /etc/shadow
    id root        

    - 添加用戶
    useradd
        -d    設置新用戶的家目錄
        -g    設置新用戶的屬組
        -G    設置新用戶的附加組
        -u  設置新用戶的id
        -s  設置新用戶登錄後的shell
        -r  設置系統帳戶,沒有家目錄
        
    - 刪除用戶
    userdel 
        -r    刪除用戶,而且刪除用戶家目錄
        
    - 用戶分類
    超級管理員 root 0
    普通用戶
        系統用戶  啓動一些服務或者進程,不能登陸  1-999 centos7 1-499 centos6 從大到小
        登陸用戶  能夠登陸的用戶 1000-65535 centos7 500-65535 centos6 從小到大
2. 參數
    group     屬組
    groups    附加屬組
    home    家目錄
    uid        用戶id
    name    賬號
    shell    登錄後的shell
    system    系統用戶
    remove    刪除用戶,而且刪除用戶家目錄    state=absent配合這個參數使用

3. 實例
    # 在遠程主機上建立用戶
    ansible web -m user -a "name=username    home=/tmp/username"
    # 刪除上面的用戶
    ansible web -m user -a "name=username remove-yes"
user模塊

  2. group模塊

    對遠程主機的用戶組的操做

1. linux補充
    - 建立分組
    groupadd
        -g    設置分組id
        -r    設置系統組

    - 組分類
    超級管理員組 root 0
    普通組
        系統組  1-999 centos7 1-499 centos6 從大到小 
        登陸用戶組 1000-65535 centos7 500-65535 centos6 從小到大

    - 查看組
    cat /etc/group

2. 參數
    gid        分組id
    name    分組名稱
    system    系統分組

3. 實例
    # 在遠程主機上建立分組
    ansible web -m group -a "name=hh "
    # 在遠程主機上建立系統分組
    ansible web -m group -a "name=hh system=yes"
group模塊

七. 關於系統信息的模塊

  1. setup模塊

    獲取遠程主機的信息

1. 參數
    filter    過濾出想要的信息

2. 實例
    # 查看本機的信息,並過濾出用戶的組id
    ansible localhost -m setup -a "filter=ansible_user_gid"

3. 主要信息
    ansible_all_ipv4_addresses #全部的ipv4地址
    ansible_all_ipv6_addresses #全部的ipv6地址
    ansible_architecture #系統的架構
    ansible_date_time #系統時間
    ansible_default_ipv4 #默認的ipv4地址
        address ip地址
        alias 網卡名稱
        broadcast 廣播地址
        gateway 網關
        netmask 子網掩碼
        network 網段
    ansible_default_ipv6 #默認的ipv6地址
    ansible_device_links #系統的磁盤信息
    ansible_distribution #系統名稱
    ansible_distribution_file_variety #系統的基於公司
    ansible_distribution_major_version #系統的主版本
    ansible_distribution_version #系統的所有版本
    ansible_dns #系統的dns 默認udp 端口53
    ansible_domain #系統的域 ldap
    ipv4 #ipv4地址
    ansible_env #系統的環境
    ansible_fqdn #系統的完整主機名
    ansible_hostname #系統的簡寫主機名
    ansible_kernel #系統的內核版本
    ansible_machine #系統的架構
    ansible_memtotal_mb #系統的內存
    ansible_memory_mb #系統的內存使用狀況
    ansible_mounts #系統的掛載信息
    ansible_os_family #系統家族
    ansible_pkg_mgr #系統的包管理工具
    ansible_processor #系統的cpu
    ansible_processor_cores #每顆cpu的核數
    ansible_processor_count #cpu的顆數
    ansible_processor_vcpus #cpu的個數=cpu的顆數*每顆cpu的核數
    ansible_python #系統python信息
    ansible_python_version #系統python的版本
    ansible_system #系統名字
setup模塊
相關文章
相關標籤/搜索