ansible是一個可以在遠程主機上批量執行命令或者腳本的一個工具python
Ad-Hoc是ansible的一種模式linux
yum install -y ansiblenginx
ansible <host-pattern> [options]web
主機組的配置文件在/etc/ansible/hostsredis
- 單個的的ip地址shell
- 多個ip地址, 用逗號分割django
- 單個組flask
- 多個組centos
- 並集: web, db 或 "web: db"數組
- 交集: "web: &db"
- 差集: "web: !db"
- 所有: all
-m modulename # 使用的模塊名 -a args # 模塊的參數 -f fork # 併發的線程數, 默認5個 -C # 幹跑
- 管控主機, 生成密鑰
ssh-keygen
- 複製到被管控主機
ssh-copy-id username@ip
ansible-doc -s modulename 查看模塊的參數
在遠程主機上執行命令, 不支持 <>|&$; 一些特殊符號
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
和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" # 執行腳本, 不須要有可執行權限
在遠程主機上運行本地腳本
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" #判斷被控機上的文件
複製本地主機的文件到遠程主機上
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" #直接往文件裏面寫內容,覆蓋寫,慎用
對遠程主機文件的操做
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" #刪除文件夾
在遠程主機上拉取文件, 以主機名或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"
在遠程主機上進行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"
在遠程主機上進行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"
在遠程主機上啓停服務
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"
在遠程主機上設置定時任務
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"
對遠程主機的用戶的操做
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"
對遠程主機的用戶組的操做
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"
獲取遠程主機的信息
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 #系統名字