文档章节

Ansible基本配置以及使用示例

Andy-xu
 Andy-xu
发布于 2017/04/23 22:19
字数 1999
阅读 102
收藏 0

##Ansible基本使用以及模块详解

准备条件:注意:前提是ansible已经正常安装,并且可以使用

1.在ansible主机上创建ssh公私钥对

ansible-sh-4.1sh-4.1# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
de:74:be:8b:2e:a2:9f:03:78:a2:4a:40:27:ee:c5:3e root@JXQ-23-200-36.h.chinabank.com.cn
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
| o .             |
|o +              |
|.. +    S . .    |
|o = o  . o o     |
| + E .  . . .    |
|o   . o..  . .   |
|o   .ooo oo o.   |
+-----------------+
一切采用默认就行

2.在目标机添加ansible主机的公钥 (当然也可以使用密码验证的方式):

注意:需要在目标主机的对应用户家目录下有.ssh目录以及authorized_keys文件,若无可以自行创建.ssh目录权限必须为0700,authorized_keys文件的权限必须为0644 将ansible主机的公钥内容拷贝到目标主机,多种方式:

ansible-sh-4.1# ssh-copy-id /root/.ssh/id_rsa.pub 目标IP:       #默认就是将当前用户的公钥(id_rsa.pub)传到目标主机并且存入认证文件
target-sh-4.1#curl pd.api.com/host_key >> /root/.ssh/authorized_keys  #可以将ansible主机的公钥文件存入公共存储,然后追加到目标主机的认证文件中

3.测试连接

ansible-sh-4.2# ansible target-sh -m ping
target-sh | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

###Ansible目录结构介绍以及配置介绍

1. Ansible目录结构

使用rpm包或者apt包安装会默认创建目录结构,但是使用pip或者源码包需要对基本的目录结构进行构建

  • 主配置文件:/etc/ansible/ansible.cfg
  • 主机信息配置文件: /etc/ansible/hosts
  • roles规则目录: /etc/ansible/roles/

2.优化后的配置配置:

ansible-sh-4.1#cat /etc/ansible/ansible.cfg
[defaults]                                    #常规连接类配置
inventory      = /etc/ansible/hosts           #定义主机信息配置文件,默认路径
forks          = 5                            #定义默认开启的并发数
poll_interval  = 15                           #定义轮询时间间隔
sudo_user      = root                         #定义默认sudo用户
#ask_sudo_pass  = True                        #是否需要sudo密码
#ask_pass      = True                         #是否需要密码
remote_port    = 51899                        #定义ssh端口
roles_path    = /etc/ansible/roles            #默认的role规则路径
host_key_checking = False                     #首次连接检查key认证(record_host_keys协作使用)
timeout = 10                                  #默认超时时间
log_path = /var/log/ansible.log               #默认日志路径
deprecation_warnings = Flase                  #该参数在使用playbooks操作的时候sudo权限不会进行提示
nocows = 1                                    #关闭cowsay功能,如果需要启用的话必须首先安装了cowsay才可以
nocolor = 0                                   #开启颜色,下面的colors设置相关的颜色
[privilege_escalation]                        #权限管理
#become    = True                             #是否sudo
#become_method  = True                        #sudo方式
#become_user    = root                        #sudo后变成root用户
#become_ask_pass= False                       #sudo后是否验证密码  

[paramiko_connection]                         #连接配置
record_host_keys=Flase                        #记录新主机的key.在host_key_checking 被禁用时候,设置为False时,性能将会提升

[ssh_connection]                              #ssh协议连接配置
ssh_args = -C -o ControlMaster=auto -o ControlPersist=1800s    #传递一组选项给Ansible,而不是使用以前的默认值.ControlPersist的值提高会提高性能,30分钟会比较合适

[accelerate]                                  #加速配置
#accelerate_port = 5099                       #加速连接端口
#accelerate_timeout = 30                      #命令执行超时时间,单位秒
#accelerate_connect_timeout = 5.0             #连接超时时间
#accelerate_daemon_timeout = 30               #上一个活动连接的时间,单位分钟

[selinux]                                     #该参数一般不会使用
[colors]                                      #配置常用的颜色
highlight = white
verbose = blue
warn = bright purple
error = red
ok = green
changed = yellow
diff_add = green
diff_remove = red
diff_lines = cyan
pipelining=true

###Ansible 模块使用指南: 使用Ad-Hoc模式(在命令行中定义任务并执行)来测试模块 格式如下:

ansible <host-pattern> -m module -a 'args' options

**ansible的Ad-Hoc模式特殊选项options:**可以在后面加上-C参数,这样将预览未来要做的操作,但是不会真正执行; --sudo表示使用sudo去执行相关的操作

####copy模块使用详情 相关选项如下: backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no content:用于替代“src”,可以直接设定指定文件的值 dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录 directory_mode:递归设定目录的权限,默认为系统默认权限 force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes others:所有的file模块里的选项都可以在这里使用 src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

**示例1:**使用copy模块进行远程拷贝文件,并赋予相关的权限。默认使用sudo切换到root执行

