Puppet函数介绍(十八)

puppet函数

puppet函数主要用途是完成一个功能的集合,puppet的函数很多,只例举常用的几个.

define函数

define函数主要用于创建自定义函数,define支持参数但不支持继承.通常可以通过define函数将多个资源整合为一个资源.

define函数示例(crontab计划任务模块):

新建cron模块,依次建{templates,manifests,lib,files}文件夹,模块资源清单文件manifests下必须有init.pp文件,定义此模块的类且类名唯一.

init.pp文件声明使用cron模块下的basescript类资源.

class cron {
    include cron::basescript
}

basescript.pp类文件定义资源.

注释:把/root/bin下匹配到的脚本文件发送到各agent端的/root/bin文件夹下,同时定义crontab计划任务.

class cron::basescript{
    file {"/root/bin":
    ensure=> directory,
    mode=>755,
}
    define webcronscript ($mode = "755") {
        file { "/root/bin/$name" :
            source => "puppet:///modules/cron/root/bin/$name",
            mode   => $mode,
            require=> File["/root/bin"],
        }
    }
    webcronscript { ["check_ping.sh","check_hostname.sh"]: }
        file { "/etc/cron.d/auto-task":
            owner  => root,
            group  => root,
            mode   => 644,
            source => "puppet:///modules/cron/etc/cron.d/auto-task",
        }
}

cron模块file文件夹下依次创建/root/bin目录及个脚本文件.

脚本文件路径:

cron计划任务:

puppet 入口文件import载入nodes.pp文件.

#----site.pp----
import"nodes"

node.pp文件base节点载入cron模块.

node base {
    include admin
    include cron
}
node /sh-(proxy|web)\d+/  inherits base {
    case $::hostname {
        /sh-proxy\d+/: {
             include apache
          }
        "sh-web1": {
             include nginx::nginxconf
             include php
          } 
        }
}

sh-proxy2和sh-web1两台agent端更新测试:

