ansible基礎應用

ansible基礎

一、運維主要工作

ansible基礎應用

ansible聚集以上功能于一身,能夠完整輕易的實現應用部署和批量命令功能,適用于主機數量不太多,再大的用puppet。

二、ansible特性

(1)模塊化:調用特定的模塊,完成特定任務;

(2)基于python語言實現,由paramiko,PYYAML和JINJa2三個關鍵模塊組成

(3)部署簡單:agentless,被紅帽收購,故備收入epel源

(4)支持自定義模塊

(5)支持playbook(劇本)

三、ansible組成+部署

ansible基礎應用

部署:yum -y install ansible

配置文件:/etc/ansible/ansible.cfg

主機清單:/etc/ansible/hosts

主程序:ansible、ansible paly-book、ansible-doc

四、準備工作

1、主機(要管理的)納入主機清單

ansible基礎應用

2、基于ssh的方式與要管理主機通信(密鑰)

(1)生成一對密鑰:ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''

(2)將公鑰發給要管理的主機:ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.124

3、然后進行我們的第一個ansible命令吧

簡單實用格式:ansible <host-pattern> [-m module_name] [-a args] [options]

ping管理的所有主機:ansible all -m ping

ansible基礎應用

五、ansible的常用模塊(用ansible-doc -l可以顯示)

(1)command模塊:遠程主機上運行命令

例如:ansible webservers -m command -a "ls /var"

ansible基礎應用

ansible webservers -a "useradd user1",command模塊可以省

ansible webservers -a "echo magedu |passwd –stdin user1" ,不成功,不支持管道

ansible基礎應用

(2)shell模塊:(管道可以用)遠程主機在shell進程下運行命令,支持shell特性

例如:ansible webservers -m shell -a "echo cwj1111|passwd –stdin user1"

ansible基礎應用

(3)copy模塊:把文件復制到遠程位置

例如:ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab" 可以指明mode(權限),group(組),owner(主)。

ansible基礎應用

(4)cron:管理任務計劃的

minute=,day=,month=,weekday=,hour=,job=,name=(必須要給),state=

例如:ansible all -m cron -a "minute=*/5 job='/sbin/ntpdate 192.168.1.109 &> /dev/null' name=Synctime "

ansible基礎應用

在被管理主機上使用crontab -l便可以看到

ansible all -m cron -a "state=absent name=Synctime" 就可以刪除

(5)fetch模塊:拉取文件的(從遠程主機上拉取文件到本地)

ansible-doc -s fetch 查看

(6)file模塊:設定文件屬性(屬組,屬主)

例如:ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"

ansible基礎應用

修改屬性:path= ,owner= ,mode= ,group=

創建目錄:ansible all -m file -a "path=/tmp/tmpdir state=directory "

(7)pip模塊:管理python的模塊

(8)yum模塊:用yum包管理,管理包

例如:ansible all -m yum -a "name=httpd state=present"

ansible基礎應用

上面顯示的是我已經裝過了,就沒有改變,現在我們卸載了看看:ansible all -m yum -a "name=httpd state=absent"

ansible基礎應用

在使用rpm看一下就沒有了

ansible基礎應用

(9)service模塊:管理服務

name=,state=, started(啟動),stopped(停止),restarted(重啟), enabled=,runlevel=

例如:先查看兩臺主機的80端口,再啟動

ansible all -m shell -a "ss -tnl |grep :80 "

ansible all -m service -a "name=httpd state=started"

ansible基礎應用

啟動之后:

ansible基礎應用

(10)user模塊:管理用戶,賬號,組

name=,system=,uid=,shell=,group=,groups=,home=,passwd=,remove=(state=absent,同時刪除家目錄)

例如:ansible all -m user -a "name=user2 system=yes state=present uid=306 "

ansible基礎應用

(11)setup模塊,收集變量

六、ansible-playbook

ansible使用YAML語法描述配置文件,YAML語法以簡潔明了、結構清晰著稱。ansible的任務配置文件被稱為playbook,就是劇本,每個劇本里面包含一系列的任務,每個任務在ansible中又被稱為“戲劇”(play)。

(1)YAML語法格式

數據結構可以用類似大綱的縮排方式呈現,結構通過通過縮進來表示,連續的項目可以通過減號“-”來表示,map結構里面的key/value對用冒號“:”來分隔。如下:

house:
family:
name:Doe
parents:
    - John
    - Jane
children:
    -Paul
    -Mark
    -Simone
address:
number: 34
street:Main Street
city:Nowheretown
zipcode:12345

- hosts:webservers
vars:
    http_port:80
    max_clients:200
remote_user:root
tasks:
    -name:ensure apache is at the latest version
yum:pkg=httpd state=latest
template:src=/src/httpd.j2 dest=/etc/httpd.conf
notify:restart apache
    -name:ensure apache is running
service:name=httpd state=restarted

(2)例子

先創建一個working文件夾,再cd到working里面,把yaml文件移到里面,創建一個files目錄,把配置好的httpd.conf移到里面去,改一下監聽端口,改成8080

ansible基礎應用

ansible-playbook –check web.yaml

ansible基礎應用

測試一下:

啟動:ansible all -m service -a "name=httpd state=restarted"

ansible all -m shell -a "ss -tnl |grep :8080"

ansible基礎應用

(3)上面的有一個缺陷,我改動那個配置文件了怎么辦,這個時候就要用handlers了

