Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
(代碼執行格式)
optons: -C, --check #白跑,執行可是不會有結果
--list-hosts #列出符合的主機
-f FORKS, --forks=FORKS #作併發
--syntax-check #檢查語法
-k, --ask-pass #輸入密碼
補充:
① vi 的快捷操做
yy 複製一行
# yy 複製多行
p 粘貼
dd 刪除一行
# dd 刪除多行
d$ 從當前位置刪除到結尾
②echo的操做
echo `date +%F`
echo $(date +%F)python
a=10
echo '$a'
$a
echo "$a"
10nginx
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 #系統名字
字典 key:value
- alex
- wusir
- yantao
- yuchao
[alex,wusir,yantao,yuchao]web
redis
橫線後面必需要空格shell
嚴格保持對齊安全
等號前面不能有空格架構
僅建立一個用戶
- hosts: web remote_user: root (默認是root) tasks: - name: createuser user: name=alex20 home=/opt/alex20 uid=4000
執行時的代碼爲:
ansible-playbook 文件名.yml
建立一個用戶 和 複製文件
- hosts: web remote_user: root tasks: - name: createuser user: name=alex20 home=/opt/alex20 uid=4000 - name: copyfile copy: src=/etc/fstab dest=/tmp/fs
執行時的代碼:
ansible-playbook 文件名.yml
優先級:
-e > playbook > hosts
①第一種方式併發
把要建立的用戶名 在執行文件時傳入
- hosts: web tasks: - name: create{{user}} user: name={{user}}
執行時的代碼: ansible-playbook -e user=wusir20 p3.yml
②第二種方式dom
修改 hosts 配置文件 加入 user
![](http://static.javashuo.com/static/loading.gif)
hosts文件中:
[web] 192.168.226.[101:102] user=alex30 192.168.226.104 user=alex100
在playbook 文件中:
- hosts: web
tasks:
- name: create{{user}} user: name={{user}}
直接執行playbook文件:
ansible-playbook 文件名.yml
③第三種方式socket
修改hosts配置文件:
[web:vars]
user=alex31
在playbook 文件中內容如上
直接執行playbook文件:
ansible-playbook 文件名.yml
④第四種方式
修改playbook文件
- hosts: web vars: - user: alex32 tasks: - name: create{{user}} user: name={{user}}
直接執行playbook文件:
ansible-playbook 文件名.yml
⑤第五種方式
修改 playbook文件
- hosts: web tasks: - name: yum yum: name=bc #下載bc計算組件 - name: sum shell: echo 11+22|bc register: user # 註冊成變量,返回結果爲後面使用
- name: create{{user.stdout}} user: name=alex{{user.stdout}}
直接執行playbook文件:
ansible-playbook 文件名.yml
在playbook 中加入標籤
- hosts: web tasks: - name: install yum: name=redis - name: copyfile copy: dest=/etc/redis.conf src=/etc/redis.conf tags: copy - name: start service: name=redis state=started
執行時的代碼(僅運行標籤所在的一項): ansible-playbook -t copy p7.yml
在 playbook 文件中加 notify;和 handlers
- hosts: web tasks: - name: install yum: name=redis - name: copyfile copy: dest=/etc/redis.conf src=/etc/redis.conf tags: copy notify: restart #改變時觸發 - name: start service: name=redis state=started handlers: #觸發項 - name: restart service: name=redis state=restarted
執行時的代碼(僅運行標籤所在的一項):
ansible-playbook -t copy p7.yml
能夠進行動態替換
用法,做用和copy同樣
①絕對路徑
利用收集的信息
在playbook 文件中
- hosts: web tasks: - name: install yum: name=redis - name: copyfile template: dest=/etc/redis.conf src=/etc/redis.conf #將copy直接替換 tags: copy notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted
在 redis.conf 文件中(利用收集的信息保證安全)
執行時的代碼(僅運行標籤所在的一項): ansible-playbook -t copy p7.yml
copy完成以後就引用了收集的信息
②相對路徑
mv redis.conf{,.j2} = mv redis.conf redis.conf.j2
- hosts: web tasks: - name: install yum: name=redis - name: copyfile template: dest=/etc/redis.conf src=redis.conf.j2 tags: copy notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted
在當前目錄下建立一個templates的目錄,
把要copyd的文件放在 templates 文件下
就能夠使用相對路徑
執行時的代碼(僅運行標籤所在的一項): ansible-playbook -t copy p7.yml
- hosts: web tasks: - name: copyfile copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt when: ansible_distribution_major_version=="7" #利用收集的信息 - name: copyfile copy: content="小弦切切如私語" dest=/tmp/a.txt when: ansible_distribution_major_version=="6"
執行時的代碼: ansible-playbook p7.yml
- hosts: web tasks: - name: copyfile copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt when: user=="4" - name: copyfile copy: content="小弦切切如私語" dest=/tmp/a.txt when: user=="3"
執行時的代碼:
ansible-playbook -e user=4 p3.yml
只執行第一項
①.循環
建立多個用戶
- hosts: web tasks: - name: createuser user: name={{item}} with_items: - alex50 - wusir50 - taibai50
執行時的代碼: ansible-playbook p7.yml
建立多個用戶 和 多個組(建立完用戶再建立組)
- hosts: web tasks: - name: createuser user: name={{item}} with_items: - alex51 - wusir51 - taibai51 - name: creategroup group: name={{item}} with_items: - alex60 - wusir60 - taibai60
執行時的代碼: ansible-playbook p7.yml
②嵌套循環
建立用戶並添加屬組
- hosts: web tasks: - name: crateuser user: name={{item.name}} group={{item.group}} with_items: - {"name":alex52,"group":alex60} - {"name":wusir52,"group":wusir60} - {"name":taibai52,"group":taibai60}
執行時的代碼: ansible-playbook p7.yml
- 目錄結構清晰
- 能夠相互調用 - import_tasks: roles/nginx/tasks/install.yml
- 備份方便
①
roles/nginx/ ├── files -- 靜態文件 │ └── c.txt ├── handlers -- 觸發的任務 │ └── main.yml ├── tasks -- 任務(必須的) │ ├── copyfile.yml │ ├── install.yml │ ├── main.yml │ └── start.yml ├── templates -- 動態文件,須要傳遞參數 │ └── nginx.conf └── vars -- 變量 └── main.yml
查找順序: - 主文件看到roles,就回去roles目錄下面找對應的目錄 - 先去tasks目錄裏面找main.yml文件,若是遇到import_task則加載任務 - 若是遇到了template,則去templates目錄裏面找文件 - 若是遇到了copy,則去files目錄裏面找文件 - 若是遇到了變量,則去vars目錄裏面找main.yml文件 - 若是遇到了notify,則去handlers目錄裏面找main.yml文件
②
③啓動
第一種方式 uwsgi的配置 http = 0.0.0.0:8000 nginx的配置 proxy_pass http://127.0.0.1:8000; pkill -9 uwsgi 殺掉uwsgi的進程
第二種方式 uwsgi的配置 socket = 0.0.0.0:8000 nginx的配置 include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8000;
第三種方式 uwsgi的配置 socket = /data/mysite/mysite.socket nginx的配置 include /etc/nginx/uwsgi_params; uwsgi_pass unix:/data/mysite/mysite.socket;