puppet基础篇(练习篇)

本文分为两部分:一、安装配置及命令用法;二、puppet资源基础练习

1.安装配置及命令用法

#在epel仓库安装
yum install ./facter-2.4.6-1.el7.x86_64.rpm  ./puppet-3.8.7-1.el7.noarch.rpm [root@node1 puppet]# puppet helpUsage: puppet <subcommand> [options] <action> [options]puppet applyapply             Apply Puppet manifests locallypuppet apply --helpSYNOPSIS -----------Applies a standalone Puppet manifest to the local system.puppet apply [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose][-e|--execute] [--detailed-exitcodes] [-L|--loadclasses][-l|--logdest syslog|eventlog|<FILE>|console] [--noop][--catalog <catalog>] [--write-catalog-summary] <file>* --noop:Use 'noop' mode where Puppet runs in a no-op or dry-run mode.puppet describedescribe          Display help about resource typespuppet describe [-h|--help] [-s|--short] [-p|--providers] [-l|--list] [-m|--meta]       OPTIONS-------* --help:Print this help text* --providers:Describe providers in detail for each type#列出所有的资源类型
* --list:List all types#列出指定类型的参数,一般与-s一同使用
* --meta:List all metaparameters#列出指定类型的简要帮助信息
* --short:List only parameters without detail#列出puppet的资源类型
[root@node1 puppet]# puppet describe -lThese are the types known to puppet:
augeas          - Apply a change or an array of changes to the  ...
computer        - Computer object management using DirectorySer ...
cron            - Installs and manages cron jobs
exec            - Executes external commandsfile            - Manages files, including their content, owner ...
filebucket      - A repository for storing and retrieving file  ...group           - Manage groupshost            - Installs and manages host entriesinterface       - This represents a router or switch interfacek5login         - Manage the `.k5login` file for a usermacauthorization - Manage the Mac OS X authorization databasemailalias       - .. no documentation ..
maillist        - Manage email lists
mcx             - MCX object management using DirectoryService  ...mount           - Manages mounted filesystems, including puttin ...
nagios_command  - The Nagios type command
nagios_contact  - The Nagios type contact
nagios_contactgroup - The Nagios type contactgroup
nagios_host     - The Nagios type host
nagios_hostdependency - The Nagios type hostdependency
nagios_hostescalation - The Nagios type hostescalation
nagios_hostextinfo - The Nagios type hostextinfo
nagios_hostgroup - The Nagios type hostgroup
nagios_service  - The Nagios type service
nagios_servicedependency - The Nagios type servicedependency
nagios_serviceescalation - The Nagios type serviceescalation
nagios_serviceextinfo - The Nagios type serviceextinfo
nagios_servicegroup - The Nagios type servicegroup
nagios_timeperiod - The Nagios type timeperiod
notify          - .. no documentation ..package         - Manage packages
resources       - This is a metatype that can manage other reso ...
router          - .. no documentation ..
schedule        - Define schedules for Puppet
scheduled_task  - Installs and manages Windows Scheduled Tasks
selboolean      - Manages SELinux booleans on systems with SELi ...
selmodule       - Manages loading and unloading of SELinux poli ...
service         - Manage running services
ssh_authorized_key - Manages SSH authorized keyssshkey          - Installs and manages ssh host keysstage           - A resource type for creating new run stages
tidy            - Remove unwanted files based on specific crite ...user            - Manage usersvlan            - .. no documentation ..
whit            - Whits are internal artifacts of Puppet's curr ...
yumrepo         - The client-side description of a yum reposito ...
zfs             - Manage zfs
zone            - Manages Solaris zones
zpool           - Manage zpools#查看组类型的用法
puppet describe group#各种属性的介绍
- **ensure**
Create or remove the group.
Valid values are `present`, `absent`. - **gid**
The group ID.- **members**
The members of the group. - **name**
The group name.- **system**
Whether the group is a system group with lower GID.