在特定條件下觸發;接收到其他任務的通知時被觸發。Tasks中的任務都是有狀態的,changed或者ok。 在Ansible中,只在task的執行狀態為changed的時候,才會執行該task調用的handler。Handlers 最佳的應用場景是用來重啟服務,或者觸發系統重啟操作.除此以外很少用到了。我改了配置文件要重啟吧。

ansible基礎應用

(4)指定哪一出獨唱用tags

我只想運行playbook的某一步,其他的不運行

(5)variables變量

1、facts:可以直接調用

2、ansible-playbook命令的命令行中可以自定義變量:-e 使用變量

ansible基礎應用

ansible-playbook -e pkname=memcached –check web2.yaml

3、通過roles傳遞變量

4、Host Inventory

向不同的主機傳遞不同的變量
vim /etc/ansible/hosts
[webservers]
192.168.1.106  hname=www1
192.168.1.107  hname=www2

vim hostname.yaml
- hosts: webservers
  remote_user:root
  tasks:
  - name: set hostname
  - hostname: name = {{ hname }}

ansible-playbook --check hostname.yaml

向不同的主機中傳入相同的變量
vim /etc/ansible/hosts
[webservers]
http_port=8080

inventory參數:用于定義ansible遠程連接目標主機的參數,而非變量

vim /etc/ansible/hosts
[webservers]
ansible_ssh_user=root
ansible_ssh_pass=cwj888
……

(6)模版templates:是一個文本文件內容嵌套腳本,是使用模版編程語言編程。

Jinja2:

字面量:

        字符串:使用單引號或雙引號
        數字:整數,浮點數
        列表:[item1,item2]
        元組:(item1,item2,……)
        字典:{key1:value1,key2:value2,……}
        布爾型:true|false


算術運算:
        +,-,*,/,//,%,**

比較:
        ==,!=,>=,>,<,<=

邏輯運算:
    and or not

template模塊:基于模版方式生成一個文件復制到遠程主機

例子,

(1)首先:ansible all -m setup | grep ansibleprocessorvcpus

ansible基礎應用

(2)在working/files/ 下,編輯一個epel源,這里我們直接wget 阿里的好了:wget -O working/files/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

(3)復制過去:ansible all -m copy -a "src=files/epel.repo dest=/etc/yum.repos.d "

(4)裝上nginx:ansible all -m yum -a "name=nginx state=present "

(5)創建模版文件:cp /etc/nginx/nginx.conf files/nginx.conf.j2

vim files/nginx.conf.j2

workerprocesses {{ ansibleprocessor_vcpus }};

(6)使用template將模版復制過去:

ansible基礎應用

好了,現在做的結果是讓worker_processes跟cpu的內核數相等。它比copy更厲害的是,它配置的是模版文件,就像作文模版一樣,可以根據你的需要配置吻合不同機器一個模版文件,而copy的文件是固定不變的。

(7)條件判斷,when語句,在task中使用,支持jinja2的語法格式

tasks:
- name: install conf file centos7
template: src=files/nginx.conf.c7.j2
when: ansible_distribution_major_version=="7"
- name: install conf file centos6
template: src=files/nginx.conf.c6.j2

(8)循環,迭代,我一下裝好幾個包

- name: install some pakeages
  yum: name={{ item }} state=present
  with_items:
  - nginx
  - memcached
  - php-fpm

原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/65855

(0)
N24_yeziN24_yezi
上一篇 2017-01-04
下一篇 2017-01-04

相關推薦

  • Linux文件類型及把剩下的顏色標識

    Linux文件類型及bash下的顏色標識 Linux一切皆文件 查看文件類型的命令: 例如:列出ls的文件類型                file  /bin/ls 例如:粗略的列出文件類型           &n…

    Linux干貨 2016-10-16
  • Tomcat集群之會話保持

    一:環境介紹:      OS:CentOS7.3      Ngninx:1.10.2     Tomcat:7     注:便于實驗,此處關閉全部服務器的防火墻,selinux(iptables -F  于  setenforce 0)…

    2017-05-25
  • 文本處理工具之sed

    一.介紹 sed是一個流編輯工具,可以用來實現對文本的過濾與替換,而Linux的哲學思想之一就是一切皆文件,因此對文本的操作至關重要。sed的基本工作原理是通過每次讀取一行文本來來對默寫符合條件的文本進行處理。要注意的是sed默認并不直接修改源文件,而是將讀取到的內容復制到緩沖區在中,這個緩沖區也叫做模式空間,然后在模式空間中對文本進行處理,處理完成后將結果…

    Linux干貨 2017-01-05
  • 基于Keepalived+Nginx實現高可用負載均衡

    練習貼,測試keepalived+lvs_dr高可用負載均衡

    2017-12-11
  • 計算機組成及Linux基礎

    第1題:描述計算機的組成及功能 1.1計算機的組成       計算機是有 運算器,控制器,存儲器,輸入設備和輸出設備組成計算機 1.2計算機各部件功能 運算器 對數據進行算術運算,邏輯運算和對數據進行加工處理 存儲器 存儲程序,數據和各種信號,命令等信息,并在需要時提供這些信息 控制器 是整個計算機的中樞神…

    Linux干貨 2017-07-02
  • 計劃任務管理

        Linux系統計劃任務有兩種:A、一次性任務;B、定時循環任務。     一次性任務:at命令。at的安裝包名字就是at,可以使用命令"yum install at"進行安裝.安裝完成后,啟用atd服務就可以運行at命令了.運行格式為:at [opti…

    Linux干貨 2016-11-27

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-23 07:46

    很詳細,不過對于ansible后期使用更多的是結合構建發布體系整合。

欧美性久久久久