前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ansible安装使用

Ansible安装使用

作者头像
kevinfaith
发布2020-01-21 10:33:12
7220
发布2020-01-21 10:33:12
举报
文章被收录于专栏:kevin-blogkevin-blog
简介

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

安装

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

代码语言:javascript
复制
pip install ansible

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

代码语言:javascript
复制
➜  ~ 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安装的所以需要自己指定,

代码语言:javascript
复制
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表示服务器使用的用户,

参数说明
代码语言:javascript
复制
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目录

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

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

使用

查看主机是否连通

代码语言:javascript
复制
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

代码语言:javascript
复制
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
}

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

代码语言:javascript
复制
[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

发现软链接已经好了

还有删除文件
代码语言:javascript
复制
➜  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"

验证一下

代码语言:javascript
复制
[root@zabbix ~]# cd 123
[root@zabbix 123]# ll
总用量 0

还有修改文件权限

代码语言:javascript
复制
➜  ansible ansible -i  /home/ansible/hosts  192.168.30.106 -m file -a  "path=/testdir/abb mode=0644"
shell 模块

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

代码语言:javascript
复制
ansible -i /home/ansible/hosts test  -m shell -a 'apt-get install nginx'

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

代码语言:javascript
复制
ansible -i /home/ansible/hosts test   -m apt -a 'name=nginx state=installed update_cache=true'

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 安装
    • 参数说明
    • 使用
      • 模块是使用Ansible 的方法
        • file模块
          • 参数
            • 还有删除文件
            • shell 模块
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档