【mac】ansible安装及基础使用

安装

环境释放
  mac  10.12.5

#more /System/Library/CoreServices/SystemVersion.plist

安装命令

#ruby -e "$(curl --insecure -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
#brew update
#brew install Ansible

安装后hosts默认访问位置

/usr/local/etc/ansible/hosts

公私钥配置

创建公私钥

ssh-keygen -t rsa -C ‘[email protected]‘

-t 指定密钥类型,默认即 rsa ,可以省略
-C 设置注释文字,比如你的邮箱

默认存放位置

/Users/jenkins/.ssh/id_rsa

将公钥复制到ssh服务器

ssh-copy-id [email protected]

hosts配置

定义主机与组
定义一个IP为192.168.1.21, SSH端口为2135的主机

192.168.1.21:2135

定义一个别名为jumper, SSH端口为22, IP为192.168.1.50的主机

jumper ansible_ssh_port=22 ansible_ssh_host=192.168.1.50

组成员主机名称范例:

  [test]
  jenkis236 ansible_ssh_port=22 ansible_ssh_host=192.168.1.236

假如你有很多主机遵循某一种模式,你还可以这样来表示他们:

  [webservers]
  web[1:50].lightcloud.com

  [database]
  db-[a:f].lightcloud.com

定义主机变量

主机可以指定变量, 后面可以供Playbooks调用

  [test]
  jenkis236 ansible_ssh_port=22 ansible_ssh_host=192.168.1.236 http_port=8080 

定义组变量

