ansible配置文件顺序|使用pip方式安装ansible的配置文件在哪

|

A. Ansible安装配置和基本使用

http://www.tuicool.com/wx/vUfYVfA 一、ansible 安装 ansible 依赖于python2.6或更高的版本、paramiko、PyYAML及Jinja2。 https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz 将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件 备份旧版本的python,并符号链接新版本的python 修改yum脚本,使其指向旧版本的python,已避免其无法运行 1.1 编译安装 解决依赖关系 解压安装包 https://github.com/ansible/ansible/archive/v1.7.2.tar.gz 编译安装 拷贝配置文件 1.2 rpm包安装 使用阿里云镜像源即可,这里为了方便使用,就直接使用yum安装了。 Fedora 用户可直接安装Ansible, 但RHEL或CentOS用户,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible 注意:不同版本的ansible的功能差异可能较大。 二、配置 配置文件:/etc/ansible/ansible.cfg hostfile=/etc/ansible/hosts #指定默认hosts配置的位置 host_key_checking = False #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤 ask_pass=True # 每次执行ansible命令是否询问ssh密码 ask_sudo_pass=True # 每次执行ansible命令时是否询问sudo密码 主机清单:/etc/ansible/hosts 主程序:ansible、ansible paly-book、ansible-doc 1、将要管理的主机纳入 /etc/ansible/hosts配置文件中,可以填写IP或是主机名 [WebServers] 10.10.10.3 10.10.10.4 2、.基于ssh的方式与被管理的主机进行通信,在管理的主机上(部署ansible的主机上)生成一对非对称密钥,将公钥发给被管理的主机。 a,生成密钥对:ssh-keygen -t rsa b,将密钥发放到要管理的主机:ssh–id -i 10.10.10.3 或 ssh–id -i /root/.ssh/id_rsa.pub [email protected] 3、使用ansible命令测试 [root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS => { "changed": false, "ping": "pong" } 三、基本使用 1、常用命令 ansible-doc 命令:获取模块列表、模块使用格式。 ansible-doc -l :获取列表 ansible-doc -s mole_name:获取指定模块信息 2、ansible 命令格式 ansible <host-pattern> [-f forks] [-m mole_name] [-a args] <host-pattern> 指明管控主机,以模式表示或者直接指定ip,必须事先指定在文件中;all所有 [-f forks] 指明每批管控多少主机,默认是5个主机一批次 [-m mole_name] 使用何种模块操作,所有操作都需要通过模块指定 [-a args] 指明模块专用参数;args 一般是 key=value格式。注:command模块的参数不是kv模式,而是直接给出要执行的命令。 注意:<host-pattern> 默认读取/etc/ansible/hosts,也可以指明自定义文件路径 -iPATH,–inventory=PATH:指明使用的 host inventory文件路径; 3、常用模块介绍 1、command模块:远程主机上运行命令 例:ansible hosts -m command -a "ls /tmp" 注:command模块也可以省略。 给远程主机添加用户、设置密码: ansible hosts -a 'useradd user1' ansible hosts -a 'echo abc | passwd –stdin user1' 2、shell模块:远程主机在shell进程下运行命令,支持shell特性,也支持管道符。 10.10.10.4 | SUCCESS | rc=0 >> 3、模块:把当前主机文件复制到远程主机位置,可以指定mode、own、group 10.10.10.4 | SUCCESS => { "changed": true, "checksum": "", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 } 4、cron模块:在远程主机指定crontab周期性计划任务 minute= hour= day= month= weekday= job= name= (必须填写) state= ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 & >/dev/null' name=synctime" 可使用crontab -l查看 在管理的主机上可以删除制定的计划任务 10.10.10.4 | SUCCESS => { "changed": true, "envs": [], "jobs": [] } 5、fetch模块:和相反,从远程主机拷贝文件到本地主机 可以不要flat=yes参数,但作用: 当dest=/root/kel/ ,abc.txt会保存在/root/kel/目录下 当dest=/root/kel ,会拷贝abc.txt文件,并命名成kel 6、file模块:file模块包含了文件、文件夹、超级链接类的创建、拷贝、移动、删除 path=/etc/foo.conf owner=foo group=foo mode=0644 src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items: path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r" path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw" 7、yum模块:用于yum安装安装和卸载 8、service模块:服务管理 9、user/group模块:user模块管理用户;group模块管理group 四、Playbook剧本 playbook 是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行。playbook组织格式为使用YAML语言来编写的。 playbook 是由一个或多个“play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上讲,所谓的task无非是调用ansible的一个mole。将多个play组织在一个playbook中,即可以让他们联通起来按事先编排的机制生效。 1、例子: 在ansible主机上的root目录下创建httpd目录,将本机的httpd.conf文件拷贝到该目录下,修改配置文件里的监听端口是8081 remote_user:root #root前不能有空格 tasks: #任务列表 yum name=httpd state=present #yum后的: 删除掉 src=/root/httpd/httpd.conf dest=/etc/httpd/conf service name=httpd state=started 注意:yaml文件中支持#;下面的操作要跟上面的name对齐。 测试: ansible-playbook –check playbook :只检测可能会发生的改变,但不真正执行操作 ansible-playbook playbook :直接执行 ansible-playbook –list-hosts :列出运行任务的主机 2、playbook介绍 设置在特定条件下触发: a,某任务的状态在运行后为changed时,可通过“notify”通知给相应的handles; handles:任务在特定条件下触发;接收到其他任务的通知是被触发; b,任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;