[[email protected] ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for sh-proxy2.localdomain
Info: Applying configuration version ‘1506525578‘
Notice: /Stage[main]/Admin/Exec[selinux]/returns: executed successfully
Notice: /Stage[main]/Cron::Basescript/File[/root/bin]/ensure: created
Notice: /Stage[main]/Cron::Basescript/Cron::Basescript::Webcronscript[check_ping.sh]/File[/root/bin/check_ping.sh]/ensure: defined content as ‘{md5}a68da6e8a332234afa8c9d3c2834c5df‘
Notice: /Stage[main]/Cron::Basescript/Cron::Basescript::Webcronscript[check_hostname.sh]/File[/root/bin/check_hostname.sh]/ensure: defined content as ‘{md5}47b425aa5853a5487c139957101cb08c‘
Notice: Finished catalog run in 0.44 seconds
[[email protected] bin]# puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for sh-web1.localdomain
Info: Applying configuration version ‘1506522880‘
Notice: /Stage[main]/Admin/Exec[selinux]/returns: executed successfully
Notice: /Stage[main]/Cron::Basescript/Cron::Basescript::Webcronscript[check_ping.sh]/File[/root/bin/check_ping.sh]/ensure: defined content as ‘{md5}a68da6e8a332234afa8c9d3c2834c5df‘
Notice: /Stage[main]/Cron::Basescript/File[/etc/cron.d/auto-task]/ensure: defined content as ‘{md5}d77faa0254d615e0fcb646beb73a91e3‘
Notice: /Stage[main]/Cron::Basescript/Cron::Basescript::Webcronscript[check_hostname.sh]/File[/root/bin/check_hostname.sh]/ensure: defined content as ‘{md5}47b425aa5853a5487c139957101cb08c‘
Notice: Finished catalog run in 0.53 seconds

tagged函数用法:

tagged通过tag为资源做标记,并通过tagged函数判断被标记的类与类之间的关系.

下面通过php模块演示:

modules/php/init.pp文件内容:

class php {
    include php::phpfpmconf
    $packages = [‘php‘,‘php-devel‘]
        package {[$packages]:
        ensure=> "installed"
    }
    package {"php-fpm":
        ensure => present,
    }
    service {"php-fpm":
        ensure=> running,
        enable=> true,
        hasrestart=> true,
        hasstatus=> true,
        provider => init,
        require=> Package["php-fpm"],
    }
}

modules/php/phpfpmconf.pp函数文件内容:

注释:通过tagged函数来区分php参数,即各个类型主机匹配的资源.

class php::phpfpmconf {
define generatePHPFpmFiles () {
 if tagged("web::proxy") {
      /* web::proxy */
      $sock_max_children = 50
      $sock_max_spare_servers = 20
      $sock_start_servers = 12
      $www_max_children = 20
      $www_max_spare_servers = 20
      $www_start_servers = 12
      $need_apc = false
      $display_errors = "on"
      $sock_max_requests = 5000
      $www_max_requests = 5000
      $memory_limit = 1024
      $max_execution_time = 300
      $slowlog_timeout = 10
      $post_max_size="12M"
      $upload_max_filesize="12M"
    } else {
      /* web */
      $sock_max_children =20
      $sock_max_spare_servers = 20
      $sock_start_servers = 12
      $www_max_children = 20
      $www_max_spare_servers = 20
      $www_start_servers = 12
      $need_apc = false
      $display_errors = "off"
      $sock_max_requests = 500
      $www_max_requests = 500
      $memory_limit = 1024
      $max_execution_time = 300
      $slowlog_timeout = 10
      $post_max_size="12M"
      $upload_max_filesize="12M"
    } 
case $::hostname {
    "sh-proxy2" : {
        file { "/etc/php-fpm.d/www.conf":
            ensure  => file,
            content => template(‘php/www.conf.erb‘),
            #notify => Service["php-fpm"],
    }
}
    default :{
        file { "/etc/php-fpm.d/www.conf":
              owner   => "root",
              group   => "root",
              mode    => "644",
              ensure  => "file",
              content => template("php/www.conf.erb")
                }
        }
    }
}
case $::hostname {
    /[a-z][A-Z]\d+/ : {
      generatePHPFpmFiles { ‘dv‘: }
    }
    default   : {
      generatePHPFpmFiles { $::hostname: }
    }
  }
}

modules/php/templates/www.conf.erb模板内容大致也就是上面那些定义变量的参数:

注释:先安装一台php-fpm,把/etc/php-fpm.d/www.conf文件复制粘贴一份做模板文件,里面参数改改就行.

pm = static
pm.max_children = <%= www_max_children %>
pm.start_servers = <%= www_start_servers %>
pm.max_spare_servers = <%= www_max_spare_servers %>
.....

puppet的node.pp文件,在匹配sh-proxy主机时定义tag标记。

注释:匹配到主机sh-proxy定义tag为web::proxy.

node base {
    include admin
    include cron
}
node /sh-(proxy|web)\d+/  inherits base {
case $::hostname {
    /sh-proxy\d+/: {
        tag ("web::proxy")
             include php
      }
      "sh-web1": {
              include php
            } 
    }
}

agent端更新测试:

[[email protected] php-fpm.d]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for sh-proxy2.localdomain
Info: Applying configuration version ‘1506534804‘
Notice: /Stage[main]/Admin/Exec[selinux]/returns: executed successfully
Notice: /Stage[main]/Php::Phpfpmconf/Php::Phpfpmconf::Generatephpfpmfiles[sh-proxy2]/File[/etc/php-fpm.d/www.conf]/content: 
--- /etc/php-fpm.d/www.conf2017-03-22 20:29:28.000000000 +0800
+++ /tmp/puppet-file20170928-96466-ix9fq8-02017-09-28 01:53:24.115952791 +0800
@@ -1,3 +1,13 @@
+[global]
+; Pid file
+; Default Value: none
+pid = /var/run/php-fpm_www.pid
+
+
+; Error log file
+; Default Value: /usr/local/var/log/php-fpm.log
+error_log = /var/log/php-fpm/php-fpm.error.log
+
 ; Start a new pool named ‘www‘.
 [www]
 
@@ -9,11 +19,14 @@
 ;                            specific port;
 ;   ‘/path/to/unix/socket‘ - to listen on a unix socket.
 ; Note: This value is mandatory.
-listen = 127.0.0.1:9000
+
+ 
+listen = 9000
+
 
 ; Set listen(2) backlog. A value of ‘-1‘ means unlimited.
 ; Default Value: -1
-;listen.backlog = -1
+listen.backlog = 4096
  
 ; List of ipv4 addresses of FastCGI clients which are allowed to connect.
 ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
@@ -21,7 +34,7 @@
 ; must be separated by a comma. If this value is left blank, connections will be
 ; accepted from any ip address.
 ; Default Value: any
-listen.allowed_clients = 127.0.0.1
+;listen.allowed_clients =
 
 ; Set permissions for unix socket, if one is used. In Linux, read/write
 ; permissions must be set in order to allow connections from a web server. Many
@@ -36,9 +49,9 @@
 ; Note: The user is mandatory. If the group is not set, the default user‘s group
 ;       will be used.
 ; RPM: apache Choosed to be able to access some dir as httpd
-user = apache
+user = nobody
 ; RPM: Keep a group allowed to write in log dir.
-group = apache
+group = www
 
 ; Choose how the process manager will control the number of child processes.
 ; Possible Values:
@@ -57,7 +70,7 @@
 ;                                    of ‘idle‘ processes is greater than this
 ;                                    number then some children will be killed.
 ; Note: This value is mandatory.
-pm = dynamic
+pm = static
 
 ; The number of child processes to be created when pm is set to ‘static‘ and the
 ; maximum number of child processes to be created when pm is set to ‘dynamic‘.
@@ -67,12 +80,12 @@
 ; CGI.
 ; Note: Used when pm is set to either ‘static‘ or ‘dynamic‘
 ; Note: This value is mandatory.
-pm.max_children = 50
+pm.max_children = 20
 
 ; The number of child processes created on startup.
 ; Note: Used only when pm is set to ‘dynamic‘
 ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
-pm.start_servers = 5
+pm.start_servers = 12
 
 ; The desired minimum number of idle server processes.
 ; Note: Used only when pm is set to ‘dynamic‘
@@ -82,13 +95,13 @@
 ; The desired maximum number of idle server processes.
 ; Note: Used only when pm is set to ‘dynamic‘
 ; Note: Mandatory when pm is set to ‘dynamic‘
-pm.max_spare_servers = 35
+pm.max_spare_servers = 20
  
 ; The number of requests each child process should execute before respawning.
 ; This can be useful to work around memory leaks in 3rd party libraries. For
 ; endless request processing specify ‘0‘. Equivalent to PHP_FCGI_MAX_REQUESTS.
-; Default Value: 0
-;pm.max_requests = 500
+; Default Value: -2
+pm.max_requests = 5000
 
 ; The URI to view the FPM status page. If this value is not set, no URI will be
 ; recognized as a status page. By default, the status page shows the following
@@ -118,7 +131,7 @@
 ;       anything, but it may not be a good idea to use the .php extension or it
 ;       may conflict with a real PHP file.
 ; Default Value: not set 
-;pm.status_path = /status
+pm.status_path = /status
  
 ; The ping URI to call the monitoring page of FPM. If this value is not set, no
 ; URI will be recognized as a ping page. This could be used to test from outside
@@ -135,20 +148,20 @@
 ; This directive may be used to customize the response of a ping request. The
 ; response is formatted as text/plain with a 200 response code.
 ; Default Value: pong
-;ping.response = pong
+ping.response = pong
  
 ; The timeout for serving a single request after which the worker process will
 ; be killed. This option should be used when the ‘max_execution_time‘ ini option
 ; does not stop script execution for some reason. A value of ‘0‘ means ‘off‘.
 ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
 ; Default Value: 0
-;request_terminate_timeout = 0
+request_terminate_timeout = 0
  
 ; The timeout for serving a single request after which a PHP backtrace will be
 ; dumped to the ‘slowlog‘ file. A value of ‘0s‘ means ‘off‘.
 ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
 ; Default Value: 0
-;request_slowlog_timeout = 0
+request_slowlog_timeout = 10
  
 ; The log file for slow requests
 ; Default Value: not set
@@ -179,24 +192,16 @@
 ; Redirect worker stdout and stderr into main error log. If not set, stdout and
 ; stderr will be redirected to /dev/null according to FastCGI specs.
 ; Default Value: no
-;catch_workers_output = yes
+catch_workers_output = yes
  
-; Limits the extensions of the main script FPM will allow to parse. This can
-; prevent configuration mistakes on the web server side. You should only limit
-; FPM to .php extensions to prevent malicious users to use other extensions to
-; exectute php code.
-; Note: set an empty value to allow all extensions.
-; Default Value: .php
-;security.limit_extensions = .php .php3 .php4 .php5
-
 ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
 ; the current environment.
 ; Default Value: clean env
-;env[HOSTNAME] = $HOSTNAME
-;env[PATH] = /usr/local/bin:/usr/bin:/bin
-;env[TMP] = /tmp
-;env[TMPDIR] = /tmp
-;env[TEMP] = /tmp
+env[HOSTNAME] = $HOSTNAME
+env[PATH] = /usr/local/bin:/usr/bin:/bin
+env[TMP] = /tmp
+env[TMPDIR] = /tmp
+env[TEMP] = /tmp
 
 ; Additional php.ini defines, specific to this pool of workers. These settings
 ; overwrite the values previously defined in the php.ini. The directives are the
@@ -215,12 +220,10 @@
 ; Default Value: nothing is defined by default except the values in php.ini and
 ;                specified at startup with the -d argument
 ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected]