[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

Ansible内置连接主机的变量

ansible_ssh_host
  ansible通过ssh连接的IP或者FQDN
ansible_ssh_port
  SSH连接端口
ansible_ssh_user
  默认SSH连接用户
ansible_ssh_pass
  SSH连接的密码(这是不安全的,ansible极力推荐使用--ask-pass选项或使用SSH keys)
ansible_sudo_pass
  sudo用户的密码
ansible_connection
  SSH连接的类型:local,ssh,paramiko,在ansible 1.2之前默认是paramiko,后来智能选择,优先使用基于ControlPersist的ssh(支持的前提)
ansible_ssh_private_key_file
  SSH连接的公钥文件
ansible_shell_type
  指定主机所使用的shell解释器,默认是sh,你可以设置成csh, fish等shell解释器
ansible_python_interpreter
  用来指定python解释器的路径
ansible\_\*\_interpreter
  用来指定主机上其他语法解释器的路径,例如ruby,perl等

 Ansible常用模块及API

command: 执行远程主机SHELL命令

ansible all -i /Users/jenkins/jenkins/lirbary/ansible_hosts/hosts_test -m command -a "ifconfig"

script: 远程执行MASTER本地SHELL脚本.(类似scp+shell)

ansible test -i /Users/jenkins/jenkins/lirbary/ansible_hosts/hosts_test -m script -a "../Env_update_shell/test.sh"

copy:实现主控端向目标主机拷贝文件, 类似scp功能.

ansible test -i /Users/jenkins/jenkins/lirbary/ansible_hosts/hosts -m copy -a "src=~/test.sh dest=/tmp/ owner=root group=root mode=0755"

stat:获取远程文件状态信息, 包括atime, ctime, mtime, md5, uid, gid等信息.

ansible test -i /Users/jenkins/jenkins/lirbary/ansible_hosts/hosts_test -m stat -a "path=/Users/jenkins/jenkins/"

get_url:实现在远程主机下载指定URL到本地.

ansible test -i /Users/jenkins/jenkins/lirbary/ansible_hosts/hosts_test -m get_url -a "url=http://www.cnblogs.com/yatho dest=/tmp/index.html mode=0400 force=yes"

yum:Linux包管理平台操作, 常见都会有yum和apt, 此处会调用yum管理模式

ansible servers -m yum -a "name=curl state=latest"

cron:远程主机crontab配置

ansible webservers -m cron -a "name=‘check dir‘ hour=‘5,2‘ job=‘ls -alh > /dev/null‘"

service:远程主机系统服务管理

# ansible webservers -m service -a "name=crond state=stopped"
# ansible webservers -m service -a "name=crond state=restarted"
# ansible webservers -m service -a "name=crond state=reloaded"

user:user

添加用户:
# ansible webservers -m user -a "name=johnd comment=‘John Doe‘"
删除用户:
# ansible webservers -m user -a "name=johnd state=absent remove=yes"

 playbook

playbook介绍

playbook是一个不同于使用Ansible命令行执行方式的模式, 其功能是将大量命令行配置集成到一起形成一个可定制的多主机配置管理部署工具.

它通过YAML格式定义, 可以实现向多台主机的分发应用部署.

以下给大家详细介绍一个针对nginx嵌套复用结构的playbook部署实例:

1. 构建目录结构

# cd /etc/ansible/

# mkdir group_vars

# mkdir roles

2.定义host

# vi /etc/ansible/hosts

[webservers]
client01.example.com
client02.example.com
[nginx01]
client01.example.com
[nginx02]
client02.example.com

3.定义变量

# vi /etc/ansible/group_vars/nginx01

worker_processes: 4
num_cpus: 4
max_open_file: 65506
root: /data
remote_user: root
# vi /etc/ansible/group_vars/nginx02

worker_processes: 2
num_cpus: 2
max_open_file: 35506
root: /www
remote_user: root

Tips:这里在group_vars下定义的文件名必须对应hosts文件下的group标签, 通过这里定义的不同参数从而部署不同类型的主机配置.

4.创建roles入口文件

# vi /etc/ansible/site.yml

- hosts: webservers
  roles:
  - base_env
- hosts: nginx01
  roles:
  - nginx01
- hosts: nginx02
  roles:
  - nginx02

  

Tips: 这里的roles:下的字符串需对应roles目录下的目录名.

5.定义全局role base_env

创建目录结构

# mkdir -p /etc/ansible/roles/base_env/tasks 

# vi /etc/ansible/roles/base_env/tasks/main.yml

# 将EPEL的yum源配置文件传送到客户端
- name: Create the contains common plays that will run on all nodes
  copy: src=epel.repo dest=/etc/yum.repos.d/epel.repo
- name: Create the GPG key for EPEL
  copy: src=RPM-GPG-KEY-EPEL-6 dest=/etc/pki/rpm-gpg

# 关闭SELINUX
- name: test to see if selling is running
  command: getenforce
  register: sestatus
  changed_when: false

# 删除iptables默认规则并保存
- name: remove the default iptables rules
  command: iptables -F
- name: save iptables rules
  command: service iptables save

将对应需要拷贝到远程的文件复制到base_env/files目录下

# mkdir -p  /etc/ansible/roles/base_env/files

# cp /etc/yum.repos.d/epel.repo /etc/ansible/roles/base_env/files

# cp /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 /etc/ansible/roles/base_env/files

6. 定义nginx01和ngnix02 role

创建目录结构

# mkdir -p /etc/ansible/roles/nginx{01,02}

# mkdir -p /etc/ansible/roles/nginx01/tasks

# mkdir -p /etc/ansible/roles/nginx02/tasks

# vi /etc/ansible/roles/nginx01/tasks/main.yml

# 安装nginx最新版本
- name: ensure nginx is at the latest version
  yum: pkg=nginx state=latest

# 将nginx配置文件传送到远程目录
- name: write the nginx config file
  template: src=nginx.conf dest=/etc/nginx/nginx.conf
  notify: restart nginx # 重启nginx

# 创建nginx根目录
- name: Create Web Root
  file: dest={{ root }} mode=775 state=directory owner=nginx group=nginx
  notify: reload nginx
- name: ensure nginx is running
  service: name=nginx state=restarted

# cp /home/ansible/roles/nginx01/tasks/main.yml /home/ansible/roles/nginx02/tasks/main.yml

  

7.定义files

# mkdir -p /etc/ansible/roles/nginx01/templates

# mkdir -p /etc/ansible/roles/nginx02/templates

# vi /etc/ansible/roles/nginx01/templates/nginx.conf

# For more information on configuration, see: 

user              nginx;
worker_processes  {{ worker_processes }};
{% if num_cpus == 2 %}
worker_cpu_affinity 01 10;
{% elif num_cpus == 4 %}
worker_cpu_affinity 1000 0100 0010 0001;
{% elif num_cpus >= 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 1000 0100 0010 0001;
{% endif %}
worker_rlimit_nofile {{ max_open_file }};  

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;  

pid        /var/run/nginx.pid;  

events {
    worker_connections  {{ max_open_file }};
}  

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;  

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;  

    access_log  /var/log/nginx/access.log  main;  

    sendfile        on;
    #tcp_nopush     on;  

    #keepalive_timeout  0;
    keepalive_timeout  65;  

    #gzip  on;  

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    #include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        server_name  _;  

        #charset koi8-r;  

        #access_log  logs/host.access.log  main;  

        location / {
            root   {{ root }};
            index  index.html index.htm;
        }  

        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }  

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }  

    }  

}

  

