安装使用 Ansible

2023-08-22  本文已影响0人  pilisiyang
  1. 升级python
# 安装wget
yum -y install wget  
# 下载python
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
# 将里面的文件 移动到python3文件夹中
mkdir /usr/local/python3
tar -zxvf Python-3.8.0.tgz -C  /usr/local/python3
# 删除Python-3.8.0文件夹
mv /usr/local/python3/Python-3.8.0/* /usr/local/python3
rm -rf /usr/local/python3/Python-3.8.0
# 更新环境
yum -y update
yum -y groupinstall "Development Tools"
yum -y install gcc openssl-devel bzip2-devel libffi-devel
yum -y install zlib*

# 配置安装 
cd  /usr/local/python3
# --with-ssl 是配置https协议,--with-ensurepip=install是安装pip工具
./configure prefix=/usr/local/python3  --with-ssl --with-ensurepip=install
# 在编译前需要进行编译配置,./configure --enable-optimizations  --with-ssl --with-ensurepip=install,
#官方文档有提到加--enable-optimizations参数可以提升后期python百分之10的运行速度,不过我加上后发现会编译失败,所以去掉了
#如果你加了以后执行下面的命令报错了,可以执行 `make clean`,然后再执行` make && make install `
make && make install

# 备份原来的python链接,配置软连接
cd /usr/bin
mv python python.bak
ln -s /usr/local/python3/bin/python3 /usr/bin/python
# 给pip3建立软连接为pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
  1. 设置pip源
# 进入到python3的bin目录
cd /usr/local/python3/bin

# 设置pip源
mkdir ~/.pip
vi ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# 升级pip版本
pip install --upgrade pip
  1. 安装 ansible
# 通过pip安装 ansible
sudo pip install ansible
# 验证是否安装成功
ansible --version

ansible 程序结构

安装目录如下:
  配置文件目录:/etc/ansible/
  执行文件目录:/usr/bin/
  Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
  Help文档目录:/usr/share/doc/ansible-X.X.X/
  Man文档目录:/usr/share/man/man1/

配置清单

配置清单保存的是一些 ansible 需要连接管理的主机列表

1、 直接指明主机地址或主机名:
    ## green.example.com#
    # blue.example.com#
    # 192.168.100.1
    # 192.168.100.10
2、 定义一个主机组[组名]把地址或主机名加进去
    [mysql_test]
    192.168.253.159
    192.168.253.160
    192.168.253.153

ansible 命令集

ansible 命令详解

命令的具体格式如下:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

-a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K,--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS #后台运行超时时间
-C #模拟运行环境并进行预运行,可以进行查错测试
-c CONNECTION #连接类型使用
-f FORKS #并行任务数,默认为5
-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #查看有哪些主机组
-m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

ansible 配置公私钥

ansible 是基于 ssh 协议实现的,所以其配置公私钥的方式与 ssh 协议的方式相同,具体操作步骤如下:

#1. 在被控端生成私钥
[root@server ~]# ssh-keygen 
#2.向主机分发私钥
[root@server ~]# ssh-copy-id root@192.168.1.72

ansible 常用模块

  1. 主机连通性测试
[root@localhost mas]# ansible -i hosts 96server -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[WARNING]: Platform linux on host 192.168.1.96 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information.
192.168.1.96 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
  1. command 模块

这个模块可以直接在远程主机上执行命令,并将结果返回本主机。

[root@localhost mas]# ansible -i hosts 96server -m command -a 'ss -ntl'
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[WARNING]: Platform linux on host 192.168.1.96 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information.
192.168.1.96 | CHANGED | rc=0 >>
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port    
LISTEN    0         10               127.0.0.1:25               0.0.0.0:*       
LISTEN    0         128              127.0.0.1:953              0.0.0.0:*     
  1. shell 模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。

[root@localhost mas]# ansible -i hosts 96server -m shell -a 'cat /etc/hosts |grep "wps"'
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[WARNING]: Platform linux on host 192.168.1.96 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information.
192.168.1.96 | CHANGED | rc=0 >>
192.168.1.96 reg.wps.lan

  1. copy 模块

这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。

  1. file 模块

该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。

  1. fetch 模块

该模块用于从远程某主机获取(复制)文件到本地。

  1. cron 模块

该模块适用于管理cron计划任务的,其使用的语法跟我们的crontab文件中的语法一致

  1. yum 模块

该模块主要用于软件的安装。

  1. service 模块

该模块用于服务程序的管理。

  1. user 模块

该模块主要是用来管理用户账号。

  1. group 模块

该模块主要用于添加或删除组。

  1. script 模块

该模块用于将本机的脚本在被管理端的机器上运行。

  1. setup 模块

该模块主要用于收集信息,是通过调用facts组件来实现的。
  facts组件是Ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
  facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。

上一篇 下一篇

猜你喜欢

热点阅读