返回顶部
首页 > 资讯 > 数据库 >ansible--基础
  • 481
分享到

ansible--基础

2024-04-02 19:04:59 481人浏览 泡泡鱼
摘要

马哥出品 ansible中文文档:http://www.ansible.com.cn/index.htmlansible介绍:ansible是个什么东西呢?官方的title是“Ansible is Simp

马哥出品 ansible中文文档:http://www.ansible.com.cn/index.html

ansible介绍:

ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT运维管理工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。基于python开发,可实现对多台服务器进行批量配置、程序的部署及指令的运行。大大减少了在运维工程中的工作量。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。


ansible特点:

 1.简单,ansible自然的自动化语言与允许运维人员,开发者,和IT管理人员在很短的时间内完成自动化项目

 2.无代理,默认使用ssh而不需要客户端。避免了额外的端口开启,提高安全性,避免不必要的管理,减少CPU的使用

 3.干的活多,ansible能干自动完成软件部署,配置管理,流程化管理,和cloud provisioning。


ansible安装:

由于ansible是用python开发的,安装过程中依赖众多Python模块,这里建议yum安装ansible,想要更新版本的可下载源码编译安装,

yum install ansible -y

yum安装ansible的默认配置文件路径,ansible.cfg是ansible的主配置文件,

ansible]# ls /etc/ansible/

ansible.cfg   hosts  roles

hosts是默认的hostfile路径,可配置DNS域名,ip。


通过ssh key方式连接远端客户机,省去密码环节

ssh-keygen -t rsa -P ''

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.137.130


注意这个地方是有个坑的,由于ansible执行的时候需要把临时模块拷贝到客户端,而默认的拷贝方式是通过sftp来的方式拷贝的,如果你的客户端没有装sftp,那么执行ansible会出错的。  

    

如果没装sftp可以用scp。 下面的这一行本来是注释起来的,把注释去掉就OK了  

ansible]# grep "scp_if_ssh" /etc/ansible/ansible.cfg 

scp_if_ssh = True

   


还有个坑,即使装了sftp也不一定能用,你的ssh要启用它才OK。  

ansible]# grep "Subsystem"  /etc/ssh/sshd_config 

Subsystem sftp /usr/lib/openssh/sftp-server

   


ansible的基本工作流程:

    1.ansible通过OPENSSH或者python的pramamiko连接客户端

    2.把ansible module推送到客户端。

        ansible]# grep "remote_tmp" /etc/ansible/ansible.cfg 

        remote_tmp     = $HOME/.ansible/tmp

        ansible]# ansible one  -a "ls  ~/.ansible"

        salt-master | success | rc=0 >>

        tmp

    3.通过ssh执行客户端上的ansible module

    4.执行完毕

    5.删除刚刚推送过去的ansible module


ansible基本命令行模块:

ansible-doc -s 模块名     ##查看模块用法帮助

ansible-doc -l            ##查看有哪些可用模块


1.临时做小事情或一次性行为可用命令行,大型或经常重复使用的活用play-book

2.命令行三剑客:command(默认),shell(支持管道,变量,),raw(客户机不能装python时使用)

3.官方建议用command,shell和raw需要用到的时候再用


command:命令模块,默认模块,用于远程执行命令

-a 'COMMAND'

ansible]# grep -n "module_name" ansible.cfg

97:#module_name = command

ansible all -a 'date'


user:

-a 'name= state={present|absent} system= uid='

# ansible one -m user -a 'name=Mysql uid=306 system=yes group=mysql'

# ansible one -m user -a 'name=mysql shell=/sbin/nologin createhome=no'


group:

-a 'name= gid= state= system='

# ansible one -m group -a 'name=mysql gid=306 system=yes'


cron:修改定时任务

-a 'name="" minute= hour= day= month= weekday= job= user= state='

state状态

present:增加

absent:删除,配置name就可移除

# ansible one -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'


copy:复制文件到远程主机

-a 'dest= src= mode= owner= group='

src=:定义本地源文件路径

dest=:定义远程目标文件路径

content=:取代src=,表示直接用此处指定的信息生成目标文件内容;

# ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=/root mode=640'

# ansible all -m copy -a 'content="Hello Ansible\nHi MageEdu" dest=/tmp/test.ansible'


file:设定文件属性

-a 'path= mode= owner= group= state={directory|link|present|absent} src='

path=:指定文件路径,可以使用name或dest来替换

创建文件的符号链接

src=:指明源文件

path=:指明符号链接文件路径

# ansible all -m file -a 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'

# ansible all -m file -a "path=/tmp/resolv.conf state=absent"

# ansible salt-master -m file -a 'dest=/tmp/ansible.log  owner=lixc group=lixc mode=644

   state=touch'   #touch:远程主机创建文件


force:需要在两种情况下强制创建软链接,

一种是源文件不存在,但之后会建立的情况下;

另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归设置文件的属性,只对目录有效

src:被链接的源文件路径,只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

state:

    directory:创建递归文件,如果目录不存在,就创建目录,

    file:即使文件不存在,也不会被创建

    link:创建软链接

    hard:创建硬链接

    touch:如果文件不存在,则创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

    absent:删除目录、文件或者取消链接文件