B. Ansible系列-基础篇-Ansible 常见模块的使用

原文地址: Ansible系列-基础篇-Ansible 常见模块的使用

→ 上一篇中简单尝鲜了几个模块,本篇整理下实际中用到的模块及其用法Demo,总计有19个模块,分别为 ping、setup、debug、user、group、authorized_key、shell、script、command、service、systemd、、template、synchronize、file、lineinfile、yum、cron

ping 模块主要是验证 管理节点 和 目标节点 之间的连通性,是否正常配置好了对应账号的ssh免密登录

上一篇中配置的时候提到ansible facts 收集目标主机信息,也可以使用 setup 模块。

这个模块的好处就是让了解到 Ansible 都有哪些内置的变量,这些变量在我们后续写playbook的时候,在role templates 中配置很有帮助,

举个列子,Ansible 批量部署 zabbix agent,每个agent的配置文件中的 ListenIP 和 Hostname 我们就可以使用facts中的变量 ansible_default_ipv4.address 和 ansible_hostname

另外一旦知道知道都有哪些变量的时候,下次我们就可以再收集信息展示的时候,加参数通过filter来过滤我们想看的变量就可。比如

顾名思义,就是我们想调试输出一些结果的时候,比如上面提到的我想知道目标主机的IP地址

这里有两种用法,一种是 msg 输出,需要带 {{ variable-name }} , 另外一种是 var 用法,直接写变量名即可,不用添加 {{ }}

远程管理用户/用户组

主要用来给目标主机用户配置公钥,默认到目标用户家目录的.ssh目录的authorized_keys文件 没有则创建authorized_keys文件

这里是把 shell 和 script、command放到一起做对比,其实还有个 raw

其中 command 执行单一命令不能使用管道符、重定向符等,raw 类型command,可以使用管道符等;

shell 和 script 类似,都可以执行脚本,却别在于script执行的脚本在ansible管理机上,而shell执行的脚本必须先放到目标节点上去,才能执行;

另外shell执行可以使用环境变量,bash等,但是script只是执行脚本,不能带 bash

都是用来管理服务器上的服务,区别在于Service服务管理用于centos6及以前的系统,而systemd命令应用于centos7系统

核心参数 namestateenabled

把管理节点的文件到目标节点,并配置相关属性

template 的作用和一样,区别在于源文件是jinja2格式,文件中可以配置 Ansible变量,然后在目标节点上替换成对应的目标值

另外一个需要住的就是在roles中,默认是从files目录获取文件,template默认是 templates 文件夹获取模板文件

主要用于目录、文件的同步,基于 rsync实现,主要是有 push 和 pull 两种方式, 如果是push 推送,则src是管理节点,dest是目标节点;如果是pull拉取,则src是目标节点,dest是管理节点

