专栏首页kevin-blogAnsible安装使用

Ansible安装使用

简介

Ansible 简单的说是一个配置管理系统(configuration management system)。官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。你只需要可以使用 ssh 访问你的服务器或设备就行。你可以将代码部署到任意数量的服务器上! Ansible跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一个统一的界面来协调所有的IT自动化功能,因此Ansible的系统更加易用,部署更快。 Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。

安装

因为Ansible是基于python编写的,所以我这里使用pip安装 命令

pip install ansible

因为pip安装是不会生成配置文件,一切都用默认的运行,如果需要修改默认配置的话,所以需要自己生成模板可以自己下载,然后在用户主目录下生成一个ansible.cfg文件,把模板复制进去就好了 然后

➜  ~ ansible --version
ansible 2.7.8
  config file = /home/kevin/ansible.cfg
  configured module search path = ['/home/kevin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/kevin/.pyenv/versions/3.6.1/lib/python3.6/site-packages/ansible
  executable location = /home/kevin/.pyenv/versions/3.6.1/bin/ansible

看到config file=有输出就好了

ansible有个主机清单的文件 如果你用centos的yum源安装的话会在/etc/ansibe/hosts,但是因为我是pip安装的所以需要自己指定,

mkdir /ansible
vi hosts
#添加自己的主机ip,如果有dns服务的可以填自己服务器的FQDN
[test]
192.168.30.105  ansible_ssh_user=root
192.168.30.106  ansible_ssh_user=root
192.168.30.107  ansible_ssh_user=root

后面的ansible_ssh_user=root表示服务器使用的用户,

参数说明
ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user
      默认的 ssh 用户名

ansible_ssh_pass
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
      sudo 命令路径(适用于1.8及以上版本)

ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.

ansible_ssh_private_key_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_shell_type
      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.

ansible_python_interpreter
      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).

      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

然后如果你不喜欢特别制定SSH密码的话,可以建立SSH互信,

进入到我的home目录

cd ~/.ssh
ssh-keygen -t rsa (四个回车)  
#执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)  
#将公钥拷贝到要免登陆的机器上:
ssh-copy-id <host>

这样就可以实现SSH免密码(秘钥验证)登录了

使用

查看主机是否连通

ansible -i /home/ansible/hosts test -m ping  

192.168.30.106 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.30.107 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.30.105 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

-i 指定主机清单的位置,-m 使用的模块(命令)

ansible是基于模块来使用的,ansible使用“模块”来完成大部分的任务。模块可以做安装软件,复制文件,使用模板等等。

模块是使用Ansible 的方法

这里介绍几个常用的模块,也算是我的笔记

file模块

file模块主要用于远程主机上的文件操作。 创建文件夹、文件夹,定义文件/目录权限属主等等

参数

state:如果是directory,表示创建目录(如果它们不存在);link表示软链接;若是absent,目录或文件会被递归删除;touch代表生成一个空文件;hard代表硬链接; path:必须参数,定义文件路径 src:要被链接的源文件路径,只应用于state=link的情况 force参数 : 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。不过强制创建链接文件分为三种情况。情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。

实例 给/root/123.txt创建一个软链接,链接地址是/root/123/目录下的456.txt

ansible -i  /home/ansible/hosts 192.168.30.106 -m file -a "path=/root/123/456.txt state=touch"

192.168.30.106 | CHANGED => {
    "changed": true,
    "dest": "/root/123/456.txt",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:admin_home_t:s0",
    "size": 0,
    "state": "file",
    "uid": 0
}

ansible -i /home/ansible/hosts 192.168.30.106 -m file -a "path=/root/123.txt state=link force=yes     src=/root/123/123.txt"
192.168.30.106 | SUCCESS => {
    "changed": false,
    "dest": "/root/123.txt",
    "gid": 0,
    "group": "root",
    "mode": "0777",
    "owner": "root",
    "secontext": "unconfined_u:object_r:admin_home_t:s0",
    "size": 17,
    "src": "/root/123/456.txt",
    "state": "link",
    "uid": 0
}

就创建好了 我们登录主机查看一下

[root@zabbix ~]# ll
总用量 135280
drwxr-xr-x.  1 root root        21 2月  27 10:55 123
lrwxrwxrwx.  1 root root        17 2月  27 10:53 123.txt -> /root/123/456.txt

发现软链接已经好了

还有删除文件
➜  ansible ansible -i  /home/ansible/hosts  192.168.30.106 -m file -a "path=/root/123/456.txt  state=absent"
192.168.30.106 | CHANGED => {
    "changed": true,
    "path": "/root/123/456.txt",
    "state": "absent"

验证一下

[root@zabbix ~]# cd 123
[root@zabbix 123]# ll
总用量 0

还有修改文件权限

➜  ansible ansible -i  /home/ansible/hosts  192.168.30.106 -m file -a  "path=/testdir/abb mode=0644"

shell 模块

如果我们没有模块,我们将运行任意的shell命令,我们也可以使用bash脚本。这是一个任意shell命令看起来像在Ansible

ansible -i /home/ansible/hosts test  -m shell -a 'apt-get install nginx'

其实这还是一个模块(shell),后面的-a是把指定的命令传给模块,但是这样不能保证结果,一般会使用apt模块来安装

ansible -i /home/ansible/hosts test   -m apt -a 'name=nginx state=installed update_cache=true'

我们可以通过这种特殊方式运行我们所需要的所有任务(通过模块),但是让我们来做这个更具管理性。我们将把这个任务移动到一个Playbook中,(感觉有点类似dockerfile)它可以运行和协调多个Tasks。 关于Playbook的使用,你们可以去百度,因为我也在学。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ubuntu下安装node版本管理工具NVM

    nvm是nodejs的版本管理工具,因为nodejs编译非常麻烦,然后编译上有些又需要不同的版本,nvm就应运而生了,nvm是一个可以让你在同一台机器上安装和切...

    kevinfaith
  • 理解负载均衡(Load balance)

    负载均衡(Load balance),是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或者其他资源中分配负载,已达到最优化资源使用...

    kevinfaith
  • python版本管理工具:pyenv

    这几天在学习python,因为我学的是python3的语法,但是我ubuntu默认安装的是python2,我sqlmap需要的环境也是python2的,但是我需...

    kevinfaith
  • 01-Ansible基础学习

    alexhuiwang
  • Webpack 10分钟入门

    可以说现在但凡开发Single page application,webpack是一个不可或缺的工具。

    Jerry Wang
  • 面向对象(二)【类的成员及修饰符】

    在上述类的成员中,普通字段是存储在对象之中的;其他成员均是存储在类中,也就是说无论创建了多少个对象,对象本身只保留成员中的普通字段,其他成员均存储在类中。

    用户1432189
  • Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归

    上节课我们主要对深度学习(Deep Learning)的概念做了简要的概述。我们先从房价预测的例子出发,建立了标准的神经网络(Neural Network)模型...

    红色石头
  • 我是怎么一步一步调试出来二叉树的遍历(超精彩配图),二叉树遍历再也不用愁了

    二叉树遍历(Traversing binary tree)是指从根节点触发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被依次访问且仅仅被访问一次。

    TrueDei
  • RxJS速成 (上)

    What is RxJS? RxJS是ReactiveX编程理念的JavaScript版本。ReactiveX是一种针对异步数据流的编程。简单来说,它将一切数据...

    solenovex
  • python实现单链表

    py3study

扫码关注云+社区

领取腾讯云代金券