Tip: worker_processes, num_cpus, max_open_file, root等参数会调用group_vars目录下配置文件中相应的变量值

# cp /etc/ansible/roles/nginx01/templates/nginx.conf  /etc/ansible/roles/nginx02/templates/nginx.conf

8.执行playbook

# ansible-playbook -i /etc/ansible/hosts /etc/ansible/site.yml -f 10

Tips: -f 为启动10个并行进程执行playbook, -i 定义inventory host文件, site.yml 为入口文件

PLAY [webservers] ************************************************************* 

GATHERING FACTS ***************************************************************
ok: [client02.example.com]
ok: [client01.example.com]

TASK: [base_env | Create the contains common plays that will run on all nodes] ***
ok: [client01.example.com]
ok: [client02.example.com]

TASK: [base_env | Create the GPG key for EPEL] ********************************
ok: [client02.example.com]
ok: [client01.example.com]

TASK: [base_env | test to see if selling is running] **************************
ok: [client01.example.com]
ok: [client02.example.com]

TASK: [base_env | remove the default iptables rules] **************************
changed: [client02.example.com]
changed: [client01.example.com]

TASK: [base_env | save iptables rules] ****************************************
changed: [client01.example.com]
changed: [client02.example.com]

PLAY [nginx01] **************************************************************** 

GATHERING FACTS ***************************************************************
ok: [client01.example.com]

TASK: [nginx01 | ensure nginx is at the latest version] ***********************
ok: [client01.example.com]

TASK: [nginx01 | write the nginx config file] *********************************
ok: [client01.example.com]

TASK: [nginx01 | Create Web Root] *********************************************
ok: [client01.example.com]

TASK: [nginx01 | ensure nginx is running] *************************************
changed: [client01.example.com]

PLAY [nginx02] **************************************************************** 

GATHERING FACTS ***************************************************************
ok: [client02.example.com]

TASK: [nginx02 | ensure nginx is at the latest version] ***********************
ok: [client02.example.com]

TASK: [nginx02 | write the nginx config file] *********************************
ok: [client02.example.com]

TASK: [nginx02 | Create Web Root] *********************************************
ok: [client02.example.com]

TASK: [nginx02 | ensure nginx is running] *************************************
changed: [client02.example.com]

PLAY RECAP ********************************************************************
client01.example.com       : ok=11   changed=3    unreachable=0    failed=0
client02.example.com       : ok=11   changed=3    unreachable=0    failed=0 

最终部署目录结构如下

# tree /etc/ansible/

/etc/ansible/
├── ansible.cfg
├── group_vars
│   ├── nginx01
│   └── nginx02
├── hosts
├── hosts.bak
├── roles
│   ├── base_env
│   │   ├── files
│   │   │   ├── epel.repo
│   │   │   └── RPM-GPG-KEY-EPEL-6
│   │   └── tasks
│   │       └── main.yml
│   ├── nginx01
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── nginx.conf
│   └── nginx02
│       ├── tasks
│       │   └── main.yml
│       └── templates
│           └── nginx.conf
└── site.yml

jenkins关联配置

Choice Parameter
  deploy_environment  定义部署环境名 dev,test,uat,pdt
Execute shell
  开头和结尾的set +x, set -x用来打开和关闭该部分的扩展参数及命令
  cd $WORKSPACE/leon-playbook-phpcms1.1
  ansible --version
  ansible-playbook -i inventory/$deploy_environment ./deploy.yml -e project=phpcms -e branch=$branch_selector -e env=$deploy_environment
  -i 用来自定义ansible host文件路径, ./deploy.yml为ansible-playbook入口文件, -e 后可跟给当前session添加的环境变量.

时间: 2024-10-09 22:17:00

【mac】ansible安装及基础使用的相关文章

Ansible 安装 及 基础模块介绍