-;php_flag[display_errors] = off
-php_admin_value[error_log] = /var/log/php-fpm/www-error.log
+php_flag[display_errors] = on
+php_admin_value[error_log] = /var/log/php-fpm/www.error.log
 php_admin_flag[log_errors] = on
-;php_admin_value[memory_limit] = 128M
-
-; Set session path to a directory owned by process user
-php_value[session.save_handler] = files
-php_value[session.save_path] = /var/lib/php/session
+;php_admin_value[memory_limit] = 32M
 
+;add by zkf . add some file support. p file is used by channel.
+security.limit_extensions = .php .php3 .php4 .php5 .html .do .js .css .htm p
\ No newline at end of file
Info: Computing checksum on file /etc/php-fpm.d/www.conf
Info: /Stage[main]/Php::Phpfpmconf/Php::Phpfpmconf::Generatephpfpmfiles[sh-proxy2]/File[/etc/php-fpm.d/www.conf]: Filebucketed /etc/php-fpm.d/www.conf to puppet with sum 2402465907d7a7544db6315c55248938
Notice: /Stage[main]/Php::Phpfpmconf/Php::Phpfpmconf::Generatephpfpmfiles[sh-proxy2]/File[/etc/php-fpm.d/www.conf]/content: content changed ‘{md5}2402465907d7a7544db6315c55248938‘ to ‘{md5}a8ef2b23bd9feab1848d3dfe27ab1bd6‘
Notice: Finished catalog run in 0.56 seconds
grep过滤修改的参数查看是否改变了:
[[email protected] php-fpm.d]# cat www.conf | grep requests
; The address on which to accept FastCGI requests.
; This value sets the limit on the number of simultaneous requests that will be
; The number of requests each child process should execute before respawning.
pm.max_requests = 5000
; The log file for slow requests

