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.178linux.com/65855

(0)
N24_yeziN24_yezi
上一篇 2017-01-04 18:50
下一篇 2017-01-04 20:33

相关推荐

  • 第九周

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash for i in `cut -d':' -f7 /etc/passwd`;do &n…

    Linux干货 2016-09-26
  • 磁盘分区管理之磁盘基础知识1

    1、磁盘基础知识 1.1 磁头 磁头是利用气流漂浮在盘片上,并没有接触到盘片,因而可以在各轨间高速来回移动,但如果磁头距离盘片太高,读取的信号就会太弱;太低又会磨到盘片表面,所以盘片表面必须相当光滑平整,任何异物和尘埃均会使得磁头摩擦到表面而造成数据永久性损坏。 硬盘读写磁头为了能在磁盘表面高速来回移动读取数据,则需漂浮在磁盘表面上,但是不能接触,接触就会造…

    Linux干货 2016-09-07
  • Linux网络属性配置命令和管理详解

    一、Linux网络属性配置     1.Linux主机接入到网络方式 IP/NETMASK:实现本地网络通信 路由(网关):可以进行跨网络通信 DNS服务器地址:基于主机名的通信,Linux可以有三个DNS地址 当第一个地址本身挂了,才会查找其备用地址;若第一个地址无法解析则停止     2.网络属…

    Linux干货 2016-04-30
  • 马哥教育网络班21期-第一次课程作业

    计算机组成部分及其作用 1.总线 电子管道,携带信息字节并在各个部件间传输。分为地址总线,数据总线,控制总线。 CPU最大可寻址范围:2^N*M,  N为地址总线数量,M为数据总线数量。 2.I/O设备 I/O设备及输入输出设备,最常见的输入设备就是我们非常熟悉的键盘,鼠标,我们通过我们通过这些设备向计算机传达指令,让计算机完成我们想要它完成的工作…

    Linux干货 2016-06-29
  • linux基础入门常识

    1、计算机的组成及功能 控制器:对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器:对数据进行各种算术运算和逻辑运算。 存储:存储程序、数据和各种信号、命令等信息。 输入:将程序、数据、字符、控制命令等信息输入到计算机进行处理。 输出:将计算机处理过的数据或信号输出出来。 2、linux…

    Linux干货 2017-12-03
  • 招聘Linux运维工程师

    岗位职责: 公司集群硬件的日常维护及管理 负责公司内网的服务器安装,部署和维护 监控服务器状态,发现问题并及时维护 负责产品发布上线 承担mangoDB的日常巡检 集群数据服务器的备份 编写服务器维护脚本,减少工作量,提高工作效率 任职要求: 1年以上Linux系统管理经验,精通Linux的管理和维护 能够熟练编排查运维过程中出现的服务故障,系统故障,网络故…

    Linux干货 2017-12-04

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-23 07:46

    很详细,不过对于ansible后期使用更多的是结合构建发布体系整合。