ansible 介绍 Ansible基于Python开发,集合了众多优秀运维工具的优点,实现了批量运行命令部署程序.配置系统等功能.默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单.可同时支持多台主机并行管理,使得管理主机更加便捷. ansible 安装 在管理端与 被管理端都要安装 yum install -y epel-release ##安装epel源 yum install ansible -y ansible --versio

ansible安装应用及playbook剧本的定义

在配置集群时,每个节点上有很多相同的配置,如启动服务相同.安装程序.提供相同的配置文件,甚至定制相同的任务计划来定期执行某些操作等.如果你管理的只是三两个节点配置起来还是相当简单的,但是有三五十台,甚至上百台你还要自已一个一个手动来配置,那就太痛苦了.因些我们就需要能实现批量管理的一套组件,ansible就是实现这样管理的工具. ansible以它强大功能和简单上手的应用,在2012年获OSS(Open Source Software,开源软件 开放源代码软件)一项大奖,评为前十名,评为最有用的

Mac下Git的基础操作

目前最火的版本控制软件是Git了吧,今天简单梳理一下Mac下Git的基础操作~~ 一.什么是Git Git是一个分布式代码管理工具,用于敏捷的处理或大或小的项目,类似的工具还有svn. 基于Git的快速的.免费的.稳定的在线代码托管平台有github,还有一些国内的,coding.csdn代码托管平台.京东代码托管平台等等. 二.Git的基本使用 1.注册一个git账号 咱们以coding代码托管平台为例来简单介绍 A.登陆coding网站https://coding.net/,注册coding

Ansible 安装与简单使用

一.安装 $ pip install ansible #for debian $ sudo apt-add-repository ppa:rquillo/ansible $ sudo apt-get update $ sudo apt-get install ansible #for centos $ sudo yum install ansible 二.环境说明 1. 控制主机为本机 2. 被控端为局域网192.168.1.5 3. 通过ssh 密钥认证 三.使用 #内建的 ping 模块 a

Mac上安装brew 包管理工具

Mac 上的包管理工具对于开发者来说是一件非常方便的工具,能够有效的对包进行管理. 所以这篇博客就来简单的讲一下brew 的安装和一些基础命令. brew 全称叫做Homebrew . 1. 首先来说一下brew的安装: 在mac 上安装需要通过ruby 来进行安装,在mac上默认是已经安装好ruby的,我们可以通过命令来进行测试. ruby -version 确定好ruby没问题后,通过下面的命令进行安装brew. ruby -e "$(curl -fsSL https://raw.githu

ansible命令应用基础

ansible命令应用基础:    Usage: ansible <host-pattern> [-f forks] [-m module_name][-a args]        -f forks:启动的并发线程数        -m module_name:要使用的模块        -a args:模块特有的参数        常见模块:ansible-doc -s 模块    --查看模块使用参数command:命令模块,默认模块,用于在远程执行命令:#ansible all -a

自动化运维系列之Ansible命令应用基础(模块的应用)【持续更新中···】

自动化运维系列之Ansible命令应用基础(模块的应用) 模块简介 Ansible可以使用命令行方式进行自动化管理,基本语法如下: ansible <host-pattern> [-m module_name] [-a args] <host-pattern> 对哪些主机生效 [-m module_name] 需要使用的模块 [-a args] 模块特有的参数,这里在使用时需加单引号哦! Ansible的命令行管理工具都是由一系列模块.参数所支持的,可以在命令行后加上-h或--he

Git入门到高级系列1-git安装与基础命令

视频课程地址 腾讯课堂 为什么要进行项目文件的版本管理 代码备份和恢复 团队开发和协作流程 项目分支管理和备份 git 是什么? git是一个分布式的版本控制软件.版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 最初由林納斯·托瓦茲創作,於2005年以GPL釋出.最初目的是為更好地管理Linux內核開發而設計. 2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeepe

mac上安装python3 和 sqlite的问题

建议mac上安装python3不要使用源码自己编译安装,而要使用 brew install python3 来安装 另外安装完之后创建需环境的话,要指定新的python环境,如下: virtualenv  -p /usr/local/Cellar/python3/3.6.2/bin/python3  --no-site-packages obpy17 Mac OSX 正确地同时安装Python 2.7 和Python3 Mac OSX 正确地同时安装Python 2.7 和Python3(这个是