在目标节点创建文件或目录,删除文件或目录,修改文件或目录的权限等;核心参数有:path、state、owner、group、mode、recurse

在文件中添加、修改、删除一行记录,在实践中用的很多,这里做简单介绍,后续有单独文章详细介绍

顾名思义,就是我们在Centos下进行yum安装,核心参数主要关注: name 需要安装的软件名、state 软件的状态(present、absent、removed、latest)和 enablerepo 特殊情况指定yum源

管理Linux定时任务,核心参数说明 name 定时任务的名称、 state 任务的状态、minute/hour/day/month/weekday 分别设定任务执行的时间配置、user指定是哪个用户配置任务,默认是管理员

C. 使用pip方式安装ansible的配置文件在哪

1. 打开上节的解决方案,为JackWangServiceClient工程添加一个App.config文件 2. 修改App.config的文件如下 <xml version="1.0" encoding="utf-8" > <configuration> <system.serviceModel> <client> <endpoint name="MyEndPoint"我安装ansible的方式用pip安装,但是找不到配置文件,pip方式安装的配置文件在哪的?/etc目录下是没有的[root@localhost logs]# cd /etc/ananacrontabanthy-conffind找了,也没[root@localhost ~]# find / -name ansible/usr/local/python27/bin/ansible/usr/local/python27/lib/python2.7/site-packages/ansible[root@localhost~]# cd /usr/local/python27/lib/python2.7/site-packages/ansible

D. Ansible-基本概述

为什么要自动化运维

我们以 10 台机器部署 Nginx 为例。部署步骤如下:

1、通过 ssh 登录一台机器;

2、yum install -y nginx 或者 获取安装包自行编译安装;

3、配置 Nginx

4、启动 Nginx ,如有必要加入开机自启动;

5、退出登录

上面步骤重复 10 次,即可完成我们的部署要求。

痛点:

1、重复操作频繁,增加了人工成本和后续维护成本;

2、机器太多时,容易落下某些机器且未操作,进而产生后续影响;

3、人工频繁操作时可能有操作步骤不完整的情况,造成该机器和其他机器状态不一致。

我们还是以 10 台机器部署 Nginx 为例。部署步骤如下:

1、在控制机或者称为管理机的机器上写好相关脚本。「当然该脚本我们是测试通过的,脚本中包括安装、配置、启动等等」

2、将写好的脚本从控制机推送到受控机;

3、在受控机执行相关脚本,根据脚本部署我们需要的 Nginx。

好处

1、减少了重复操作,提高了工作效率;

2、减小了出错几率,提高了准确率;

3、所有机器状态一致,降低了后续维护成本。

软件安装部署

配置同步

代码变更

命令执行

任务执行

Ansible 是基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能的自动化管理工具。

Ansible 是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是 Ansible 所运行的模块,Ansible 只是提供一种框架。进而能减少我们的重复操作,提高工作效率。

Ansible 不需要在远程主机上安装 client/agents,因为它们是基于 SSH 来和远程主机通讯的。

Ansible 目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

1、批量执行远程命令:可以对 N 台主机同时进行命令的执行;

2、批量配置软件服务:可以用自动化的方式管理配置和服务;

3、实现软件开发功能:例如 jumpserver 底层使用 Ansible 来实现自动化管理;

4、编排高级的 IT 任务:Ansible 的 Playbooks 是一门编程语言,可以用来描绘一套 IT 架构。

1、部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作;

2、安全可靠,默认使用 SSH 协议对被控端进行管理;

3、有大量的常规运维操作模块,可实现日常绝大部分操作;

4、配置简单、功能强大、扩展性强;

5、支持 API 及自定义模块,可通过 Python 轻松扩展;

6、通过 Playbooks 来定制强大的配置、状态管理;

7、轻量级,无需在客户端安装 Agent,更新时只需在操作机上进行一次更新即可。

模块说明如下:

Ansible:Ansible 核心程序。

Host Inventory:记录由 Ansible 管理的主机信息清单,包括端口、密码、IP 等。

Playbooks:“剧本” YAML 格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。

Core Moles:核心模块,主要操作是通过调用核心模块来完成管理任务。