template函数

template函数可以通过file资源调用模块中的*.erb模板文件。

示例(上面的php模板):

content => template("php/www.conf.erb")

template也可以合并模板:

"sh-proxy2" : {
     file { "/etc/php-fpm.d/www.conf":
        ensure  => file,
        content => template("php/www.conf.erb","php/wwwproxy.conf.erb"),
        #notify => Service["php-fpm"],
    }
}

agent端更新后做对比:

合并模板后:

[[email protected] php-fpm.d]# cat www.conf | wc -l
458

合并模板前:

[[email protected] php-fpm.d]# cat www.conf | wc -l
228

两个模板就算参数重复也不会覆盖,只是在同一个文件中追加另一个模板的内容.

[[email protected] php-fpm.d]# cat www.conf | grep -v ‘^;‘ | grep -v ‘^$‘ | grep request_terminate_timeout
request_terminate_timeout = 0
request_terminate_timeout = 0

Generate 函数

generate 函数调用外部命令并且返回结果给Puppet,用法如下:

$interfaces = generate("/sbin/ifconfig", "eth0")

这里定义了一个变量叫做$interfaces,它调用了generate 函数,所有的generate 函数必须有一个指明的命令,然后填入若干参数,这两个直接用逗号分割,返回的结果就是执行命令

# /sbin/ifconfig eth0

注释:将返回结果返回给$interface,命令执行完必须返回状态码为0,返回其他的状态码就会造成解释错误。

本地应用:

示例:

# cat 3.pp 
$ifip=generate (‘/sbin/ifconfig‘,‘eth0‘)
notice $ifip
# puppet apply 3.pp 
Notice: Scope(Class[main]): eth0      Link encap:Ethernet  HWaddr 00:0C:29:06:AF:4B  
          inet addr:192.168.30.132  Bcast:192.168.30.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe06:af4b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:612647 errors:0 dropped:0 overruns:0 frame:0
          TX packets:174442 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:614959446 (586.4 MiB)  TX bytes:24739431 (23.5 MiB)
Notice: Compiled catalog for sh-proxy2.localdomain in environment production in 0.06 seconds
Notice: Finished catalog run in 0.01 seconds

在puppet代码中嵌入这段代码,获取的就是master端的信息:

node base {
    include admin
    include cron
}
node /sh-(proxy|web)\d+/  inherits base {
    case $::hostname {
    /sh-proxy\d+/: {
            tag ("web::proxy")
             include php
          }
    "sh-web1": {
        include php
        $ifip=generate(‘/sbin/ifconfig‘,‘eth0‘)
        notify {"$ifip":}
        } 
    }
}

agent端更新:

192.168.30.134为master端的ip.

[[email protected] ~]# puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for sh-web1.localdomain
Info: Applying configuration version ‘1506606174‘
Notice: /Stage[main]/Admin/Exec[selinux]/returns: executed successfully
Notice: eth0      Link encap:Ethernet  HWaddr 00:0C:29:53:DD:61  
          inet addr:192.168.30.134  Bcast:192.168.30.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe53:dd61/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:228766 errors:0 dropped:0 overruns:0 frame:0
          TX packets:102934 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:107060668 (102.1 MiB)  TX bytes:50130125 (47.8 MiB)
Notice: /Stage[main]/Main/Node[sh-proxywebd]/Notify[eth0      Link encap:Ethernet  HWaddr 00:0C:29:53:DD:61  
          inet addr:192.168.30.134  Bcast:192.168.30.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe53:dd61/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:228766 errors:0 dropped:0 overruns:0 frame:0
          TX packets:102934 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:107060668 (102.1 MiB)  TX bytes:50130125 (47.8 MiB)
]/message: defined ‘message‘ as ‘eth0      Link encap:Ethernet  HWaddr 00:0C:29:53:DD:61  
          inet addr:192.168.30.134  Bcast:192.168.30.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe53:dd61/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:228766 errors:0 dropped:0 overruns:0 frame:0
          TX packets:102934 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:107060668 (102.1 MiB)  TX bytes:50130125 (47.8 MiB)
‘
Notice: Finished catalog run in 0.32 seconds

versioncmp函数(用的不多):

versioncmp函数用于版本号之间的比较.

versioncmp有三个返回值:

如果版本a大于版本b,则返回1.

如果版本a等于版本b,则返回0.

如果版本a小雨版本b,则返回-1.

puppet代码文件:

# cat 4.pp 
if versioncmp (‘2.6‘,‘2.4‘) > 0 {
notice ("2.6 is > than 2.4")
}

puppet本地应用:

# puppet apply 4.pp 
Notice: Scope(Class[main]): 2.6 is > than 2.4
Notice: Compiled catalog for sh-web1.localdomain in environment production in 0.06 seconds
Notice: Finished catalog run in 0.01 seconds
时间: 2024-11-07 15:52:45

Puppet函数介绍(十八)的相关文章

C++语言笔记系列之十八——虚函数(1)

1.C++中的多态 (1)多态性:同一个函数的调用可以进行不同的操作,函数重载是实现多态的一种手段. (2)联编:在编译阶段进行联接,即是在编译阶段将一个函数的调用点和函数的定义点联接起来. A.静态联编:在编译阶段就完成的函数联编--函数重载. B.动态联编:在程序的运行阶段由系统自动选择具体的函数--虚函数. 注:C++的多态主要指的就是动态联编. 2.虚函数 (1)虚函数是在函数的定义时将其声明为虚函数即可. (2)说明:virtual 数据类型 函数名(参数表) {函数体} A.目的:当

ThinkPHP页面跳转、Ajax技巧详细介绍(十八)