ping:测试指定主机能否连接


yum:安装程序包

-a 'name= state={present|latest|absent}'

name:指明要安装的程序包,可以带上版本号

state=:present,latest表示安装,absent表示卸载

# ansible one -m yum -a 'name=mysql-server state=latest|installed'


还有一个后台执行的功能。

-B 30是设置后台执行时间为30秒,

-P2是没两秒钟报告一次状态,这个当你的任务要执行很长时间的时候可以用。

# ansible one -m yum -a 'name=apache2 state=installed'  -B 30 -P2 >>/dev/null


service:指定运行状态

-a 'name= state={started|stopped|restarted} enabled='

name=:服务名称

state=:状态,取值有started,stopped,restarted

enabled=:是否开机自动启动,取值为true或者false


shell: ##可支持管道,变量,command模块不支持,

例:echo "Centos" |passwd --stdin centos

# ansible stORM_cluster -m shell -a "/tmp/rocketzhang_test.sh"


script:  ##将本地脚本复制到远程主机并运行之;要使用相对路径指定脚本

-a '/path/to/script'


setup:  ##收集远程主机的facts

每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息,如操作系统版本,ip地址等报告给远程的ansible主机


Inventory的默认路径是在/etc/ansible/hosts,分为静态和动态两种

静态:需要手工的把你要管理的主机写进去。

动态:事先有一个资源管理系统,里面有所有主机信息,用脚本程序把资源管理系统里的信息给拉过来,以JSON格式呈现

配置静态Inventory:

ansible]# cat -n /etc/ansible/hosts 

     1 [alltest:children]

     2 salt

     3 leihuo

     4

     5 [salt]

     6 salt-master  ansible_ssh_user=lixc ansible_ssh_pass=123456

     7 10.240.162.112  ansible_connection=paramiko

     8

     9 [leihuo]

    10  lixc ansible_ssh_host=192.168.131.203 ansible_ssh_port=21100 

    11  10.240.162.11[1:9]:22


第1行,alltest这个组包含俩子组分别是下面的salt,和leihuo

第6行可以设置主机的默认连接用户,及密码

第7行可以设置ssh的连接方式,默认是openssh,我这里用paramiko,不用官网推荐用openssh,因为openssh查询key的时候,很耗时,效率不高。

第10行,可以给主机随便取个别名,这里的“lixc”就是一个别名,如果ssh默认端口不是22,这里可以

指定特定的端口,

指定ssh端口也可以像第11行,这么指定。

不过以上两种指定ssh端口方法,只针对我们有少部分的主机是特殊端口,如果我们所有主机都是指定的端口,配置文件里有个选项,改成我们需要的端口就OK了,修改后对全局有效


  

ansible]# grep "remote_port" /etc/ansible/ansible.cfg 

remote_port    = 22

   


第7行和11行,是俩相同的主机,说明同一主机可以在不同的组中。在现实当中就像我一台服务器即可以装mysql也可以装apache是一个道理。


变量:

ansible的变量主要给后面的playbook使用,分为主机变量和组变量

ansible]# cat -n /etc/ansible/hosts 

     1 [alltest:children]

     2 salt

     3 leihuo

     4

     5 [salt]

     6 salt-master  salt-port=4505 mysql-port=3306

     7 10.240.162.112  salt-path=/usr/bin/salt-call

     8

     9 [leihuo]

    10  lixc ansible_ssh_host=192.168.131.203 ansible_ssh_port=21100 

    11  10.240.162.11[1:9]:22

    12  [alltest:vars]

    13  ls-path=/bin/ls

    14  liss=lisisi


6,7行设置主机变量

12-14行,设置的为alltest这个组的变量。组变量就是,我这个组的成员都可以用

当然我们也可以不在/etc/ansible/hosts里面定义变量,也可以把变量写进单独的文件里,不过变量定义的形式就不是谁=谁,这么个形式了。而是遵循yaml语法的key: value的形式。

把变量写进文件:

ansible]# for dir in {host_vars,group_vars};do ls /etc/ansible/${dir};done

10.240.162.112  salt-master

alltest

文件定义格式:

ansible]# cat /etc/ansible/host_vars/salt-master 

---

salt-port: 4505

mysql-port: 3306


ansible目标主机匹配patterns:

匹配所有主机

*或者all

匹配多个组

salt:leihuo

在salt这个组里,但不能在leihuo这个组里的主机

salt:!leihuo

取两个组的交集

salt:&leihuo

排除某一主机

ansible-playbook site.yaml --limit salt-msater

当然也可以用正则,在/etc/ansible/hosts里面去定义。如

~salt(master|miNIOn)\.li*\.com


您可能感兴趣的文档:

--结束END--

本文标题: ansible--基础