2.puppet资源基础练习

        核心类型:        group: 组user:用户packge:程序包 service:服务file:文件exec:执行自定义命令,要求幂等cron:周期性任务计划notify:通知###资源定义通过资源类型的属性赋值来实现资源定义,这也称为资源类型实例化。定义资源实例化的文件即清单:manifest ###属性:attribute资源属性中三个个特殊属性(几乎所有的资源中都有)namevar,可简写为name,描述资源的名字          ensure,描述资源的目标状态 provider,资源的管理接口语法;   type {'title':attribute1  => value1,atrribute2    => value2,……}   #创建清单的目录[root@node1 puppet]# mkdir manifests[root@node1 puppet]# cd manifests/###资源类型1.groupgroup{'nginx':ensure  =>  present,name    =>  'nginx',system  =>  true,}  #干跑模式[root@node1 manifests]# puppet apply --verbose --noop first.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.15 seconds   Info: Applying configuration version '1500559833'Notice: /Stage[main]/Main/Group[nginx]/ensure: current_value absent, should be present (noop)    Notice: Class[Main]: Would have triggered 'refresh' from 1 events Notice: Stage[main]: Would have triggered 'refresh' from 1 events Notice: Finished catalog run in 0.04 seconds    #执行[root@node1 manifests]# puppet apply --verbose --debug  first.pp Info: Applying configuration version '1500560157'Debug: Executing '/usr/sbin/groupadd -r nginx'Notice: /Stage[main]/Main/Group[nginx]/ensure: created  Notice: Finished catalog run in 0.08 seconds    #查看[root@node1 manifests]# tail -1 /etc/groupnginx:x:995:2.user    2.user#查看user资源的各种用法puppet describe user #列出的资源管理接口,可自定义Providers---------aix, directoryservice, hpuxuseradd, ldap, pw, user_role_add, useradd,windows_adsi  #示例[root@node1 manifests]# vi user.ppuser{'nginx':uid     =>  444,gid     =>  'nginx',system  =>  true,        ensure  =>  present,}puppet apply -v --noop user.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.20 seconds    Info: Applying configuration version '1500561782'Notice: /Stage[main]/Main/User[nginx]/ensure: current_value absent, should be present (noop) Notice: Class[Main]: Would have triggered 'refresh' from 1 events Notice: Stage[main]: Would have triggered 'refresh' from 1 events Notice: Finished catalog run in 0.04 seconds[root@node1 manifests]# puppet apply -v  user.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.21 seconds  Info: Applying configuration version '1500561816'Notice: /Stage[main]/Main/User[nginx]/ensure: created    Notice: Finished catalog run in 0.07 seconds[root@node1 manifests]# tail -1 /etc/passwd nginx:x:444:995::/home/nginx:/bin/bash关系源参数before require notify subscribe四个元参数来定义资源间的相关性资源定义有依赖关系,优先级资源可以被定义,也可以被引用,资源的引用通过"Type['title']" 注意:首字母必须大写 #示例vi redis.ppuser{'redis':gid     =>  'redis',     ensure  =>  present,require =>  Group['redis'],}group{'redis':ensure  =>  present,      #before =>  User['redis'],}puppet apply -v -d --noop redis.pp Info: Applying configuration version '1500562662'Notice: /Stage[main]/Main/Group[redis]/ensure: current_value absent, should be present (noop)    Debug: /Stage[main]/Main/Group[redis]: The container Class[Main] will propagate my refresh event    Notice: /Stage[main]/Main/User[redis]/ensure: current_value absent, should be present (noop)    Debug: /Stage[main]/Main/User[redis]: The container Class[Main] will propagate my refresh event Notice: Class[Main]: Would have triggered 'refresh' from 2 events Debug: Class[Main]: The container Stage[main] will propagate my refresh event   Notice: Stage[main]: Would have triggered 'refresh' from 1 events[root@node1 manifests]# puppet apply -v -d  redis.pp [root@node1 manifests]# grep -i "redis" /etc/passwd redis:x:1001:1001::/home/redis:/bin/bash3.package3.package[root@node1 manifests]# puppet describe package package=======    Manage packages. Parameters----------- **ensure**       What state the package should be in.`present` (also called `installed`), `absent`,`purged`, `held`, `latest`.- **install_options**  Requires features install_options.- **instance**        A read-only parameter set by the package.- **name**     The package name. - **source**      Where to find the package file.     #示例1vi package.pppackage{'redis':ensure      =>  latest,}[root@node1 manifests]# puppet apply -v -d --noop package.pp Notice: /Stage[main]/Main/Package[redis]/ensure: current_value absent, should be latest (noop)     Debug: /Stage[main]/Main/Package[redis]: The container Class[Main] will propagate my refresh event      Notice: Class[Main]: Would have triggered 'refresh' from 1 events     Debug: Class[Main]: The container Stage[main] will propagate my refresh event       Notice: Stage[main]: Would have triggered 'refresh' from 1 events     #执行[root@node1 manifests]# puppet apply -v  package.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.53 seconds        Info: Applying configuration version '1500564098'Notice: /Stage[main]/Main/Package[redis]/ensure: created     Notice: Finished catalog run in 2.93 seconds[root@node1 manifests]# rpm -q redisredis-3.2.3-1.el7.x86_64       #示例2[root@node1 manifests]# vi jdk.pp package{'jdk':ensure      =>  present,source      =>  '/root/jdk-7u79-linux-x64.rpm',provider    =>  rpm,}   4.service[root@node1 manifests]# puppet describe service service=======     Manage running services.        Parameters----------- **binary**            The path to the daemon. - **enable**            Whether a service should be enabled to start at boot.- **ensure**           Whether a service should be running.            Valid values are `stopped` (also called `false`), `running` (also called`true`). - **flags**            Specify a string of flags to pass to the startup script.            Requires features flaggable.- **hasrestart**            Specify that an init script has a `restart` command.the init script's `stop` and `start` commands will be used.Valid values are `true`, `false`.#对应这个脚本有没有restart操作作用:如果命令有restart,就用restart,没有就stop,再start- **hasstatus**- **path**The search path for finding init scripts.#脚本搜索的路径:centos6:/etc/initcentos7:/usr/lib/systemd/system/- **start**Specify a *start* command manually.#手动定义start不用脚本的- **restart**Specify a *restart* command manually. #通常定义reload操作- **pattern**The pattern to search for in the process table.Providers---------base, bsd, daemontools, debian, freebsd, gentoo, init, launchd, openbsd,openrc, openwrt, redhat, runit, service, smf, src, systemd, upstart,windows#示例[root@node1 manifests]# puppet apply -v -d --noop service.pp Notice: /Stage[main]/Main/Service[redis]/ensure: current_value stopped, should be running (noop)Debug: /Stage[main]/Main/Service[redis]: The container Class[Main] will propagate my refresh eventInfo: /Stage[main]/Main/Service[redis]: Unscheduling refresh on Service[redis]Notice: Class[Main]: Would have triggered 'refresh' from 1 eventsDebug: Class[Main]: The container Stage[main] will propagate my refresh eventNotice: Stage[main]: Would have triggered 'refresh' from 1 events[root@node1 manifests]# puppet apply -v -d service.pp Info: Applying configuration version '1500565381'Debug: Executing '/usr/bin/systemctl is-active redis'Debug: Executing '/usr/bin/systemctl is-enabled redis'Debug: Executing '/usr/bin/systemctl start redis'Debug: Executing '/usr/bin/systemctl is-enabled redis'Debug: Executing '/usr/bin/systemctl enable redis'Notice: /Stage[main]/Main/Service[redis]/ensure: ensure changed 'stopped' to 'running'[root@node1 manifests]# ss -tlnp | grep redisLISTEN     0      128    127.0.0.1:6379                     *:*                   users:(("redis-server",pid=6817,fd=4))#示例2[root@node1 manifests]# vi service.pppackage{'redis':ensure      =>  present,}service{'redis':ensure      =>  running,enable      =>  true,require     =>  Package['redis'],}5.file[root@node1 manifests]# puppet describe filefile====Manages files, including their content, ownership, and permissions.Parameters----------- **backup**- **checksum**The checksum type to use when determining whether to replace a file'scontents.            The default checksum type is md5. Valid values are `md5`, `md5lite`, `sha256`, `sha256lite`, `mtime`,`ctime`, `none`. - **content**           The desired contents of a file, as a string.This attribute is mutuallyexclusive with `source` and `target`.- **ensure**         Whether the file should exist, and if so what kind of file it should be.           Possible values are `present`, `absent`, `file`, `directory`, and`link`.        # Equivalent resources:file { "/etc/inetd.conf":ensure => "/etc/inet/inetd.conf",}file { "/etc/inetd.conf":ensure => link,target => "/etc/inet/inetd.conf",}- **force**            Perform the file operation even if it will destroy one or moredirectories.- **group**           Which group should own the file. - **links**            How to handle links during file actions. During file copying,`follow` will copy the target file instead of the link, `manage`will copy the link itself, and `ignore` will just pass it by.- **mode**          The desired permissions mode for the file,- **mtime**- **owner**            The user to whom the file should belong.- **path** (*namevar*)          The path to the file to manage.-**recurse**         Whether to recursively manage the _contents_ of a directory.- **replace**- **source**           A source file, which will be copied into place on the local system.- **source_permissions**     Whether (and how) Puppet should copy owner, group, and mode permissionsfromthe `source` to `file` resources when the permissions are not explicitlyspecified. Valid values are `use`, `use_when_creating`, and `ignore`:- **target**          The target for creating a link. - **validate_cmd**          A command for validating the file's syntax before replacing it.Example:file { '/etc/apache2/apache2.conf':content      => 'example',validate_cmd => '/usr/sbin/apache2 -t -f %',}Providers---------posix, windows#示例1[root@node1 manifests]# cp /etc/redis.conf ./[root@node1 manifests]# vi redis.conf bind 0.0.0.0masterauth 123456[root@node1 manifests]# ll /etc/redis.conf -rw-r--r--. 1 redis root 46730 Aug  5  2016 /etc/redis.conf[root@node1 manifests]# vi file1.pp [root@node1 manifests]# vi file1.pp file{'/etc/redis.conf':ensure      =>  file,source      =>  '/etc/puppet/manifests/redis.conf',owner       =>  'redis',group       =>  'root',mode        =>  '0644',}[root@node1 manifests]# puppet apply -v -d --noop file1.pp [root@node1 manifests]# puppet apply -v -d --noop file1.pp Info: Applying configuration version '1500567458'Debug: Evicting cache entry for environment 'production'Debug: Caching environment 'production' (ttl = 0 sec)Info: Computing checksum on file /etc/redis.confDebug: Evicting cache entry for environment 'production'Debug: Caching environment 'production' (ttl = 0 sec)Info: /Stage[main]/Main/File[/etc/redis.conf]: Filebucketed /etc/redis.conf to puppet with sum 910058e228c4ad556ffc0f473cef9323[root@node1 manifests]# cat /etc/redis.conf | egrep -i "bind 0.0.0.0|masterauth 123456"bind 0.0.0.0 masterauth 123456 通知元参数两个参数:通知和订阅,见名知意,很好理解。notify,subscribeA notify B:B依赖于B,且A发生改变会通知B{notify => Type['B'],}   B subscribe A :B依赖与A,B订阅A资源产生的事件{subscribe => Type['B'],}其中有特殊情况:链式依赖       #示例2[root@node1 manifests]# vi service.pp #install redis packagepackage{'redis':ensure      =>  present,}            #push source file to des file.file{'/etc/redis.conf':ensure      =>  file,source      =>  '/etc/puppet/manifests/redis.conf'require     =>  Package['redis'],}            #running redis serverservice{'redis':ensure      =>  running,enable      =>  true,require     =>  Package['redis'],subscribe   =>  File['/etc/redis.conf'],}[root@node1 manifests]# puppet apply -v -d --noop service.pp [root@node1 manifests]# puppet apply -v -d service.pp #示例3:修正版 A -> B 表示A before B;B ~> C 表示B notify C;[root@node1 manifests]# vi service.pp #install redis packagepackage{'redis':ensure      =>  present,} ->           #push source file to des file.file{'/etc/redis.conf':ensure      =>  file,source      =>  '/etc/puppet/manifests/redis.conf',owner       =>  'redis',group       =>  'root',mode        =>  '0644',} ~>            #running redis serverservice{'redis':ensure      =>  running,enable      =>  true,}           #或者还可以这样表示:Package['redis'] -> File['/etc/redis.conf'] ~> Service['redis']#示例4:content用法[root@node1 manifests]# vi test.ppfile{'/tmp/test.txt':ensure  =>  file,content =>  'Hello World!',}[root@node1 manifests]# puppet apply -v test.pp #note:content also can be created by template.[root@node1 manifests]# puppet apply -v test.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.16 seconds         Info: Applying configuration version '1500569471'Notice: /Stage[main]/Main/File[/tmp/test.txt]/ensure: defined content as '{md5}ed076287532e86365e841e92bfc50d8c'Notice: Finished catalog run in 0.05 seconds[root@node1 manifests]# cat /tmp/test.txt Hello World!#示例6:link用法[root@node1 manifests]# puppet apply  -v link.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.15 seconds            Info: Applying configuration version '1500569692'Notice: /Stage[main]/Main/File[/tmp/test.link]/ensure: created           Notice: Finished catalog run in 0.04 seconds[root@node1 manifests]# ll /tmp/test.linklrwxrwxrwx. 1 root root 13 Jul 21 00:54 /tmp/test.link -> /tmp/test.txt            #示例5:递归创建目录[root@node1 manifests]# vi mkdir.ppfile{'/tmp/pam.d':ensure      =>  directory,source      =>  '/etc/pam.d',recurse    =>  true,}            #note: if source is  not exist,which would create empty directory.[root@node1 manifests]# puppet apply -v mkdir.pp [root@node1 manifests]# ll /tmp/pam.d/total 104-rw-r--r--. 1 root root 192 Jul 21 00:59 chfn...            #(ps:DevOPs三个层次:bootstraping,configuration,command and control)6.exec         [root@node1 manifests]# puppet describe exec exec====          Executes external commands.Any command in an `exec` resource **must** be able to run multiple timeswithout causing harm --- that is, it must be *idempotent*.         #任何能够在exec资源执行的命令必须能够重复执行,并且不产生危害,这就意味着,命令必须拥有幂等性。Parameters----------- **command** (*namevar*)                The actual command to execute. - **creates**                A file to look for before running the command.              #文件路径,当此路径的文件不存在,cmd就会执行exec { "tar -xf /Volumes/nfs02/important.tar":cwd     => "/var/tmp",creates => "/var/tmp/myfile",path    => ["/usr/bin", "/usr/sbin"]}- **cwd**             The directory from which to run the command. - **environment**              Any additional environment variables you want to set for acommand.  - **group**             The group to run the command as.- **logoutput**             Whether to log command output in addition to logging theexit code.     - **onlyif**             If this parameter is set, then this `exec` will only run ifthe command has an exit code of 0. #只有这个命令运行成功才运行cmd。For example:exec { "logrotate":path   => "/usr/bin:/usr/sbin:/bin",onlyif => "test `du /var/log/messages | cut -f1` -gt 100000"}- **path**                The search path used for command execution.- **refresh**                How to refresh this command.  #重新执行当前cmd的替代命令     - **refreshonly**             The command should only be run as arefresh mechanism for when a dependent object is changed.    #仅接收到订阅的资源的通知才运行cmdValid values are `true`, `false`. - **returns**              The expected exit code(s).- **timeout**             The maximum time the command should take. - **tries**    - **try_sleep**                The time to sleep in seconds between 'tries'.- **umask**              Sets the umask to be used while executing this command- **unless**              If this parameter is set, then this `exec` will run unlessthe command has an exit code of 0.             #如果这个命令运行失败就运行cmd- **user**              The user to run the command as.         Providers---------posix, shell, windows            #示例1:创建目录[root@node1 manifests]# vi exec1.ppexec{'mkdir':command     =>  'mkdir /tmp/testdir',path        =>  '/bin:/sbin:/usr/bin:/usr/sbin',creates     =>  '/tmp/testdir',  #directory not exist ,exec cmd.}[root@node1 manifests]# puppet apply -v exec1.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.07 seconds         Info: Applying configuration version '1500582762'Notice: /Stage[main]/Main/Exec[mkdir]/returns: executed successfully         Notice: Finished catalog run in 0.04 seconds[root@node1 manifests]# ls /tmp/testdir/ -d/tmp/testdir/           #示例2:创建用户[root@node1 manifests]# vi exec2.pp exec{'adduser':command     =>  'useradd -r mogilefs',path        =>  '/bin:/sbin:/usr/bin:/usr/sbin',                unless      =>  'id mogilefs',      #unless id cmd success,exec comd.}[root@node1 manifests]# puppet apply -v exec2.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.07 seconds          Info: Applying configuration version '1500583160'Notice: /Stage[main]/Main/Exec[adduser]/returns: executed successfully           Notice: Finished catalog run in 0.10 seconds[root@node1 manifests]# grep -i "mogilefs" /etc/passwdmogilefs:x:442:442::/home/mogilefs:/bin/bash[root@node1 manifests]# id mogilefsuid=442(mogilefs) gid=442(mogilefs) groups=442(mogilefs)            #示例3package{'httpd':ensure      =>  latest,} ~>exec{'adduser':command     =>  'useradd -r httpd',path        =>  '/bin:/sbin:/usr/bin:/usr/sbin',              unless      =>  'id httpd',     #unless id cmd success,exec comd.refreshonly =>  true,}[root@node1 manifests]# grep -i "httpd" /etc/passwdapache:x:48:48:Apache:/usr/share/httpd:/sbin/nologinhttpd:x:442:442::/home/httpd:/bin/bash7.cron[root@node1 manifests]# puppet describe croncron====          Installs and manages cron jobs.         #cron资源必要要有一个周期性的属性cron { logrotate:command => "/usr/sbin/logrotate",user    => root,hour    => ['2-4'],minute  => '*/10'}            Parameters----------- **command**               The command to execute in the cron job. - **ensure**                The basic property that the resource should be in.Valid values are `present`, `absent`. - **environment**               Any environment settings associated with this cron job.- **hour**- **minute**- **month**- **monthday**- **name**                The symbolic name of the cron job- **special**              A special value such as 'reboot' or 'annually'.- **target**             The name of the crontab file in which the cron job should be stored.                #添加哪个用户的任务- **user**- **weekday**           #示例1[root@node1 manifests]# vi cron1.pp cron{'synctime':command     =>  '/usr/sbin/ntpdate 172.16.0.1 &> /dev/null',name        =>  'synctime from ntp server',minute      =>  '*/30',}[root@node1 manifests]# puppet apply -v cron1.pp[root@node1 manifests]# crontab -l | grep '172.'*/30 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null8.notify[root@node1 manifests]# puppet describe notifynotify======           Sends an arbitrary message to the agent run-time log.           Parameters----------- **message**               The message to be sent to the log.- **name**                An arbitrary tag for your own reference; the name of the message.- **withpath**             Whether to show the full object path. Defaults to false. Valid values are `true`, `false`. #示例    [root@node1 manifests]# puppet apply -v notify1.pp Notice: Compiled catalog for node1.localdomain in environment production in 0.03 seconds          Info: Applying configuration version '1500584971'Notice: hi,you are welcome!          Notice: /Stage[main]/Main/Notify[sayhi]/message: defined 'message' as 'hi,you are welcome!'Notice: Finished catalog run in 0.03 seconds