Custom Moles:自定义模块,完成核心模块无法完成的功能,支持多种语言。

Connection Plugins:连接插件,Ansible 和 Host 通信使用

Ansible 控制主机对被管节点的操作方式可分为两类,即 ad-hoc 和 playbook:

ad-hoc 模式(点对点模式)

使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。 就相当于 bash 中的一句 shell。

playbook 模式(剧本模式)

是 Ansible 主要管理方式,也是 Ansible 功能强大的关键所在。 playbook 通过多个 tasks 集合完成一类功能 ,如 Web 服务的安装部署、数据库服务器的批量备份等。可以简单地把 playbook 理解为通过组合多条 ad-hoc 操作的配置文件。

简单理解就是:Ansible 在运行时,首先读取 ansible.cfg 中的配置,根据规则获取 Inventory 中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

1、加载自己的配置文件,默认 /etc/ansible/ansible.cfg;

2、查找对应的主机配置文件,找到要执行的主机或者组;

3、加载自己对应的模块文件,如 command;

4、通过 Ansible 将模块或命令生成对应的临时py文件(python脚本),并将该文件传输至远程服务器;

5、对应执行用户的家目录的 .ansible/tmp/XXX/XXX.PY文件;

6、给文件 +x 执行权限;

7、执行并返回结果;

8、删除临时py文件,sleep 0退出;

E. ansible总结

ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.

ansible被定义为配置管理工具,配置管理工具通常具有以下功能:

常用的自动化运维工具技术特性比较:

ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

Ansible任务执行模式分为以下两种:

ansible配置文件查找顺序

ansible配置文件 ansible 有许多参数,下面我们列出一些常见的参数:

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。 inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。

Inventory文件格式:

inventory其他的参数

ansible通过ssh实现配置管理、应用部署、任务执行等功能,因此,需要事先配置ansible端能基于密钥认证的方式联系各被管理节点。

ansible命令使用语法:

例如:

可以通过 ansible-doc -l 列出所有可用的mole,常用的mole有:

ansible -s <mole-name> 可以查看指定mole的用法,或者参看 官方帮助文档 :

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个mole。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。

下面是一个简单示例:

playbooks的组成部分

执行过程:

playbook安装配置apache实战

ansilbe自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

一个roles的案例如下所示:

在playbook中,可以这样使用roles:

也可以向roles传递参数:

也可以用条件来使用roles:

ansible运行playbook时会启动很多ssh连接来执行复制文件,运行命令这样的操作.openssh支持这样一个优化,叫做ssh Multiplexing,当使用这个ssh Multiplexing的时候,多个连接到相同主机的ssh回话会共享相同的TCP连接,这样就只有第一次连接的时候需要进行TCP三次握手.

ansible会默认使用ssh Multiplexing特性,一般不需要更改配置,相关的配置项为:

ansible执行过程中,他会基于调用的模块生成一个python脚本,然后将python脚本复制到主机上,最后执行脚本.ansible支持一个优化,叫做pipelining,在这个模式下ansible执行脚本时并不会去复制它,而是通过管道传递给ssh会话,这会让ansible的ssh会话从2个减少到1个,从而节省时间.

pipelining默认是关闭的, 因为他需要确认被管理主机上的/etc/sudoers文件中的 requiretty 没有启用, 格式如下:

ansible开启pipelining方法, 修改ansible.cfg配置文件:

ansible playbook会默认先收集fact信息,如果不需要fact数据可以在playbook中禁用fact采集:

也可以全局禁用fact采集:

另一种解决方案就是使用fact缓存,目前ansible支持下面几种fact缓存:

jsON文件做fact缓存示例 ansible把采集到的fact写入控制主机的json文件中,如果文件已经存在,那么ansible不会再去主机上采集fact

启用JSON文件缓存,修改ansible.cfg文件:

ansible默认并发数是5,可以用下面两种方法修改并发数:

ansible内置多种云计算相关模块,如aws,openstack,docker等,下图是ansible与docker相关的模块:

通过playbook和dockerfile相结合的方式生成镜像, 示例如下:

ansible可以通过docker模块来操作容器,示例如下:


赞 (0)