本文链接: https://lsjlt.com/news/43065.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ansible--基础
    马哥出品 ansible中文文档:http://www.ansible.com.cn/index.htmlansible介绍:ansible是个什么东西呢?官方的title是“Ansible is Simp...
    99+
    2024-04-02
  • ansible
    用ansible在客户端上创建一个用户,用户名为test,脚本语言如下:[root@master ansible]# vim 1.yml  --- - name: create_user               /说明代码的作用。可以...
    99+
    2023-01-31
    ansible
  • Android基础------Activity基础
    应用内Activity的跳转方式 一、通过显式意图跳转,如字面意思一样,跳转的目的地是可以明确看到的 二、通过隐式意图跳转,这种方式的跳转需要我们在AndroidManifes...
    99+
    2022-06-06
    activity Android
  • Python基础——1基础
    输出 print(‘把子肉爱上热干面’,‘哈哈’)  # ‘,’输出为空格 输人 name = input(‘提示的内容’) /浮点除法  %.6f //地板除法  整除 %  取余 python编码问题 (采用Unicode编码) ...
    99+
    2023-01-30
    基础 Python
  • MySQL基础:基础查询
    DQL语言:数据查询语言 3.1 基础查询 语法 select 查询列表 from 表名; 特点 查询列表可以是字段、常量、表达式、函数,也可以是多个 查询结果是一个虚拟表 示例 1、查询单个字段 selec&#...
    99+
    2016-06-13
    MySQL基础:基础查询
  • Python基础--Python3基础语
    Python3 基础语法编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是Unicode字符串。当然也可以为源码文件指定不同的编码,例如:# -*- coding: cp-1252 -*-标识符1.第一个字符必须是字母表...
    99+
    2023-01-31
    基础 Python
  • ansible--roles
    role类似于salt-stack里面的state,state有一定的组织架构。而role则是ansible中playbook的目录组织架构,如果把所有内容都写到playbooks里,可能会导致playbo...
    99+
    2024-04-02
  • Python基础-Python基础使用
    上篇文章 Python基础-初识Python 我们已经知道了什么是Python,Python的用处、和Python的解释器、Python的安装,这篇文章,我们主要讲Python的使用入门本文防盗链:http://python789.blog...
    99+
    2023-01-31
    基础 Python
  • [Linux 基础] linux基础指令(1)
    文章目录 1、Linux下基本指令1.ls指令2.pwd指令3.cd指令4.touch指令5.mkdir指令6.rmdir指令 && rm指令7.man指令8.cp指令9.mv指令10.ca...
    99+
    2023-09-13
    linux
  • Python基础篇-Python基础语法
    为什么学习pythonhttp://www.apelearn.com/bbs/thread-7739-1-1.html Python的安装 getconf LONG_BIT     查看系统版本多少位 rpm -q python uname...
    99+
    2023-01-31
    基础 语法 Python
  • ansible + tornado + MongoDB
    http://blog.csdn.net/smallfish2983/article/details/38078019照着上面那哥们写的,初学,不要吐血,基本功能实现了。root@ubuntu12:~/an...
    99+
    2024-04-02
  • ansible--变量
    ansible中的变量主要来源于以下几种场景:Inventory(host vars,group vars)playbook里面命令行playbook执行task过程中产生结果,可以register起来,作...
    99+
    2024-04-02
  • ansible (2.4.2.0) A
    转自 jumpserver 5.0 测试版本 下载地址 https://github.com/hequan2017/zabbix-models/tree/master/ansible_run 只是简单改了一下 能够单独使用。 目录结构 a...
    99+
    2023-01-31
    ansible
  • Ansible基本架构与工作机制是什么
    这篇文章主要介绍“Ansible基本架构与工作机制是什么”,在日常操作中,相信很多人在Ansible基本架构与工作机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ansible基本架构与工作机制是什么...
    99+
    2023-06-27
  • Python基础之面向对象基础
    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程思想,它将程序中的数据和操作封装成对象,...
    99+
    2023-09-23
    Python
  • Python基础一: 计算机基础,Pyt
    1.CPU 内存 硬盘 操作系统 CPU:计算机的运算和控制中心,相当于人类的大脑。 内存:用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。(暂时存储数据,临时加载数据及应用程序) 4G,8G,16G,32G 速度...
    99+
    2023-01-31
    基础 计算机 Python
  • 前端基础入门四(JavaScript基础)
    目标:掌握编程的基本思维掌握编程的基本语法我们先来学习JavaScript基础,后续会讲解JavaScript高级。重点内容变量的声明及使用数据类型类型转换运算符JavaScript介绍JavaScript是什么JavaScript是一种运...
    99+
    2023-06-03
  • MySQL基础
    1. 数据库 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。 什么是数据库管理系统 数据库管理系统(Data...
    99+
    2019-04-23
    MySQL基础
  • sql 基础
    去除数据库登录界面的所有用户信息 C:UsersasusAppDataRoamingMicrosoftSQL Server Management Studio14.0SqlStudio.bin 查询姓名中第二个字与第三个字相同: selec...
    99+
    2015-02-24
    sql 基础
  • InnoDB基础
      在InnoDB中,数据存储在磁盘上,处理数据时需要先将数据从磁盘读取,再写到内存。InnoDB采用局部性原理加载。 一、局部性原理   从磁盘读取数据时,不需要一行一行读取,而是以页为单位读取,操作系统中一页4kb,Inno...
    99+
    2018-10-11
    InnoDB基础
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作