ansible jrm -m copy -a 'src=env.sh dest=/export/Domains/jrmcalendar.jd.local/server1/bin/ owner=admin group=admin mode=0755' --sudo

注意:copy模块中: backup=yes 会在目标路径下备份一份文件出来 如下命令会预览在目标主机执行的操作,但是不会真正执行

ansible jrm -m copy -a 'src=start.sh dest=/export/Domains/jrmcalendar.jd.local/server1/bin/start.sh owner=admin group=admin mode=0755 backup=yes' --sudo -C

####file模块使用详情 相关选项如下: force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group:定义文件/目录的属组 mode:定义文件/目录的权限 owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径 recurse:递归设置文件的属性,只对目录有效 src:被链接的源文件路径,只应用于state=link的情况 dest:被链接到的路径,只应用于state=link的情况 state

directory:如果目录不存在,就创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件

**示例2:**使用file模块在源文件不存在的情况下强制创建软链:

ansible jrapp-h5 -m file -a "src=/export/Instances/licai.base.fundredempt/runtime dest=/export/App/sc.licai.base.jd.local/fund state=link force=yes " --sudo

####command模块使用详情 相关选项如下: creates:一个文件名,当该文件存在,则该命令不执行 free_form:要执行的linux指令 chdir:在执行指令之前,先切换到该目录 removes:一个文件名,当该文件不存在,则该选项不执行 executable:切换shell来执行指令,该执行路径必须是一个绝对路径

####shell模块详情 与command不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:raw

示例:
## 先在本地创建一个SHELL脚本
# vim /tmp/rocketzhang_test.sh
#!/bin/sh
date +%F_%H:%M:%S

#chmod +x /tmp/rocketzhang_test.sh

## 将创建的脚本文件分发到远程
# ansible storm_cluster -m copy -a "src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"

##然后远程执行该脚本
#ansible storm_cluster -m shell -a '/tmp/rocketzhang_test.sh'

**示例3:**使用yum模块进行安装服务

#ansible bigdata -m yum -a "name=ntp state=present"
#ansible bigdata -m copy -a 'src=ntp.conf dest=/etc/ntp.conf backup=yes'

**示例4:**使用service模块进行管理服务

# ansible bigdata -m service -a "name=ntpd state=restarted"

**示例5:**使用pip模块安装python依赖包

# ansible bigdata -m pip -a 'name=docker state=present'

© 著作权归作者所有

共有 人打赏支持
Andy-xu
粉丝 112
博文 95
码字总数 179246
作品 0
大兴
运维
私信 提问
使用 Ansible 管理 CoreOS

文章作者: Roman Shtylman 这篇文章是关于使用 Ansible 管理 CoreOS 的基础技术。如果你熟悉 Ansible 和一些基本的 CoreOS知识有助于更好的理解下文 。 什么是Ansible? 引自 Ansible Docume...

oschina
2015/05/25
3.7K
2
Ansible:自动化工具

1 概述 1. 关于Ansible Ansible是一个IT自动化工具,它能够配置系统、部署软件以及持续性部署、零宕机滚动升级等高阶的IT任务,是系统运维员、开发人员、IT管理者的自动化解决方案的不二选择...

guzhoujiexing
2014/06/12
0
0
ansible使用及YAML语法介绍

一、简介 1、ansible 简介 ansible官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交...

nmshuishui
2014/11/07
0
0
2017 11-17 ansible应用

一.ansible (1) ansible: ansible是一款新出现的自动化运维系统,基于python开发并集合了众多运维工具的优点,实现批量系统配置,具有程序部署,批量运行命令等功能。工作特点是基于模块化工...

楠人帮
2017/11/19
0
0
使用Ansible+实现Windows自动化运维

一:Ansible 简介 AUTOMATION FOR EVERYONE (摘自Ansible官网),自行理解其中意思,Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fab...

喊我小赵b
2017/04/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0||popA.length==0) return false; Stack......

南桥北木
11分钟前
0
0
互联网浪潮下,Java程序员如何追赶技术革新的脚步?

一:时代背景 身处互联网行业的我们一直处在变革的最前端,受到行业发展浪潮的洗礼,不停歇地追赶着技术革新的脚步。特别是近几年来, 互联网架构不断演化,经历了从集中式架构到分布式架构,...

老道士
18分钟前
0
0
flink系列(9)-flink启动流程分析

连续写了几天的flink StreamGraph的代码,今天闲来说一下flink的启动

yiduwangkai
31分钟前
0
0
取变量的地址赋值给另一个变量,C通过,C++编译出错

取变量的地址赋值给另一个变量,C通过。正常运行,C++编译出错。 代码如下: #include <stdio.h>int main(int argc, char *argv[]){int x = 3;int *p = &x;int y = p;/*c ...

SamXIAO
今天
1
0
利用隐写术实施攻击

尽管隐写术是一种低频攻击途径,但网络犯罪分子已经开始利用它结合社交媒体的普遍性和快速传播性来传递恶意有效负载。 低调但有效的隐写技术虽然是旧把戏,但将代码隐藏在看似正常的图像中,...

Linux就该这么学
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部