運維自動化之ansible

ansible的基本架構

? host inventory主機清單

? playbook相當于腳本,

? modules模塊

ansible工作原理

? 通過執行命令,或ansible playbook,cmdb

ansible配置文件

? /etc/ansible/ansible.cfg主配置文件,配置ansible工作特性

? /etc/ansible/hosts/主機清單

? /etc/ansible/roles/存放角色的目錄

程序

? /usr/bin/ansible 主程序,臨時命令執行工具

? /usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具

? /usr/bin/ansible-galaxy 下載/上傳優秀代碼或roles模塊的官網平臺

? /usr/bin/ansible-playbook 定制自動化任務,編排劇本工具/usr/bin/ansible-pull 遠程執行命令的工具

? /usr/bin/ansible-console 基于console界面與用戶交互的執行工具

主機清單inventory

? /etc/ansible/hosts文件格式

? [webservers]

? www1.magedu.com:2222

? www2.magedu.com

? [dbservers]

? db1.magedu.com

? db2.magedu.com

? 可以分組

? [websrvs]

? 192.168.30.101

? 192.169.30.102

? [dbsrvs]

? 192.168.30.10[1:3]

?

? **ansible系列命令**

? ansible ansible-doc ansible-playbook ansible-vault

? ansible-console ansible-galaxy ansible-pull

? ansible-doc:顯示模塊幫助

? ansible-doc options

? -l,- -list列出可用模塊

? -s, – -snippet顯示指定模塊的playbook片段

? ansible <host-pattern> -m module_name

? – -version 顯示版本

? -m module 指定模塊,默認為command

? -v 詳細過程 -vv -vvv更詳細

? – -list-hosts 顯示主機列表,可簡寫- -list

? -k, – -ask-pass 提示連接密碼,默認key驗證(適合于所有的主機口令都一致)

? -K, – -ask-become-pass 提示輸入sudo

? -C,- -check 檢查,并不執行

? -T, – -timeout=TIMEOUT 執行命令的超時時間,默認10s

? -u, – -usr=REMOTE_USER 執行遠程的用戶

? -b, – -become 代替舊版的sudo切換

? usermod -aG wheel wang

? sudo nopasswd

? echo export EDITOR >> /etc/profile.

? 1、Ansible 172.20.104.99 172.20.104.66 -m ping -k

? ansible的Host-pattern

? 匹配主機的列表

? All:表示所有inventory中的所有主機

? ansible all -m ping

? *:通配符

? ansible “*” -m ping

? 或關系

? ansible “websrvs:appsrvs” -m ping

? ansible “192.168.1.10:192.168.1.20” -m ping

? 邏輯與

? ansible “websrvs:&dbsrvs”

? 在websrvs組,但不在dbsrvs組中的主機

? 邏輯非

? ansible ‘websrvs:!dbsrvs’ -m ping

? 在websrvs組,但不在dbsrvs組中的主機

? 注意:此處為單引號

? 綜合邏輯

? ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m ping

? 正則表達式

? ansible “websrvs:&dbsrvs” -m ping

? ansible “~(web|db).*.magedu.com” -m ping

?

ansible常用模塊

COMMAND:在遠程主機執行命令,默認模塊,可忽略-m選項

? ansible srvs -m command -a ‘service vsftpd start’

? ansible srvs -m command -a ‘echo magedu |passwd – -stdin wang’ 不成功

? 此命令不支持$VARNAME< > |;&等,用shell模塊實現

Shell:和command相似,用shell執行命令

? ansible srv -m shell -a ‘echo magedu|passwd – -stdin wang’

? 調用bash執行命令,類似cat /tmp/stanley.md |awk -F ‘|” {print ?2}’ &> /tmp/example.txt這些復雜命令,即使需要的結果拉回執行命令的機器

Script :運行腳本

? -a “/PATH/TO/SCRIPT_FILE”

? ansible websrvs -m script -a f1.sh

Copy :從服務器復制文件到客戶端

? ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes”

? 如目標存在,默認覆蓋,此處指定備份

? ansible srv -m copy -a “content=’test content\n’ dest=/tmp/f1.txt” 利用內容,直接生成目標文件

cron 計劃任務

