ansible

作者: 小小全_ | 来源:发表于2019-04-22 09:30 被阅读0次

1.安装ansible
sudo yum install epel-release
sudo yum install ansible -y

1.1 配置ansible管理节点和主机的连接(其实就是配置从管理节点到远程主机之间基于密钥(无密码的方式)的ssh连接)

# 生成SSH密钥
ssh-keygen
#复制SSH密钥到远程主机,这样SSH连接的时候就不需要输入密码了
ssh-copy-id remoteuser@remoteserver
#SSH的时候不会提示是否保存密钥
ssh-keyscan remote_servers >> ~/.ssh/known_hosts

--验证SSH配置:在管理节点执行下面的SSH命令,若是不需要输入密码,也不提醒你存储密钥,表示已经成功配置。
ssh remoteuser@remoteserver

2.被管理的远程主机
不需要安装特殊的包,只需配置并启动SSH服务且Python版本在2.4以上即可。

2.1 主机目录
主机目录(Host inventory)是配置文件,用来告诉Ansible需要管理哪些主机,并且把这些主机按需分类。

2.2 主机目录配置文件
默认的文件是: /etc/ansible/hosts

2.3 ansible 用命令管理主机
Ansible提供一个命令行工具,在官方文档中给命令行起了一个名字,叫Ad-Hoc Commands。

2.3.1 ansible命令的格式
ansible命令的格式是:ansible <host -p atter n> (options]

2.3.2 ansible命令的功能
①.检查Ansible安装环境
检查所有的远程主机,是否以“bruce”用户创建了Ansible管理主机可以访问的环境:
ansible all -m ping -u bruce

②.执行命令
在所有的远程主机上,默认以当前Bash的同名用户,在远程主机上执行“echo hello”:
ansible all -a "/ bin/echo hello "

③.复制文件
复制文件/etc/host到远程主机(组)"Web",位置为/tmp/hosts:
ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"

④.安装包
在远程主机(组)WebServer上安装yum包:
ansible web -m yum -a "name=acme state=present"

⑤.添加用户
ansible all -m user -a "name=foo password=...."

⑥.下载Git仓库
ansible web -m git -a "repo=git://foo.example.org/repo.git dest=/srv/myapp version=HEAD"

⑦.启动服务
ansible web -m service -a "name=httpd state=started"

⑧.并行执行
启动10个并行执行重启
ansible lb -a "/sbin/reboot" -f 10

⑨.查看远程主机的全部系统信息
ansible all -m setup

2.4 ansible用脚本管理主机
为了避免重复的输入命令,ansible提供了脚本功能。ansible脚本叫做Playbook,使用的是YAML格式,文件以yml或yaml为后缀。

2.4.1 执行脚本playbook的方法
ansible-playbook deploy.yml

2.4.2 Playbook的例子
Playbook包含几个关键字,每个关键字的含义如下:
①hosts:某主机的IP,或者主机组名,或者关键字all
②remote_user:以某个用户身份执行。
③vars:变量
④tasks:Playbook的核心,定义顺序执行的动作Action。每个Action调用一个Ansible模块。
--action语法:
module:module_parameter=module_value

--常用的模块有yum、copy、template等,模块在Ansible中的作用,相当于bash脚本中的yum、copy这样的命令。

⑤handers:Playbook的Event处理操作,有且仅有在被Action触发时才会执行。但多次触发只执行一次,并按照声明的顺序执行。

2.4.3 Play和Playbook
Playbook是指一个可被Ansible执行的YAML文件,其结构如下所示:


  • hosts: web
    remote_user: root
    tasks:
    • name: ensure apache is at the latest version
      yum: pkg=httpd state=latest

当然,在一个Playbook文件中,还可以针对两组主机进行不同的操作:

#安装apache的play

  • hosts: web
    remote_user: root
    tasks:
    • name: ensure apache is at the latest version
      yum: pkg=httpd state=latest

# 安装MySQL Server 的Play

  • hosts: lb
    remote_user: root
    tasks:
    • name: ensure mysqld is at the latest version
      yum: pkg=mariadb state=latest

2.5 Ansible模块
模块是Ansible命令行和脚本中都需要调用的。常用的Ansible模块有yum、copy、template等。
正如bash在调用命令时可以跟不同的参数,每个命令的参数都是该命令自定义的。同样,Ansible中调用模块也可以跟不同的参数,每个模块的参数也都是由模块自定义的。
通过ansible-doc <module_name>来查看模块具体用法。

2.5.1 在命令行里使用模块
在命令行中:
-m 后面接调用模块的名字
-a 后面接调用模块的参数

使用模块copy复制管理员节点文件/etc/hosts到所有远程主机/tmp/hosts

ansible all -m copy -a "src=/etc/hosts dest=/tmp/hosts"

使用模块yum 在远程主机Web上安装httpd包

ansible web -m yum -a "name=httpd state=present"

2.5.2 在Playbook脚本中使用模块
在playbook脚本中,tasks中的每一个Action都是对模块的一次调用。在每个Action中:
-冒号前面是模块的名字。
-冒号后面是调用模块的参数。


tasks:

  • name:ensure apache is at the latest version
    yum: pkg=httpd state=latest
  • name: write the apache config file
    template: src=ternplates/httpd.conf.j2 dest=/etc/httpd/conf/httpd .conf
    • name: ensure apache is running
      service: name=httpd state=started