3.总结

主要介绍了核心类型资源的用法,核心类型资源包括:group,user,package,service,file,exec,cron,notify,总共8种资源的用法。
group定义属组相关用法,user定义属主用法,package定义程序包用法,service定义程序服务用法,file定义文件的用法,exec定义了自定义命令的用法,cron定义周期性任务的的用法,notify'定义信息通知的用法。

转载于:https://blog.51cto.com/huwho/1949369

puppet基础篇(练习篇)相关推荐

  1. Puppet基础篇9-Puppetmaster多环境配置

    Puppet基础篇9-Puppetmaster多环境配置 零基础学习Puppet自动化配置管理系列文档 扩充现有架构环境是对一个企业成长的见证 将基础环境模块部署到puppetmaster端之后就可以 ...

  2. Puppet基础篇7-编写第一个完整测试模块puppet

    Puppet基础篇7-编写第一个完整测试模块puppet 零基础学习Puppet自动化配置管理系列文档 将Puppet部署到生产中第一个要编写的模块就是puppet本身,虽然puppet可以运行其它所 ...

  3. Puppet基础篇5-如何建立master和agent之间的认证关系

    Puppet基础篇5-如何建立master和agent之间的认证关系 零基础学习Puppet自动化配置管理系列文档 Puppet注册方式基本上有三种:自动注册.手动注册和预签名注册,在<Pupp ...

  4. Puppet基础篇6-Puppet更新方式的选型

    Puppet基础篇6-Puppet更新方式的选型 零基础学习Puppet自动化配置管理系列文档 基于C/S架构的Puppet更新方式一般有两种,一种是Agent端设置同步时间主动去PuppetMast ...

  5. puppet 基础篇

    puppet [TOC] 1.什么是puppet 很多公司经常情况下会遇到这么一个问题,新应用开发完成之后,运维人员耗费了大量的时间在测试环境上完成了项目的部署,而迁移到线上环境依旧需要逐字逐句的变更 ...

  6. 计算机编程书籍-笨办法学Python 3:基础篇+进阶篇

    编辑推荐: 适读人群 :本书适合所有已经开始使用Python的技术人员,包括初级开发人员和已经升级到Python 3.6版本以上的经验丰富的Python程序员. "笨办法学"系列, ...

  7. iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC

    这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...

  8. python turtle基本语法_Python 基础语法-turtle篇

    Python 基础语法-turtle篇 今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类. -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle ...

  9. shell基础二十篇 一些笔记

    shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...