? 支持時間:minute, hour,day,month,weekday

? ansible srv -m cron -a “minute=*/5 job=’/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’name=synctime” 創建任務

? ansible srv -m cron -a ‘state=absent name=synctime’ 刪除任務

ansible all -m cron -a 'minute=* weekday=1,3,5' job="/usr/bin/wall  FBI warning" name=warningcron'設置計劃任務
ansible all -m cron -a 'disabled=false job="/usr/bin/wall  FBI warning" name=warningcron'取消計劃任務

Fetch :從客戶端取文件至服務器端,copy相反,目錄可先tar

? ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/sciripts’

? ansible all -m shell -a ‘tar Jcf log.tar.xz /var/log/*.log’

File :設置文件屬性

? ansible srv -m file -a “path=/root/a.sh owner=wang mode=755”

? ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link’

Hostname:管理主機名

? ansible node1 -m hostname -a “name=websrv”

yum:管理包

? ansible srv -m yum -a ‘name=httpd state=latest’ 安裝

? ansible srv -m yum -a ‘name=httpd state=absent’ 刪除

?

Service:管理服務

? ansible-doc -s service

? ansible websrvs – -list

? ansible srv -m service -a ‘name=httpd state=stopped’

? ansible srv -m service -a ‘name=httpd state=started enabled=yes|no’

? ansible srv -m service -a ‘name=httpd state=reloaded’

? ansible srv -m sercice -a ‘name=httpd state=restarted’

User:管理用戶

? ansible-doc -u user

? ansible srv -m user -a ‘name=user1 comment=”test user” uid=2048 home=/app/user1 group=root’

? ansible srv -m user -a ‘name=sysuser1 system=yes home=/app/user1 group=root’

? ansible srv -m user -a ‘name=user1 state=absent remove=yes’#刪除用戶及家目錄等數據

ansible websrvs -m user -a ‘name=nginx shell=/sbin/nologin/ system=yes home=/var/nginx groups=root,bin,uid=80 comment=”nginx service”‘ #創建賬號

? ansible websrvs -a ‘getent passwd nginx’#在另一臺電腦上查看

Group:管理組

? ansible srv -m group -a “name=nginx system=yes gid=80”

? ansible srv -m group -a “name=nginx state=absent”

?

ansible系列命令

? ansible-galaxy

? 連接https://galaxy.ansible.com下載相應的roles

? 列出所有已安裝的galaxy

? ansible-galaxy list

? 安裝galaxy

? ansible-galaxy install geerlingguy.redis

? 刪除galaxy

? ansible-galaxy remove geerlinguy.redis

? ansible-pull

? 推送命令至遠程,效率無限提升,對運維要求較高

? ansible-playbook

? ansible-playbook hello.yml

#mkdir ansible
#vim hello.yaml
---
-hosts: websrvs #
 remote_user: root  #以root的身份在遠程主機運行
 
 tasks:
 - name: hello
 ? command: hostname
#ansible-playbook hello.yml

? ansible-vault

? 管理加密解密yml文件

? ansible-vault [create|decrypt|edit|encrypt|rekey|view]

? ansible-vault encrypt hello.yml 加密

? ansible-vault decrypt hello.yml 解密

? ansible-vault view hello.yml 查看

? ansible-vault edit hello.yml 編輯加密文件

? ansible-vault rekey hello.yml 修改口令

? ansible-vault create new.yml 創建新文件

? ansible-console:2.0+新增,可交互執行命令,支持tab

? root@test(2)[f:10]$

? 執行用戶@當前操作的主機組(當前組的主機數量)[f:并發數]$

? 設置并發數:forks n 例如:forks 10

? 切換組:cd主機組 例如:cd web

? 列出當前組主機列表:list

? 列出所有的內置命令:?或help

? 示例:

? root@all(2)[f:5]$list

? root@all(2)[f:5]$ cd appsrvs

? root@appsrvs(2)[f:5]$list

? root@appsrvs(2)[f:5]$yum name=httpd state=present

? root@appsrvs(2)[f:5]$service name=httpd state=started

? ansible-console

? command hostname#在遠程主機執行hostname

playbook

playbook是由一個或多個“play”組成的列表

play的主要功能在于將事先歸并為一組的主機裝扮成事先通過ansible的task定義好的角色。從根本上來講,所謂的task無非是調用ansible的一個module。將多個play組織在一個playbook中,即可以讓他們聯同起來按事先編排的機制同唱一臺大戲。

playbook采用YAML語言編寫

yaml介紹

yaml語法簡介

縮進必須是統一的,不能空格和tab混用

一個name只能包括一個task

list:列表,其所有元素均使用“-”打頭

示例:
# A list of tasty fruits
- Apple
- Orange
- Strawberry
- Mango

dictionay:字典,通常由多個key與value構成

示例:
# An employee record
name:Example Developer
job:Developer
skill:Elite
也可以將key:value放置于{}中進行表示,用,分隔多個key.value
示例:
---
# An employee record
{name:Example Developer,job:Developer,skill:Elite}
?

YAML語法

示例
name:john smith
age:41
gender:male
spouse:
  name:Jane Smith
  age:37
  gender:Female
childrem:
  - name:Jimmy Smith
 ?  age 17
 ?  gender:Male
  - name:Jenny Smith
 ?  age 13
 ?  gender:Female

playbook核心元素

hosts:執行的遠程主機列表

tasks:任務集

Variables:內置變量或自定義變量在playbook中調用

Templates 模版,可替換模版文件中的變量并實現一些簡單邏輯的文件

handlers和notity結合使用,由特定條件觸發的操作,滿足條件方才執行,否則不執行

tags標簽 指定某條任務執行,用于選擇運行playbook中的部分代碼。ansibe具有冪等性,因此會自動跳過沒有變化的部分,即便如此,有些代碼為測試其確實沒有發生變化的時間依然會非常地長。此時,如果確信其沒有變化,就可以通過tags跳過此些代碼片斷。

ansible-playbook -t tagsname useradd.yml

playbook基礎組件

? hosts:

# vim file.yml
---
- hosts: websrvs
  remote_user: root
 ?
  tasks: 
 ?  - name: create new file
 ? ?  file: name=/data/newfile state=touch
 ?  - name: create new user
 ? ?  user: name=test2 system=yes shell=/sbin/nologin
 ?  - name: install package
 ? ?  yum: name=httpd 
 ?  - name: copy html
 ? ?  copy: src=/var/www/html/index.html dest=/var/www/html/
 ?  - name: start service
 ? ?  service: name-httpd state=started enable=yes
#curl 192.168.30.101
welcome to magedu

Remote_user

task列表和action

tasks:任務列表

palybook如果中間有一個命令或腳本是錯誤的,不會執行后續的命令,可使用下面的方法解決:

? tasks:

? -name:run this command and ignore the result

? shell:/usr/bin/somecommand || /bin/true

? 或者使用ignore_errors來忽略錯誤信息:

? tasks:

? -name:run this command and ignore the result

? shell:/usr/bin/somecommand

? ignore_errors:true

運行playbook

運行playbook的方式

? ansible-playbook <filename.yml>…[options]

常見選項:

? –check 只檢測可能會發生的改變,但不真正執行操作

? —list-hosts列出運行任務的主機

? –limit主機列表 只針對主機列表中的主機執行

? -v顯示過程 -vv -vvv更詳細

playbook中handlers使用

?

- hosts: websrvs
  remote_user: root
     
  tasks:
    -name: install httpd
     ?  yum: name=httpd state=present
    -name: install configure file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/
      notify: restart httpd #對應下面handlers
    -name: ensure apache is running
      service: name=httpd state=started enabled=yes
    
  handlers:
    -name: restart httpd
      service: name=httpd status=restarted
?
?

playbook中tags使用

有標簽的效果是可以單獨執行一個標簽

示例:
- hosts: websrvs
  remote_user: root
     
  tasks:
    -name: install httpd
     ?  yum: name=httpd state=present
     ? ?
    -name: install configure file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/
      tags:conf
     ?
    -name: ensure apache is running
     tags:service
     service: name=httpd state=started enabled=yes
    
  ansible-playbook -t conf httpd.yml
?

ansible websrvs -m service -a ‘name=httpd state=stoped’#停止服務

Ansible-playbook -t rshttpd httpd.yml

playbook中變量使用

變量的來源:

? 1、ansible setup facts遠程主機的所有變量都可直接調用

? 2、/etc/ansible/hosta中定義

示例:
vim app.yml
---
- hosts: appsrvs
  remote_user: root
     
  tasks:
    -name: set hostname
      hostname: name=www{{http_port}}.magedu.com

? 定義通用的分組的變量

? [websrvs]

? 192.168.30.101 http_port=81

? 192.168.30.101 http_port=81

? [websrvs:vars]

? nodename=www

? domainname=.magedu.com

? 3、通過命令行指定變量,優先級別最高

? ansible-playbook -e varname=value

變量的優先級,命令行的大于playbook大于主機清單的

示例:
vim app.yml
---
- hosts: appsrvs
  remote_user: root
     
  tasks:
    -name: install package
      yum: name={{ pkname1 }}
    -name: start service
    
#ansible-playboook -e 'pkname=vsftpd' app.yml

? 4、在playbook中定義

? vars:

? -var1:value1

? -var2:value2

示例:
vim app.yml
---
- hosts: appsrvs
  remote_user: root
  vars:
 ?  - pkname1: httpd
 ?  - pkname2: tftpd
  tasks:
    -name: install package
      yum: name={{ pkname1 }}
    -name: install package
      yum: name={{ pkname2 }}
vim var.yml
---
- hosts: websrvs
  remote_user: root
 ?
tasks: 
?

模版templates

示例:
mkdir /etc/ansible/templates
#cp         nginx.conf/j2
#vim testtesttempl.yml
nginx.conf/j2
---
- hosts: websrvs
remote_user: root
?
tasks:
  - name: install package
 ?  yum: name=nginx
  - name: copy template
 ?  template: src=nginx.cong.j2 dest=/etc/nginx/nginx.conf
  - name: start service
 ?  service: name=nginx state=state=srarted enable=yes
 #ansible-playbook -C testtempl.yml
 在其它的機器上測試
 #ansible websrvs -m shell -a 'ss -ntpl'    #查看端口
 #ansible websrvs -m shell -a 'ps aux|grep nginx'

示例:

?
#vim testtesttempl.yml
nginx.conf/j2
---
- hosts: websrvs
remote_user: root
?
tasks:
  - name: install package
 ?  yum: name=nginx
  - name: copy template
 ?  template: src=nginx.cong.j2 dest=/etc/nginx/nginx.conf
 ?  notify: restart service
  - name: start service
 ?  service: name=nginx state=state=srarted enable=yes
 ? ?
  handlers:
 ? ? - name: restart service
 ? ? service: name=nginx.cong.j2

when

#vim testtesttempl.yml
---
- hosts: websrvs
remote_user: root
vars:
  - http_port: 88
 ?
tasks:
  - name: install package
 ?  yum: name=nginx
  - name: copy template for centos7
 ?  template: src=nginx.congf7.j2 dest=/etc/nginx/nginx.conf
 ?  when: ansible_distribution_major_version == "7"
 ?  notify: restart service
  - name: copy template for centos6
 ?  template: src=nginx.congf6.j2 dest=/etc/nginx/nginx.conf
 ?  when: ansible_distribution_major_version == "6"
 ?  notify: restart service
  - name: start service
 ?  service: name=nginx state=srarted enable=yes
 ? ?
handlers:
  - name: restart service
 ?  service: name=nginx state=restarted

迭代:with_items

vim testtitem.yml
---
- host: all
remote_user: root
?
tasks: 
  - name: create some files
 ?  file: name=/data/{{ item }} state=touch
 ?  when: ansible_distribution_major_version == "7"
 ?  with_items:
 ? ?  - file1
 ? ?  - file2
 ? ?  - file3
  - name=: install some packages
 ?  yum: name={{ item }}
 ?  with_items:
 ? ?  - htop
 ? ?  - sl
 ? ?  - hping3
 ? ?  在另外兩臺機器上驗證
#ansible all -m shell -a 'ls /data/ -l'
#ansible all -m shell -a 'rpm -q htop sl hping3'

創建組

vim testitem2.yml
---
- host: all
remote_user: root
?
tasks: 
  - name: create some files
 ?  group: name={{ item }} 
 ?  when: ansible_distribution_major_version == "7"
 ?  with_items:
 ? ?  - g1
 ? ?  - g2
 ? ?  - g3
  #ansible-playbook testitem2.yml

創建3個組,并且創建3個用戶,并分別把三個用戶分別加到三個組里面

迭代嵌套子變量

vim tesitem3.yml
---
- host: websrvs
remote_user: root
?
tasks: 
  - name: create some groups
 ?  group: name={{ item }} 
 ?  when: ansible_distribution_major_version == "7"
 ?  with_items:
 ? ?  - g1
 ? ?  - g2
 ? ?  - g3
 ? - name: create some users
 ? ? user: name={{itwm.name}}group={{item.group}}
 ? ? with_items:
 ? ? ? -{ name: 'user1',group: 'g1' }
 ? ? ? -{ name: 'user2',group: 'g2' }
 ? ? ? -{ name: 'user3',group: 'g3' }
  #ansible-playbook tesitem3.yml
  #ansible all -m shell 'genten passwd'

for循環

利用for循環,生成一個語句塊,生成一些配置信息,監聽端口81,82,83

vim testfor.yml
---
- hosts: websrvs
remote_user: root
vars:
  ports: 
 ?  - 81
 ?  - 82
 ?  - 83
tasks:
  - name: copy conf
 ?  template: src=for1.conf.j2 dest=/data/for1.conf
#vim for1.conf.j2
{% for port in ports %}
server{
 ?      listen {{port}}
}
{% endfor %}
?

用字典的方式來改

vim testfor2.yml
---
- hosts: websrvs
remote_user: root
vars:
  ports: 
 ?  - listen_port:81
 ?  - listen_port:82
 ?  - listen_port:83
tasks:
  - name: copy conf
 ?  template: src=for1.conf.j2 dest=/data/for1.conf
#vim /templatefor1.conf.j2
{% for port in ports %}
server{
 ?      listen {{ port.listen_port }}
}
{% endfor %}
#ansible-playbook  testfor2.yml

嵌套

vim testfor2.yml
---
- hosts: websrvs
remote_user: root
vars:
  ports: 
 ?  - web1:
 ?  port: 81
 ?  name: web1.magedu.com
 ?  rootdir: /data/website1
 ?  - web2:
 ?  port: 82
 ?  name: web2.magedu.com
 ?  rootdir: /data/website2
 ?  - web3:
 ?  port: 83
 ?  name: web3.magedu.com
 ?  rootdir: /data/website3
tasks:
  - name: copy conf
 ?  template: src=for1.conf.j2 dest=/data/for1.conf
#vim /templatefor3.conf.j2
{% for p in ports %}
server{
 ?      listen {{ p.listen_port }}
 ?      servername{{ p.name }}
 ?      ducumentroot{{ p.rootdir }}
}
{% endfor %}
#ansible-playbook  testfor3.yml
注意調用的路徑問題,
在其它機器上查看
cat /data/for3.conf

if的用法

vim testfor2.yml
---
- hosts: websrvs
remote_user: root
vars:
  ports: 
 ?  - web1:
 ?  port: 81
 ?  #name: web1.magedu.com
 ?  rootdir: /data/website1
 ?  - web2:
 ?  port: 82
 ?  name: web2.magedu.com
 ?  rootdir: /data/website2
 ?  - web3:
 ?  port: 83
 ?  #name: web3.magedu.com
 ?  rootdir: /data/website3
tasks:
  - name: copy conf
 ?  template: src=for4.conf.j2 dest=/data/for4.conf
#vim /templatefor4.conf.j2
{% for p in ports %}
server{
 ?      listen {{ p.listen_port }}
{% if p.name is defined %} ?    
 ?      servername{{ p.name }}
{% endif %} ?   
 ?      ducumentroot{{ p.rootdir }}
}
{% endfor %}
#ansible-playbook  testfor4.yml

roles

roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變量、文件、任務、模版及處理器放置于單獨的目錄中,并可以便捷地include他們的一種機制。

部署nginx服務,
1、創建nginx用戶、
2、創建nginx組、
3、yum安裝包、
4、配置template:nginx
5、啟動服務。
#cd /etc/ansible/
#mkdir roles/{httpd,mysql memcache}
#mkdir roles/nginx
#規劃子目錄 一個放任務,一個放模版
#cd /nginx
#mkfir tasks templates
#cd tasks
#vim group.yml
- name: create group
  group: name=nginx gid=80
#vim user.yml
- name: create user
  user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
#vim yum.yml
- name: install package
  yum: name:nginx
#vim start.yml
- name: start service
  service: name=nginx state=start enable=yes
#vim restart.yml
- name: restart service
  service: name=nginx state=start enable=yes ?
#cp /etc/nginx/conf.d
worker_processes {{ ansible_processor_vcpus+2 }};
vim templ.yml
- name: copy conf
  template: src=nginx.cong.j2 dest=/etc/nginx/nginx.conf
# vim main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
# 切換到和roles平級的目錄
#vim nginx_role.yml
- hosts: websrvs
  remote_user: root
  roles:
 ? ?  role: nginx
 #ansible-playbook -C nginx_role.yml

定義httpd別的角色

cd roles/httpd/
mkdir tasks
cd tasks
ls
#創建apache用戶
#vim user.yml
- name: create user
  user: name=apache system=yes shell=/sbin/nologin
#vim copyfile.yml
- name: copy files
  copy: src=/etc/httpd.conf dest=/data/ owner=apache
#vim main.yml
- include: user.yml
- include: copyfile.yml
#vim httpd_role.yml
- hosts: websrvs
  remote_user: root
 ?
  roles: 
  - httpd
#ansible-playbook httpd_role.yml
?

在一個角色中跨項目調用另一個角色或著兩個角色都使用。假如一個提供web服務,一個提供php服務。

Ansible all -m shell -a ‘userdel nginx’

#vim some_role.yml
- hosts: websrvs
  remote_user: root
 ?
  roles: 
  - role: httpd
  - role: nginx
  引用另外的角色,比如在nginx中調用httpd的copy.yml
  #vim roles/nginx/tasks/main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
- include: roles/httpd/tasks/copyfile.yml
#ansible-playbook nginx_role.yml

roles playbook tags使用

在角色中加標簽tags

- hosts: websrvs
  remote_user: root
  roles:
 ?  - {{ role: httpd,tags:['web','httpd']}}
 ?  - {{ role: nginx,tags:['web','nginx']}}
 ?  - {{ role: app,tags:"app"}}
#cp -r nginx/ app/
#ansible-playbook -t web some_role.yml  #只運行web標簽
- hosts: all
  remote_user: root
  roles:
 ?  - { role: httpd,tags:['web','httpd']}
 ?  - { role: nginx,tags:['web','nginx'],when: ansible_distrubution_major_version == "7"}}
 ?  - { role: app,tags:"app"}
?
#ansible-playbook some_role.yml #只運行web標簽

綜合實驗:

以httpd為例,創建app用戶
mkdir root/anxible/roles/app
mkdir tasks templates vars handers files
cd tasks
#vim group.yml
- name: create group
  group: name=app system=yes gid=123
 ?
#vim user.yml
- name: create user
  user: name=app group=app system=yes shell=/sbin/nologin uid=123
#vim yum.yml
- name: install package
  yum: name=httpd
#cp /etc/http/conf/httpd.conf ../templates/httpd.j2
vim ../templates/httpd.j2
listen {{ ansible_processor_vcpus*10 }}
user {{ username }}
group {{ group }}
#vim        定義變量
 username: app
 groupname: app
#vim tasks/templates.yml
- name: copy conf
  template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
  notify:  restart service
#vim handlers/restart.yml
- name: restart service
  service: name=httpd state=restarted
#vim task
- name: start service
service: name=httpd state=started enable=yes
#tree
#touch files/vhosts.conf
#vim 
- name: copy config
  copy: src=vhosts.conf dest=/etc/httpd/conf.d/ owner=app 
 ?
#vim roles/main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: copu.yml
- include: start.yml
#ansible-playbook -C app.yml
?
?

tips

rpm -ql memcached

cat /etc/sysconfigmemcached

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100169

(0)
what?what?
上一篇 2018-06-03
下一篇 2018-06-03

相關推薦

欧美性久久久久