博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Ansible基础 - 02安装与配置

Posted on 2022-01-07 13:56  Kingdomer  阅读(215)  评论(0编辑  收藏  举报

Ansible基础 - 02安装与配置 

一、Ansible安装

### 方式一:yum
[root@cl-server ~]# yum install epel-release
[root@cl-server ~]# yum install ansible

### 方式二:二进制安装
[root@cl-node01 ~]# yum install python-jinja2 PyYAML python-paramiko python-babel python-crypto
[root@cl-node01 ~]# wget https://releases.ansible.com/ansible/ansible-2.9.21.tar.gz
[root@cl-node01 ~]# tar xf ansible-2.9.21.tar.gz
[root@cl-node01 ~]# cd ansible-2.9.21
[root@cl-node01 ansible-2.9.21]# ls
bin         contrib  docs      hacking  licenses  MANIFEST.in  PKG-INFO    requirements.txt  SYMLINK_CACHE.json
changelogs  COPYING  examples  lib      Makefile  packaging    README.rst  setup.py          test
[root@cl-node01 ansible-2.9.21]# python setup.py build running build running build_py creating build creating build/lib creating build/lib/ansible copying lib/ansible/__init__.py -> build/lib/ansible copying lib/ansible/constants.py -> build/lib/ansible copying lib/ansible/context.py -> build/lib/ansible copying lib/ansible/release.py -> build/lib/ansible creating build/lib/ansible/cli copying lib/ansible/cli/__init__.py -> build/lib/ansible/cli ...... [root@cl-node01 ansible-2.9.21]# python setup.py install running install running bdist_egg running egg_info writing requirements to lib/ansible.egg-info/requires.txt writing lib/ansible.egg-info/PKG-INFO ...... Using /usr/lib/python2.7/site-packages Finished processing dependencies for ansible==2.9.21 [root@cl-node01 ansible-2.9.21]# mkdir /etc/ansible [root@cl-node01 ansible-2.9.21]# cp examples/ ansible.cfg hosts scripts/ [root@cl-node01 ansible-2.9.21]# cp examples/* /etc/ansible/

1.1 版本查看

[soupman@cl-server ~]$  ansible --version
ansible 2.9.21
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/soupman/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

1.2 安装文件列表 

  • 配置文件目录:/etc/ansible/执行文件目录:/usr/bin/
    • ansible.cfg - 配置文件
    • hosts - 主机文件清单
    • roles - 配置角色的文件夹,默认为空
  • Lib库依赖目录: /usr/lib/python2.7/site-packages/ansible-2.9.21-py2.7.egg/
  • Help文档目录: /usr/share/doc/ansible-X.X.X/
  • Man文档目录:  /usr/share/man/man1/

 

二、Ansible命令

[root@cl-node01 scripts]# ls -l /usr/bin/ansible*
-rwxr-xr-x 1 root root 171 1月   7 11:18 /usr/bin/ansible
-rwxr-xr-x 1 root root 185 1月   7 11:18 /usr/bin/ansible-config
-rwxr-xr-x 1 root root 193 1月   7 11:18 /usr/bin/ansible-connection
-rwxr-xr-x 1 root root 187 1月   7 11:18 /usr/bin/ansible-console
-rwxr-xr-x 1 root root 179 1月   7 11:18 /usr/bin/ansible-doc
-rwxr-xr-x 1 root root 185 1月   7 11:18 /usr/bin/ansible-galaxy
-rwxr-xr-x 1 root root 191 1月   7 11:18 /usr/bin/ansible-inventory
-rwxr-xr-x 1 root root 189 1月   7 11:18 /usr/bin/ansible-playbook
-rwxr-xr-x 1 root root 181 1月   7 11:18 /usr/bin/ansible-pull
-rwxr-xr-x 1 root root 181 1月   7 11:18 /usr/bin/ansible-test
-rwxr-xr-x 1 root root 183 1月   7 11:18 /usr/bin/ansible-vault

 

[soupman@cl-server ~]$  ansible
ansible               ansible-console       ansible-doc-2.7       ansible-playbook      ansible-pull-2.7
ansible-2             ansible-console-2     ansible-galaxy        ansible-playbook-2    ansible-vault
ansible-2.7           ansible-console-2.7   ansible-galaxy-2      ansible-playbook-2.7  ansible-vault-2
ansible-config        ansible-doc           ansible-galaxy-2.7    ansible-pull          ansible-vault-2.7
ansible-connection    ansible-doc-2         ansible-inventory     ansible-pull-2   

2.1 命令解释

  • /usr/bin/ansible       Ansible ad-hoc 临时命令执行工具,常用于临时命令的执行
  • /usr/bin/ansible-doc    Ansible 模块功能查看工具
  • /usr/bin/ansible-galaxy  Ansible 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
  • /usr/bin/ansible-playbook Ansible 定制自动化的任务集编排工具
  • /usr/bin/ansible-pull    Ansible 远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
  • /usr/bin/ansible-vault   Ansible 文件加密工具
  • /usr/bin/ansible-console  Ansible 基于Linux Consoble界面可与用户交互的命令执行工具

2.2 命令使用

### -vvv 打印详细输出
[root@cl-server ansible]# ansible cl-node01 -vvv -a 'cat /tmp/aa.txt'
### -f 指定并发数
[root@cl-server ansible]# ansible cl-node01 -vvv -a 'cat /tmp/aa.txt' -f 10
### -i 指定别的位置的主机清单hosts
[root@cl-server ansible]# ansible myhost -a 'cat /tmp/aa.txt' -i /etc/ansible/my-hosts
### -m 指定模块
[root@cl-server ansible]# ansible cl-node01 -m shell -a 'cat /tmp/aa.txt'

### 获取主机列表
[root@cl-server ~]# ansible-inventory host --list

### 获取全部模块的信息
[root@cl-server ~]# ansible-doc -l 
### 获取指定模块的使用帮助
[root@cl-server ~]# ansible-doc -s MOD_NAME

2.3 命令详解

[root@cl-node01 doc]#  ansible
usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]
               [--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts]
               [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]
               [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]
               [-c CONNECTION] [-T TIMEOUT]
               [--ssh-common-args SSH_COMMON_ARGS]
               [--sftp-extra-args SFTP_EXTRA_ARGS]
               [--scp-extra-args SCP_EXTRA_ARGS]
               [--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]
               [-e EXTRA_VARS] [--vault-id VAULT_IDS]
               [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
               [-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR]
               [-a MODULE_ARGS] [-m MODULE_NAME]
               pattern

 

# 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可查看更详细信息

  

三、命令执行

3.1 基于密码方式的连接

### 方式一:
[opserver]
192.168.234.6 ansible_ssh_user=root ansible_ssh_pass=test9999

### 方式二:
[opserver]
192.168.234.6
[opserver:vars]
ansible_ssh_user=root ansible_ssh_pass=test9999

### 方式三:
[opserver]
192.168.234.6

cat /etc/ansible/group_vars/opserver.yml
ansible_ssh_user:root
ansible_ssh_pass:test9999

 

3.2 基于SSH key方式连接

实现SSH免密登录

 

3.3 主机清单

ansible的Host-pattern,用于匹配被控制的主机的列表

  • All:      表示所有Inventory中的所有主机。    ansible all –m ping
  • *(通配符): ansible "*" -m ping | ansible 192.168.1.* -m ping | ansible "srvs" -m ping
  • 或关系:    ansible "websrvs:appsrvs" -m ping  |  ansible "192.168.1.10:192.168.1.20" -m ping
  • 逻辑与:    在websrvs组并且在dbsrvs组中的主机     ansible "websrvs:&dbsrvs" –m ping
  • 逻辑非:    在websrvs组,但不在dbsrvs组中的主机,此处为单引号   ansible 'websrvs:!dbsrvs' –m ping
  • 综合逻辑:   ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping
  • 正则表达式: ansible "websrvs:dbsrvs" –m ping     |  ansible "~(web|db).*\.kunking\.com" –m ping

3.4 返回结果

  • 绿色: 被管理端没有被修改
  • 黄色: 被管理端发生变更
  • 红色: 执行出现故障

               

3.5 sudo用户执行命令

 

### 首先使用 visudo 添加sudo权限:   adminx  ALL=(ALL)       NOPASSWD: ALL

### 以adminx sudo至root用户执行ls 
[root@cl-server ansible]#  ansible cl-node01 -m command  -u adminx -a 'ls /root' -b --become-user=root   -k -K
SSH password:                                  ### adminx密码
BECOME password[defaults to SSH password]:     ### become-user=root密码
cl-node01 | CHANGED | rc=0 >>
anaconda-ks.cfg
Readme.txt
redis-5.0.12
redis-5.0.12.tar.gz

 

  

 

3.6 常见模块

  • command(默认):   不支持管道过滤grep
  • shell:          支持管道过滤grep
  • script:          在远程主机上执行控制端的脚本
  • yum:            安装软件
  • yum_repository: 配置yum源
  • copy:           拷贝文件到远程主机
  • file:           在远程主机创建目录或文件
  • service:        启动或停止服务
  • mount:          挂载设备
  • cron:           执行定时任务
  • firewalld:      防火墙设置
  • get_url:        下载软件或访问网页
  • git:            执行git命令
  • user/group:     用户和组
  • setup:          目标主机信息

 

四、配置文件

4.1 配置文件

	inventory = /etc/ansible/hosts	  # 资源清单inventory文件的位置
	library = /usr/share/ansible	  # 指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
	forks = 5		          # 并发连接数,默认为5
	sudo_user = root		  # 设置默认执行命令的用户
	remote_port = 22		  # 指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
	host_key_checking = False	  # 设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
	timeout = 60		          # 设置SSH连接的超时时间,单位为秒
	log_path = /var/log/ansible.log	  # 指定一个存储ansible日志的文件(默认不记录日志)

4.2 配置文件加载顺序

  • ANSIBLE_CONFIG:    环境变量
  • ansible.cfg:       当前执行目录下
  • .ansible.cfg:      ~/.ansible.cfg
  • /etc/ansible/ansible.cfg