ansible命令格式
python
# 查看ansible幫助nginx
ansible -hweb
# 命令格式redis
Usage: ansible <host-pattern> [options]shell
-a MODULE_ARGS # 模塊參數數據庫
-C, --check # 幹跑,白跑django
-f FORKS, --forks=FORKS # 指定併發,默認5個json
--list-hosts # 列出主機flask
-m MODULE_NAME # 模塊名稱windows
--syntax-check # 檢查語法
-k # 密碼
2.ansible連接機器
rpm -ql ansible|more # 查看ansible生成的文件
/etc/ansible
/etc/ansible/ansible.cfg # 配置文件
/etc/ansible/hosts # 配置管控機
/etc/ansible/roles # 空文件夾
# 在hosts文件中將主機地址一個個添加進去
ansible 主機地址 -m ping -k # ansible底層經過ssh實現
# 生成密鑰
ssh-keygen
# 將公鑰拷貝至目標主機
ssh-copy-id root@主機地址
# 經過ssh便可連接目標主機
ssh 'root@主機地址'
exit退出
# 完成上面的操做後 再去探測機器是否在線就不要再加-k
ansible 主機地址 -m ping
"""測試機器是否在線的方式及分組管理"""
ansible 192.168.226.101 -m ping # 單獨機器的ping
ansible 192.168.226.101,192.168.226.102 -m ping # 多個機器的ping
ansible all -m ping # 所有機器
# 分組:好比有N多臺機器,有些是負責數據庫的,有些是uwsgi的,有些是redis的等
ansible web -m ping # 單個的組
ansible web,db -m ping # 多個組的並集
ansible 'web:&db' -m ping # 多個組的交集 必須是單引號 雙引號不行
ansible 'web:!db' -m ping # 多個組的差集,在前面可是不在後面
ansible-doc -l |wc -l # 查看ansible總模塊數
4.ansible-doc 命令格式
-j # 以json的方式返回數據
-l, --list # 列出全部的模塊
-s, --snippet # 以片斷式顯示模塊信息
# 經常使用命令
ansible-doc -s 模塊名 # 查看模塊幫助信息
command
分組機器批量執行系統命令
ansible-doc -s command
ansible web -m command -a "pwd"
ansible web -m command -a "ls"
ansible web -m command -a "chdir=/tmp pwd" #切換目錄並執行命令
ansible web -m command -a "creates=/tmp pwd" #由於tmp目錄存在,pwd不會執行
ansible web -m command -a "creates=/tmp2 pwd" #由於tmp2不存在,pwd執行
ansible web -m command -a "removes=/tmp2 pwd" #由於tmp2不存在pwd不執行
ansible web -m command -a "removes=/tmp pwd" #由於tmp目錄存在,pwd會執行
# 建立用戶
ansible web -m command -a 'useradd jason'
# 設置密碼(本機設置) 並需二次確認
passwd jason
# 設置密碼(本機設置) 無需二次確認
echo "123" |passwd --stdin jason #設置用戶的密碼
shell
當命令中包含$home和常見符號(<,>,|,;.&)等的時候,須要使用shell才能生效
ansible-doc -s shell
ansible web -m shell -a "echo '123' |passwd --stdin jason"
ansible web -m shell -a "chdir=/tmp pwd" shabang
ansible 192.168.226.101 -m shell -a "bash a.sh" #執行shell腳本
ansible 192.168.226.101 -m shell -a "/root/a.sh" # 執行shell腳本,文件要有執行的權限
ansible 192.168.226.101 -m shell -a "/root/a.py" #執行Python文件
script
在遠程機器上執行本地腳本
ansible-doc -s 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 "creates=/tmp /root/a.sh" # 判斷被控機上的文件
copy
將本地的文件拷貝到遠程機器
ansible-doc -s copy
backup # 建立一個備份文件,以時間戳結尾
content # 直接往文件裏面寫內容
dest # 目標地址
group # 屬組
mode # 文件的權限 W 2 R 4 X 1
owner # 屬主
src # 源地址
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" # 直接往文件裏面寫內容,覆蓋寫,慎用
File
文件屬組、權限、硬軟鏈等
group # 屬組
mode # 權限
owner # 屬主
path # 路徑
src # 軟硬連接
state =link
state =hard
state
directory # 目錄
file
touch # 空文件
absent # 刪除
link # 軟鏈接
hard # 硬連接
ansible web -m file -a "path=/jason5 state=directory owner=jason" #建立目錄,並制定屬主
ansible web -m file -a "path=/tmp/jason.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=/jason5 state=absent" #刪除文件夾
軟鏈接 快捷方式(windows) ln -s 源文件修改軟鏈接修改 源文件刪除軟鏈接失效 能夠跨分區
硬連接 硬盤的位置 ln 源文件修改硬連接修改 源文件刪除硬連接不變 不能夠跨分區
複製 開闢新空間 cp 源文件修改cp的不變 源文件刪除不變 能夠跨分區
fetch
拉取遠程主機文件
dest 目標地址
src 源地址
ansible web -m fetch -a "src=/var/log/cron dest=/tmp" # 拉取遠程主機的文件,並以主機ip地址或者主機名爲目錄,而且保留了原來的目錄結構
yum模塊
ansible-doc -s yum
disablerepo # 禁用某個源
enablerepo # 啓用某個源
name # 包名
state
install
remove
yum install -y python2-pip # 在epel源中
# 將主機中下載好的pip拷貝到其餘被管控機上
ansible all -m copy -a 'src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d/epel.repo'
ansible web -m yum -a "name=python2-pip" # 安裝單個軟件包
# 查看是否安裝 對應機器上執行下述命令
rpm -q 包名
# eg:rpm -q pip/python-pip/python2-pip/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模塊
python安裝第三方模塊的工具
pip freeze > requirements.txt # 將本地環境導出到某個文件中,文件中不寫版本信息默認安裝最新版本
pip install -r requirements.txt # 安裝全部的包(******)
pip list # 查看全部的包
pip uninstall flask # 卸載
# 下載包
Python setup.py build
python setup.py install
pip模塊
ansible-doc -s pip
chdir # 切換目錄
name # 包名
requirements # 導出的文件
virtualenv # 虛擬環境
# 安裝django(時間較長~)
ansible web -m pip -a "name=django==1.11"
service模塊
ansible-doc -s service
# 關鍵參數
enabled #開機啓動
name #服務名稱
state
started
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 enabled=yes" #設置開機自啓動
cron計劃任務模塊
# 格式
* * * * * job
分 時 日 月 周 任務
ansible-doc -s cron
day # 天
disabled # 禁用crontab,表現形式加#
hour # 小時
job # 任務
minute # 分鐘
month # 月
name # 名字,描述信息
user # 用戶
weekday # 周
# 添加時名字必須不一樣,不加名稱爲None(crontab -l查看計劃任務)
ansible web -m cron -a "minute=12 name=touchfile job='touch /tmp/xiaoqiang.txt'" # 建立
ansible web -m cron -a "name=touchfile state=absent" # 刪除
ansible web -m cron -a "minute=12 name=touchfile2 job='touch /tmp/jason.txt' disabled=yes" # 註釋
ansible web -m cron -a "name=None state=absent" # 刪除名稱爲空的計劃任務
user模塊
ansible-doc -s user
group # 屬組
groups # 附加組
home # 設置家目錄
name # 用戶名
remove # 刪除用戶並刪除用戶的家目錄
shell # 用戶登陸後的shell
system # 系統用戶
uid # 用戶的id
ansible web -m user -a "name=alex10 shell=/sbin/nologin home=/opt/alex10 uid=3000 groups=root" #建立用戶,並指定用戶的shell,家目錄,uid,以及附加組
ansible web -m user -a "name=alex11 shell=/sbin/nologin home=/opt/alex11"
ansible web -m user -a "name=alex12 system=yes" #建立系統用戶
ansible web -m user -a "name=alex12 state=absent" #刪除用戶,單不刪除家目錄
ansible web -m user -a "name=alex11 state=absent remove=yes" # 刪除用戶並刪除用戶的家目錄
group模塊
ansible-doc -s group
gid # 組id
system # 系統組
name # 名稱
ansible web -m group -a "name=jason10 system=yes gid=5000" # 建立系統組
ansible web -m group -a "name=jason11" # 建立普通的組
ansible web -m group -a "name=jason11 state=absent" # 刪除組
setup模塊
收集遠程主機的一些基本信息
# 查看詳細信息
ansible 主機名 -m setup|more
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 # 系統名字