原文:ThinkPHP页面跳转.Ajax技巧详细介绍(十八) ThinkPHP页面跳转.Ajax技巧详细介绍 一.页面跳转 $this->success('查询成功',U('User/test')); ├─//跳当前模块方法下: ├─ $this->success('查询成功','test'); └─//跳到 指定跳转模块方法下 this->success('查询成功',U('User/test')); $this->error('查询失败,3秒后跳会之前的页面/上一页'); //

微软云计算介绍与实践(实践之二十八)

运行服务请求 上面章节小张发布服务给晓红时,预设的流程是首验证用户,然后与Orchestrator和SCVMM交互,最后确保按计划进行工作流.于是小张将创建一个测试私有云. 1.打开Service Manager门户网站浏览http://Sharepoint:82/SMPortal,从通用类选择基础设施服务 2.由于小张只创建和发布一个请求服务,在这里小张将在基础设施页面选择创建私有云 3.在如下发售请求页面,选择进入申请表 4.审查和提交页面,我们可以双击选择提交前检查我们的信息 5.确认页面

微软云计算介绍与实践(实践之三十八)

扣款报告,深入洞察使用 在System Center中,扣费IT服务提供部门(提供者)与业务部门(使用者)的交互.沟通工具之一.还可以帮助IT利用现有投资,按需求给客户提供服务.扣费的主要依据是云的定价,每个不同SLA的云都有自己的价格:System Center组件帮助我们实现以下过程: 配额 租赁        认证        退款或回显 先决条件        在Guest01安装Excel Office专业版2013所需要的扣费计算表报告功能,这里下载: http://technet

Java学习总结(十八)——MySQL数据库(4)MySQL数据库中的视图,函数,存储过程中常见循环

一.MySQL存储过程中常见的循环1.while循环:WHILE.....DO.....END WHILE例1:创建存储过程(求1+2+.......+num的和):创建成功,进行调用:显示结果:2.REPEAT循环: REPEAT.........UNTLL END REPEAT例2:创建存储过程:创建完成,调用存储过程:显示结果:3.LOOP循环:LOOP END LOOP 例3:创建存储过程:创建成功,调用存储过程:显示结果:二.MySQL中的视图1.概念:有结构(有行有列),但没有结果(

条目二十八《正确理解由reverse_iterator的base()成员函数所产生的iterator的用法》

条目二十八<正确理解由reverse_iterator的base()成员函数所产生的iterator的用法> 迭代器的种类一共有四种,上面已经说过了.这里就不再次写出来. 这一个条目主要是reserce_iterator和iterator的转换.可以使用base()函数来把前者转换为后者. 比如在拥有reserve_iterator,但需要用到插入,删除成员函数,那么这两个是不接受reserve_iterator作为参数的,所以需要转换为iterator再进行下一步的插入和删除元素. 以上代码

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径 本篇名言:"富贵不淫贫贱乐 ,男儿到此是豪雄.-- 程颢" 这次来看下有向无环图的另一个应用关键路径. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47135061 1.  关键路径 与AOV-网相对应的是AOE-网(Activity On Edge)即边表示活动的网.AOE-网是一个带权的有向无环图,其中,顶点表示事件(Event),弧表示活动,权表

Cocos2d-x 3.x 开发(十八)10行代码看自动Batch,10行代码看自动剔除

1.概述 在游戏的运行过程中,图形的绘制是非常大的开销.对于良莠不齐的Android手机市场,绘制优化较好的游戏,可以在更多的手机上运行,因此也是优化的重中之重.图形方面的优化主要体现在减少GUP的绘制次数上.这里我们分别从自动优化渲染批次和绘制剔除两个方面来看新版本在绘制上的优化. 2.自动batch 在Cocos2d-x 3.x中,抛弃了先前手动编写BatchNode,采用自动管理的方式.说起BatchNode,就难免涉及到显卡底层的绘制原理.简单的说,每提交一条绘制指令到显卡都会产生消耗,

【转载】COM 组件设计与应用(十八)——属性包

原文:http://vckbase.com/index.php/wv/1265.html 一.前言 书接上回,本回着落在介绍属性包 IPersistPropertyBag 接口的实现方法和调用方式.属性包,是以“名称 - 值”的方式提供组件持续性的支持,而“名称 - 值”恰恰又适合于用文本方式来表现.下面的片段是在 HTML 中插入 Microsoft MonthView Control ActiveX 控件后的样式: <object classid="clsid:232E456A-87C