最新文章

  1. esxi所连交换机划vlan导致vm不能通讯
  2. 会计记忆总结之八:财务会计报告
  3. Tencent JDK 国产化CPU架构支持分享
  4. Java加密与解密的艺术~DES实现
  5. Localtunnel(Node.js 版) 使用教程
  6. 大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
  7. JAVA常见异常之NullPointerException 空指针异常
  8. Centos7防火墙iptables安装及设置图文并茂【实现防火墙管理功能】
  9. delphi 发送html邮件,delphi – 以HTML格式发送电子邮件
  10. Spring-IOC与AOP是解决什么问题的?
  11. 【软件工程】实验九 建立动态模型--自行车租赁管理系统
  12. 备份方案技术及应用【10】
  13. PMP工具与技术之人际关系与团队技能
  14. EasyCVR实现智慧楼宇道闸控制流程及参考代码分享
  15. JS 手机浏览器唤醒手机QQ
  16. 计算机一级模块数量填什么,2015年全国各地职计算机考试初级,中级,(副)高级 通过模块数量.doc...
  17. (转)活出自己的生命
  18. Unity 2D 游戏开发解决方案大全
  19. 你阻挡我通往成功的路啊 垫脚石
  20. 快捷键和搜索引擎的使用

热门文章

  1. IntelliJ IDEA版本和junit版本不适配
  2. 腾讯面试题 linux下free命令详解
  3. Lock锁的基本使用
  4. pytest第一版 入门学习
  5. c2750服务器性能,国外披露“Avoton”凌动C2750能耗测试
  6. cd返回上一 git_git统计代码量脚本
  7. python爬虫抓收费图片_简单的Python抓taobao图片爬虫
  8. 微信小程序(购物车)--在wxml中设置保留小数位数
  9. java 实现set_js 实现JAVASET
  10. CSS学习15之定位