2.5.3 Ansible模块的特点
①像Linux中的命令一样,ansible的模板既可以在命令行中调用,也可以在ansible的脚本playbook中调用
②每个模块的参数和状态的判断,都取决于该模块的具体实现,所以在使用它们之前需要查阅模块对应的文档
③可以通过文档查看其具体的用法(http://docs.ansible.com/ansible/list_of_all_modules.html
④通过命令ansible-doc也可以查看模板的用法
⑤ansible提供一些常用功能的模块,同时ansible也提供API。让用户可以自己写模块,使用的编程语言是Python。

2.5.4 常用模块
①测试与调试类的模块
--ping:ping一下你的远程主机,如果可以通过Ansible连接成功,就会返回pong。

--debug:用于调试的模块,只是简单打印一些信息,有点像Linux的echo命令。

②文件类的模块
--copy:从本地复制文件到远程节点。

--template:从本地复制文件到远程节点,并进行变量的替换。

--file:设置文件属性。

③Linux上的常用操作
--user:管理用户账户。

--yum:Red Hat系列Linux上的包管理。

--service:管理服务。

--firewalled:管理防火墙中的服务和端口。

④执行shell命令
--shell:在节点上执行shell命令,支持$HOME,"<",">","|",";"和"&".

--command:在远程节点上面执行命令,不支持$HOME,"<",">","|",";"和"&".

->ping模块
这是测试远程节点的SSH连接是否就绪的常用模块。它并不像Linux命令那样简单的ping一下远程节点,而是先检查能否通过SSH登录远程节点,再检查Python版本能否满足要求,如果都满足就会返回pong,表示成功。ping无需任何参数。

->debug模块
打印输出信息,类似Linux上的echo命令。
①通过参数msg定义打印的字符串。
msg中可以嵌入变量,下面的例子中注入了[系统变量],Ansible在执行Playbook之前会收集一些比较常用的系统变量,这样在Playbook中不需要定义直接使用就可以。
-debug:
msg: "system {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}"

②通过参数var定义需要打印的变量。
变量可以是系统变量,也可以是动态的执行结果,通过关键字regester注入变量中。

3.copy模块
从当前的机器上复制静态文件到远程节点上,并且设置合理的文件权限。
①设置文件权限。
利用mode设置权限可以是数字,当然也可以是符号的形式"u=rw,g=r,o=r"和"u+rw,g-wx,o-rwx"。
-copy:
src: /srv/myfiles/foo.conf
dest:/etc/foo.conf
owner:foo
group:foo
mode:0644

②backup参数:备份节点上原来的文件。
backup参数为yes的时候,如果发生了复制(copy)操作,那么会先复制目标节点上的源文件。当两个文件相同时,不再进行复制操作。
-copy:
src:sudoers
dest:/tmp
backup:yes

③content参数:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必须有其一,否则会报错。

④force参数:当远程主机的目标路径已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,当设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。

⑤复制后的验证操作。
validate参数接需要验证的命令。一般需要验证复制后的文件,所以%s都可以指代复制后的文件。当copy模块加入了validate参数后,不仅需要成功复制文件,还需要validate命令返回成功的状态,整个模块的执行状态才算成功。
-copy:
src: /mine/sudoers
dest: /etc/sudoers
validate: 'visudo -cf %s'

4.template模块
如果复制的只是静态文件,那么用copy模块就足够了。但如果在复制的同时需要根据实际情况修改部分内容,这时就需要用到template模块。

5.file模块
file模块可以帮助我们完成一些对文件的基本操作,权限创建等,比如,创建文件或目录、删除文件或目录、修改文件权限等。
以下为file模块的常用参数:
①path参数 :必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。

②state参数 :此参数非常灵活,此参数对应的值需要根据情况设定,state的值设置为directory,则为创建一个目录。state的值设置为touch,则为创建一个文件。创建软链接文件时,需将state设置为link。创建硬链接文件时,需要将state设置为hard。想要删除一个文件时,则需要将state的值设置为absent。

③src参数 :当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。

④force参数 : 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。

⑤recurse参数:当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。

⑥mode参数:既可以直接赋值数字权限(必须以0开头),也可以增加和删除权限。如:mode:0644 或者mode:"u=rw,g=r,o=r"或者mode:"u+rw,g-wx,o-rwx"

.....

相关文章

  • 【Ansible学习】- Ansible初探

    安装 Ansible基础 Ansible架构图 Ansible核心组件说明 Ansible:Ansible的核心程...

  • 快速上手 Ansible

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible 命令

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible 主机清单配置文件

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible Playbook 剧本语法

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible(一)、实现SSH免密

    1.ansible安装 2.ansible配置 /etc/ansible/ansible.cfg /etc/ans...

  • Ansible第一篇:基础

    一、配置文件 ansible.cfg /etc/ansible/ansible.cfg 是ansible安装好后...

  • 自动化运维-ansible

    目录 十五、ansible介绍十六、ansible安装十七、ansible远程执行命令十八、ansible拷贝文件...

  • 04-invertory

    Ansible Ansible version : 2.6.2 inventory Ansible可以同时处理基础...

  • Ansible部署

    安装ansibleyum install ansible 确认ansible版本ansible --version...

网友评论

      本文标题:ansible

      本文链接:https://www.haomeiwen.com/subject/bfmegqtx.html