目录
介绍
关系
安装
默认配置文件结构
Inventory 介绍
Inventory 参数
Inventory配置案例
Ansible常用模块
Ansible执行方式
执行ad-hoc 命令
执行ansible playbook 剧本
介绍
学习ansible 之前先了解 CI/CD 的概念:CICD 是指 持续集成(Continuous Integration)和持续交付(CONTINUOUS DELIVERY)持续部署(Continuous Deployment)简称。指在开发过程中自动执行一系列从开发到部署的过程中,尽量减少人工的介入。ansible执行工具是持续部署的常用软件。
关系通过持续集成,开发人员能够频繁将其代码集成到公共代码仓库的主分支中。开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交;
通过持续交付,将软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程;
通过持续部署扩展了持续交付,以便软件构建,在通过所有测试时自动部署。
安装安装Ansible前需要安装Python 2.4 或更高版本的Python,RHEL或CentOS *** 作系统,需要配置 EPEL,以Centos 7为例,需要执行指令:yum install epel-release
其它版本配EPEL请参考如下指导执行:https://docs.fedoraproject.org/en-US/epel
1、GCC源码安装
#git clone https://github.com/ansible/ansible.git --recursive
#cd ./ansible
使用 Bash:
#source ./hacking/env-setup
2、YUM安装
#以centos 7为例:
yum install epel-release
yum install ansible
3、RPM安装
方法一:制作rpm 包:前提是已安装了 rpm-build, make, and python2-devel .
#git clone https://github.com/ansible/ansible.git
#cd ./ansible
#make rpm
#rpm -Uvh ~/rpmbuild/ansible-*.noarch.rpm
方法二:通过yum 下载rpm 包:
#yum deplist ansible
#yum -y install yum-utils
#yumdownloader --resolve --destdir: “/tmp ansible
#rpm -Uvh /tmp/ansible-*.noarch.rpm
默认配置文件结构
Inventory 介绍
Ansible 本身通过基于文本的方式来记录 inventory 配置信息,默认配置文件为/etc/ansible/hosts,文件位置可以在服务配置文件/etc/ansible/ansible.cfg中定义。
Inventory 参数ansible_ssh_host #将要连接的远程主机名。
ansible_ssh_port #端口号.如果不是默认的端口号,通过此变量设置。
ansible_ssh_user #默认的 ssh 用户名。
ansible_ssh_pass #密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)。
ansible_su_pass #su 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)。
ansible_sudo_pass #sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)。
ansible_become #是否进行提权 *** 作。如果需要,设置为yes 是
ansible_become_user #设置为具有所需特权的用户-您想要成为的用户,而不是您登录时使用的用户
ansible_become_method #指定权限工具,如sudo,su,pfexec,doas,pbrun,dzdo,ksu,runas,machinectl
ansible become_flags #play或task级别上,允许为任务或角色使用特定的标志。一种常见的用法是,当shell设置为no login时,将用户更改为nobody。此指令是在Ansible 2.2中添加。
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_ruby_interpreter #与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
Inventory配置案例
vi /etc/ansible/hosts
[qitu] //主机组
192.168.1.2 hostname: "host1" //主机1参数信息
192.168.1.2 hostname: "host2" //主机2参数信息
[rds]
192.168.1.3 hostname:"host3"
[qitu:vars] //主机组参数信息
ansible_ssh_user: "test_user"
ansible_ssh_pass: "123456"
#切换用户执行
#ansible_become: "yes"
#ansible_become_user: "root"
#ansible_become_method: "su"
#ansible_become_pass: "XXXXXX"
[all:vars] //全局参数信息
ntp_server: “ntp.qitu.example.com
Ansible常用模块
command[命令模块]
功能:命令执行
ansible 172.16.1.31 -m command -a "chdir=/tmp/ pwd"
shell[万能模块]
功能:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > | ;
ansible 172.16.1.41 -m shell -a "hostname;pwd"
可以使用该名模,执行所有linux的命令,所以叫万能模块
script[脚本模块]
功能:调用本地脚本远程执行
ansible 172.16.1.7 -m script -a "/server/scripts/mk.sh"
copy[远程复制下发模块]
功能:从本地的文件拷贝到远程主机
常用参数
backup 对数据信息进行备份
src 定义要推送数据信息
dest [必须]定义将数据推送到远程主机什么目录中
owner 设置复制后的文件属主权限
group 设置复制后的文件属组权限
mode 设置复制后的文件权限(600 755)
举例
ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/ backup=yes"
fetch[远程复制上传模块]
功能:从远程主机的文件拷贝到本地
常用参数
backup 对数据信息进行备份
src 定义要推送数据信息
dest [必须]定义将数据推送到远程主机什么目录中
owner 设置复制后的文件属主权限
group 设置复制后的文件属组权限
mode 设置复制后的文件权限(600 755)
举例
ansible 172.16.1.41 -m fetch -a "src=/tmp/01.txt dest=/tmp/ backup=yes"
template[模块定义模块]
功能:和copy module一样强大
常用参数
backup 对数据信息进行备份
src 定义要推送数据信息
dest [必须]定义将数据推送到远程主机什么目录中
owner 设置复制后的文件属主权限
group 设置复制后的文件属组权限
mode 设置复制后的文件权限(600 755)
validate 验证文件
举例:
ansible 172.16.1.41 -m template -a "src=etc/ssh/sshd_config.j2 dest=/etc/ssh/sshd_config.j2 owner=root group=root mode='0600' validate=/usr/sbin/sshd -t %s backup=yes"
file[文件 *** 作模块]
功能:文件处理
常见参数
src 定义要推送数据信息
dest [必须]定义将数据推送到远程主机什么目录中
owner 设置文件属主权限
group 设置文件属组权限
mode 设置文件权限(600 755)
state 用于指定创建目录或文件
举例
权限参数
ansible 172.16.1.7 -m file -a "dest=/tmp/01.txt owner=test group=test mode=600"
state创建文件
ansible 172.16.1.41 -m file -a "dest=/tmp/02.txt state=touch"
state创建目录
ansible 172.16.1.41 -m file -a "dest=/tmp/01dir state=directory"
yum[包管理模块]
功能:软件安装
常用参数
name [必须]执行要安装软件的名称,以及软件的版本
state installed安装 absent(卸载)
list 指定软件名称,查看软件是否可以安装,以及是否安装过
举例
ansible 172.16.1.41 -m yum -a "name=iftop state=installed"
ansible 172.16.1.41 -m yum -a "name=iftop state=absent"
ansible 172.16.1.41 -m yum -a "list=iftop"
service[系统服务管理模块]
常用参数
name [必须]指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state stopped started restarted reloaded
enabled yes表示服务开机自启动 no表示服务开机不要自动启动
举例
ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"
cron[定时任务模块]
常用参数
minute 分,写法同系统定时任务,如[0-59] [*] [*/n]
hour 时,写法同上
day 日,写法同上
month 月,写法同上
weekday 周,写法同上
job 执行命令,如job='/bin/sh /server/scripts/test.sh &>/dev/null'
举例
添加定时任务
ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
ansible 172.16.1.41 -m cron -a "name=test02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
删除定时任务
ansible 172.16.1.41 -m cron -a "name=test02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
ansible 172.16.1.41 -m cron -a "name=test01 state=absent"
注释定时任务
ansible 172.16.1.41 -m cron -a "name=test01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"a
ansible 172.16.1.41 -m cron -a "name=test01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no"
Ansible执行方式
提供两种方式去执行任务:
方法一是以执行 ad-hoc 命令的形式;
方法二是以执行 Ansible playbook 剧本的形式;
前者可以解决一些简单的任务, 后者解决较复杂的任务
执行ad-hoc 命令在模块介绍的时候列举了相关命令,语法如下:
ansible 主机信息 -m 模块名称 -a "相关模块参数"
主机信息:远程主机IP地址,主机组名称,all代表所有主机
-m:指定使用哪个模块
-a:模块中的参数和功能
执行ansible playbook 剧本
语法如下:
字典以简单的形式表示:key: value
# An employee record
martin:
name: Martin D'vloper
job: Developer
skill: Elite
(冒号后面必须有一个空格)
举例:
ansible-playbook /tmp/sshd.yaml
cat /tmp/sshd.yaml
---
#以创建主机ssh 互信为例
- hosts: myhost // *** 作的主机
remote_user: test //执行tesk的用户
facts: false //关闭系统变量
tasks:
- name: create rsa
shell: yes y |ssh-keygen -b 2048 -t rsa -f /home/test/.ssh/id_rsa -q -N ""
- name: Non secret authentication
authorized_key: user=test key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" state=present exclusive=yes
- name: upload id_rsa.pub
fetch: src=/home/test/.ssh/id_rsa.pub dest=/data/roles/sshd/files/{{inventory_hostname}}
- name: clean authorized_key.templates
shell: "echo >/data/roles/sshd/templates/authorized_keys.templates"
delegate_to: localhost
when: "'test' in group_names"
- name: create authorized_key
shell: "grep -r '.*' /data/roles/sshd/files/ |grep 192-168-1 |cut -d ':' -f2 |grep -v shell >> /data/roles/sshd/templates/authorized_keys.templates"
delegate_to: localhost
when: "'test' in group_names"
- name: upload authorized_key
template: src=authorized_keys.templates dest=/home/test/.ssh/authorized_keys owner=test group=test mode=0700
上一篇:Linux高阶—安全认证模块PAM(九)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)