All right. Awesome. So first of all, thanks for having me here today, guys. My name's James Denton. I'm a principal architect at Rackspace Technology. We're based out of San Antonio, Texas. I've been involved with OpenStack for the last 10 plus years, primarily in the private cloud space and especially scope to networking, both physical and virtual. So today, I want to share with you some experiences in using Bifrost to perform remote server provisioning, which is the ability to deploy an operating system against a set of nodes across a VPN tunnel with no local PIXI or DHCP server or provisioning system in place.  I learned some of these tools just enough to perform a POC.  I'm always soliciting advice. All right. So for those that aren't familiar with it, Bifrost was introduced around the metaka timeframe and is a sub-project of the Ironic project, which is a service responsible for bare-metal provisioning. It's a collection of playbooks that can install what is essentially ironic light, as well as handle enrollment and deployment of bare-metal instances in an automated fashion. So with Bifrost, the ironic bits are completely decoupled from the rest of the OpenStack stack, safe for some optional integrations with Keystone and possibly other services. So here at Rackspace, we're just dipping our toes into the Bifrost waters after having run Ironic for many years now as part of our on-metal offering in public cloud, as well as our private cloud offerings based on OpenStack Ansible and Red Hat OSP. So where Bifrost is really useful for me is its ability to answer the question of how do I bootstrap the node that bootstraps the nodes? So whether it's one or 100, Bifrost does seem to be up to the task. And really, because it is ironic under the hood, I don't think that's any surprise. Couple with some additional automation, you can find yourself standing up in an environment relatively short order if you've taken the time to develop an inventory and a strategy. And we'll kind of go into that a little bit later. Traditionally, in a remote environment, the bootstrapping process consists of a deployment engineer with an ISO and a few days or weeks on-site or remotely to handle the operating system install and network configuration. So or in some cases, the vendor might be asked to deploy the operating system and basic network config before the servers are even shipped. So tools like Bifrost Ironic and even canonical NAS, if we can say those words, help bring a cloud-like deployment strategy to bare metal. So for the rest of my time here today, I'll share with you some basic steps of getting started with Bifrost, as well as how to cover how we are using it to deploy bare metal nodes across the United States via hub and spoke IPsec VPN with no changes to Bifrost and some limited changes to DNSMask. So before we can actually proceed with the installation of Bifrost, one must know their environment as some of those details are required as part of the installation and deployment process. Pictured here is a remote deployment in a data center in Dallas, Texas, consisting of an Edge firewall and a handful of bare metal servers connected to some local switching infrastructure. The use case for solving for here is the ability to bootstrap this particular environment using Ironic-based infrastructure located in another DC. The R740 that's pictured here has a dedicated Pixie interface on EN02, which is a 1 gig interface on that two-port NIC. In addition, there's a single 2 by 10 gig bond. For production traffic, they may or may not use that same Cisco ASA. But for the purpose of Bifrost and Ironic in particular, we only really care about that Pixie interface. In lieu of the DHCP server that would exist in the same local VLAN as this Pixie client, our Cisco ASA is going to act as a DHCP relay. So it's going to forward all of the Pixie and DHCP requests across the VPN tunnel that exists in the other data center. So in what we'll call the centralized Chicago data center, Bifrost is hosted on a virtual machine that's dual-homed. One network interface is used for the management of the Bifrost VM itself. And the other network interface will be used for Pixie and DHCP client requests coming over the VPN. The former is the black line named external. The DHCP interface is the red one named Pixie relay. The management interface not only used to reach the Bifrost host itself for management, but to allow that host to reach out and tickle the out-of-band interfaces of the bare metal hosts for power-on and reboot commands. In our environments, out-of-band networks are truly out-of-band, but for some remote environments, it might be reachable via the same VPN tunnel. As long as it's reachable from this Bifrost host, whether it's local or routed, Ironic will be happy. Since we intend on these Pixie clients to hit the backside interface of this Bifrost VM, static routes or some policy-based routing rules are necessary to ensure that the response traffic is actually sent back out the same interface it came and towards the ASA and back over the VPN. So in this example, the client will source from DFW from the <IP_ADDRESS>.25 sider over the DHCP relay and over the tunnel. And the DNS mask on this Bifrost host will respond accordingly. So to summarize, we have these two data centers, DFW and ORD, and they're linked by an IPsec site to site UV tunnel between two Cisco 8A firewalls. Everybody with me so far? Yep. Cool. So now that we know what the environment looks like, let's take a look at how to install Bifrost. So the installation of Bifrost can occur in one of two ways, either the Bifrost command line client or via the Ansible Playbooks. Both of these options are available from within the Bifrost repo, and the documentation upstream kind of gives you more guidance on using the CLI versus the Playbooks. But the takeaway here is that those Playbooks are totally customizable, and you can integrate them into whatever system you deem necessary. But in either case, you're going to need to know your environment, which at a minimum includes the DHCP address pool for handing out addresses to the bare metal nodes seeking leases, as well as the network interface on the Bifrost node used to respond to those requests. So in the DFW environment, the bare metal host's Pixie network is <IP_ADDRESS>.192. slash 25. The gateway device is a Cisco ASA with a .1 address. The DHCP pool could be a subset of that slash 25, and then the hosts themselves can have static IP assignments from the rest of that site or once provisioned. So it's important to remember that none of these addresses are actually local to the Bifrost host or to that R&D environment. They'll all be routable and reachable over the VPN tunnel. Pictured here, I've done myself a favor and made myself a small bash script that takes some of the environment variables and inputs them as overrides for the installation Playbooks, namely the ability to define which version of Bifrost I want to install in the network interface. I have chosen here to deploy stable the antelope version of Bifrost. But sometimes there are bugs, which in testing, I had to revert to ZED, kind of avoided master for reasons. But once this installation is complete, you can run bare metal commands against the Bifrost cloud to find in clouds.yaml, which is actually installed by the Playbooks. And this is essentially the Python ironic client decoupled from the OpenStack client. So the installation of Bifrost installs configures a core set of services, including ironic API and conductor, ironic inspector, DNSMath, MariaDB, and Nginx. DNSMath serves an important role here as the DHCP server and the TFTP server directing those clients to download the initial RAM disk or VPN. The Ansible Playbooks are responsible for configuring all of these components, so care should be taken to avoid changing configuration files manually unless they be overwritten on a subsequent Playbook run. The exception to this, however, is DNSMath, as there are some changes necessary to facilitate the DHCP relay we've implemented. Thankfully, DNSMath does allow for the use of additional configuration files in a com.d folder that won't be overwritten by Ansible, but actually get aggregated with all of the other configuration files. And we'll kind of demonstrate that in a few minutes. A quick glance at this ironic.com file shows that it references the local host and directs clients to itself for the download of the RAM disk and some of the other necessary components. And then we can see here from MariaDB, it really is limited to just the ironic related databases. So none of the OpenStack components are installed. And in leveraging a separate DNSMath configuration file that won't be overwritten by the Playbooks, we can define multiple sites that will be serviced by this Bifrost host by multiple VPN tunnels using tagging. So here we have the DFW site defined, as well as a site in Hong Kong. Every additional environment we want serviced by this particular Bifrost instance needs these options with a unique IP space and appropriate routes in place on the host. A separate Bifrost host can be used per site, as well, for further segregation and customizations. But ideally, this particular Bifrost host could service 30 different data centers in a hub and spoke VPN, as long as each of these configuration options are listed for those individual site. So whenever you perform like a bare metal server list or bare metal node list, you'll see all of the nodes sort of intermingled. Once Bifrost is installed, the next step in the journey is to enroll the nodes. The enrollment process includes creating the nodes within Ironic and defining various properties, such as the out-of-band addresses and credentials, image locations, and more. The images need not be local to either environment. And in fact, we've uploaded them to our Swift-based object storage system node as cloud files for easy access. In the DFW environment, we're working with an HP ProLiant Gen 9 and have defined the out-of-band address, credentials, host name, and MAC address of the pixie interface. When enrolling the node via Bifrost playbooks, these properties are defined in an inventory file, like shown, and are used to create the bare metal node within Ironic and configure such properties as driver info, driver, and off-it-fo. Upon enrollment, the node may be cleaned automatically, depending on the configuration, and may sit awaiting the next command. Bifrost can even be configured to inspect the node upon enrollment, and that resulting information can then help the operator to be a little bit more explicit on the deployment details we'll see in the next step. Enrolling the node is as easy as using the Bifrost CLI command, as long with the aforementioned inventory file, which then triggers Antible to perform the enrollment task, and once complete, the node's available for deployment. So here we have an inventory that I've created that's for a particular storage node, but you can actually have an inventory of 100 nodes, and it will actually enroll them all at once. So for every task, you'll just see it repeated for each individual node. To deploy a bare metal node, the Bifrost CLI command will be used to deploy, I'm sorry, with the deploy directed, to deploy against the node specified in the inventory file. You can either target a single node or an entire environment for enrollment or deployment based on that inventory, but the throughput may be limited if you do a bunch at once, especially over this VPN, because remember, the RAM disk and the kernel are being shipped over the VPN tunnel. One thing to keep in mind is that the root device hints are really helpful, as it allows Ironic to target a particular hard drive to deploy the image onto, in case you have multiple disks. So this being a storage node, it's got a RAID 10 for the boot disk and then a bunch of RAID zeros for all of the storage disks for like Ceph. So doing the inventory allowed me to identify how those disks were identified by Ironic. And then I can update the root device hints to make sure I target the RAID 10. Let's take a time. Pre-recorded a bare metal deployment process that I'll just kick off real quick. Once the PXE process begins, the RAM disk and the kernel are downloaded from the Bifrost host by the VPN. It takes approximately three minutes to copy the bare metal image to disk, which includes downloading the image from object storage before the node is rebooted. And then the remaining seven minutes in typical HP fashion is the pre-boot and boot process. So here as we look at this, we can see that this <IP_ADDRESS>, port 8080, is actually the IP address of our Bifrost node. I'm sorry, CFTP. And in this case, HTTP hosting that IPXE file. So we're downloading the RAM disk right now. It will boot. And then the Ironic Python agent kicks off and starts doing its job. And we'll download the image from Cloud Files. I'll speed this up a little bit. So if you're familiar with Ironic, this is Ironic. So it's doing the same thing that it would do on a typical Ironic deployment. As we get a little bit closer to a three minute mark, we'll see Ironic, well, we'll see the shutdown process start to begin. There we go. And then a reboot will occur. And then the node will come back. What I really want to show you is our node is now up after about 10 minutes. And we have a host name set here. So that host name is provided by the metadata and user data of this particular host, which is provided by a config drive that is actually a partition on the hard disk. And cloud init in this cloud image pulls the relevant metadata out. So let's revisit that earlier diagram and take a look at the high level process being followed. Once the deploy is triggered, Bifrost and ORD tickles the bare metal node in DFW via the out of band interface and powers on the device. The bare metal node, which is then set to boot from the network, initiates a DHCP request. And that DHCP request is relayed over the VPN tunnel to the Bifrost VM in a response it sent back. The bare metal node boots from the RAM disk, indicated in the DHCP response. And then the IPA copies the cloud image to disk and reboots the node. And then once the server is rebooted, cloud init will gather that user data from the attached config drive and a basic network configuration applied. So that IP address that we actually defined in the inventory as IPv4 underscore address is what's configured on EN02 upon reboot. The RSA key that was provided as part of the inventory is also used on this host. So I can SSH from that Bifrost VM as long as that routing is in place and access this device. So user data can be leveraged to provide additional configs and commands that can be executed by cloud init, including net plan, batch scripts, and others. For our purposes, this base connectivity is sufficient enough to allow us to run additional Ansible playbooks that will set up networking bridges, bonds, and other IPs to stage the node for an eventual open stack deployment. And by leveraging that other set of custom playbooks, we can prescribe specific network configuration details for each node that will eventually be kicked by Ironic. We leverage the Ansible net plan role and apply a very specific net plan configuration that fits our open stack Ansible deployment model, along with all of the individual IP addresses and routes that are needed to facilitate that. So once I run those custom playbooks against the IP on EN02, we can log back into the machine and see all of our routes have been updated. And now if I ping Google's DNS server, it's actually leaving the bonded interfaces and not the pixie interface. So the use of Bifrost has considerably simplified the process of provisioning remote deployments by not requiring a full blown open stack or Ironic deployment or any other provisioning system on site. And simply relying on standard IP stack VPNs and the DHCP relay functionality, we can theoretically stand up an entire environment in about 30 minutes, minus any cabling or other issues. So the takeaway here is really knowing your environment beforehand, developing a plan based on a proof of concept like I did here. And that's the key to success. So thanks again for your time. If you have any questions, I'd love to hear them. There is a question from someone on the call. Are there any architecture specific dependencies on Bifrost or does it work on R64? So really, you're going to be limited to whatever Ironic supports because Bifrost itself is simply playbooks and automation around leveraging a very compact Ironic deployment. So if you have bare metal images that support arm64 and the kernel and RAM disk and all of the other components necessary to actually bootstrap a bare metal node, support arm64, then I don't see why that would be a problem. So I think someone asked that question at the one of the opening for Summit, maybe the year ago. And community, the Ironic community, they don't focus too much on the architecture. But there were some voices from the group, I remember, stating that it just works out of the box. Like it's not really tested or just by vendor or by any kind of institution. But again, as someone mentioned, I think it was a personal for both Australia. I think it was red added, too. He said they had a use case for validating arm and they weren't able to do it. It just works with the regular Ironic, but Bifrost is just using the Ironic bits. I don't see how this would be done. That's right. That's right. Yeah. I forget now if the Bifrost Playbooks download Ironic packages for that particular operating system or if it's actually compiling from source, I can't recall offhand. I suspect it's probably pulling devs and RPMs. So your Bifrost host, I don't think there's any reliance on that being an arm64 box, but certainly the images that you want to deploy in the kernel RAM disk would need to support the arm architecture. OK. So I have a question for you, James. So since you're talking about these distributed architectures, where you have some Ironic boxes from Dallas and the other ones from the other part of the country, where do you store all of these images for the Ironic? Do you distribute them as well or is it? I may have mentioned that, but maybe I missed it. Yeah, sorry if I have to. They are an object storage, right? So the Rackspace cloud files is like a public object storage service. And so that has some built-in CDN functionality. I don't know if it automatically distributes those images across the various sites based on user demand or it's not certainly something I had to do manually. But if I were deploying bare metal nodes in other regions of the world, then it would certainly behoove me to have those images a little bit closer to those sites. And for every node that you define in the inventory, you can be specific with the image location. So if I know I'm deploying against a bunch of nodes in Hong Kong, well, for those particular nodes, I'm going to specify a location that's a little bit more localized. In the US, I could have all my images hosted in Virginia and Dallas and Chicago wouldn't really mind too much. But I can see that being a problem somewhere else. I've got a question about the choice of IPsec as the tunneling protocol for ODAP demo and potential alternatives. For example, I understand that the way you set this up with the DSP board as the only unicast gets forwarded across that IPsec tunnel, which makes it pretty simple. You could probably use any other tunneling technology in place of IPsec as well. But if we compare that to some kind of a layer 2 tunneling pros and cons, what you thought? What guided the decision to pick IPsec? Yeah, so I'll tell you, the decision to use IPsec was based on just prior experience in configuring, especially like the Cisco ASA. I used to live and breathe those devices earlier in my career. So it became just familiarity and a fairly simple configuration on the side of the ASA. I think I spent a few hours trying to figure out the DNS mess side of things a lot more time than the ASA side of things. So that's really it. I don't see why this type of solution wouldn't be solvable with another tunneling protocol or another strategy. Just for me, this was the quickest path to success. Basically, any tunnel that could forward unicast traffic play a thing we'll do for this use case? I would think so, yeah. And for our remote deployments, a Cisco ASA or a firepower running ASA code is a pretty standard part of our bill of materials. So this was another edge device, like a Palo Alto firewall or something, the strategy might look a little different. But for our deployments, IPsec is a pretty standard component. Another question about the two network interfaces on if it was Chicago where the IPROS VM was living, you had two nix, their one for external access, and the other one was responding to the dhp requests. Any reason you couldn't handle that on the ASA using a split tunnel? So yeah, I did dual home that IPROS VM. And looking back, that could have been just a single interface. Right.  And the reason now escapes me. I think I mentioned earlier in the slides that once I get it working, I tend to move on without questioning those decisions too much. But if I were to redesign this for a more production use case, then certainly I'm streamlining it, I think would be in my best interest. Yeah, I guess it wasn't the extra playbook you ran at the end who set up the, but I was on the other side. I was on the bare metal side. Right, right. So with the dual homing of that IPROS VM, like you mentioned, I have to add static routes to get back out that interface. Yeah, and certainly with one interface, I wouldn't have to worry about that anymore. And moving forward, it may just be a good idea to eliminate that step. Yeah. It opens up possibility for ACMET routing without, I think without. Yeah. Right, right. Yeah, it's really not a necessary thing anymore. And that might have just been on me initially, anticipating some additional difficulties that never manifested, right? And it works the way it is. I'll touch it, but it ain't broken. Exactly, it's not broken, yeah. So, you guys go first, yeah. I was going to ask, does BIPROX have some kind of support for multi-conductor for scalability? My understanding, ironically, that the way you scale nodes is by the increased conductors. Each conductor is responsible for pulling the IPMIs and making sure the nodes are up in the state that they're in. So if BIPROX supports that model, you can scale out or zone. I mean, probably not in its current form. It seems to be written specifically to kind of assist in bootstrapping a limited number of nodes to then deploy a full-blown ironic setup, right, that would then be used to do the rest. So I don't get the feeling that that's kind of a use case that's really asked for, especially if we look at the playbooks and they've got things prescribed to local hosts, it doesn't really seem to want to fit that multi-conductor model. So you want to scale it by using multiple BIPROX nodes, something in that manner? Yeah, probably not. Maybe if this became something that was, you can set up a BIPROX environment in under five minutes. If you were going to use an ironic-based system in a similar model, then maybe you set up a full-blown ironic deployment with all the other bells and whistles, and then you get the scalability. Sure. One other question for you. Does BIPROX, if you're looking to ironic-based capability to do Kexec, so you can skip the reboots after the image is deployed? So there's a feature in ironic-based, you do that so you don't have to reboot every bare metal load a second time. You can Kexec into the new kernel at the current disk. So it's easy to reboot time and that scale that can save you a ton of time. Yeah, that's a good question. You're talking the reboot after the deployment or the reboot after the clean? OK. Yes. After a great second, you can take exactly the kernel that's on the new system. It's just been written. You know, I don't know. I would think so. I mean, I think kind of whatever's available to ironic from a conductor and API standpoint is probably true. It just comes down to your ability to toggle that and turn it on or off. Not I don't think everything is exposed via an ansible override. But if you could make it so, right? Yeah, sure. Sorry, I have no experience with BIPROX, but I've previously deployed ironic for about 1,000 nodes APC cluster. So we'll keep this capability back. And that was waived actually in all you need to see a little bit about. So it's been quite some time. Yeah, I mean, if that's just a setting in the conductor parameters, then it might be worth trying. I know that whenever a node is cleaned, it'll hang out and await further instructions, whether that's the deploy command or whatever that happens to be. Inspection will actually reboot the node into the inspection kernel and then do its thing and reboot after that. But yeah, I'm curious to try that out. Thank you. I was actually going to ask a question to you about the scalability. I think that a rule of thumb we see with our customers, like one conductor per 200 vermetals nodes, right? If you only have one BIPROX node, then I don't know. Have you maybe done any scalability at all with the BIPROX? Not with this BIPROX setup. No, it's really just meeting that use case of like, I don't have any localized kick system in place. And so how do I quickly at least spin up a handful of nodes to then maybe build a little bit more robust setup that can then do the rest? And I think that's where it's targeted. Like when I mentioned bootstrapping the node that bootstraps the nodes, I think that's the primary use case. Because otherwise, I mean, if you get into all of the other ironic things, I don't know how much dependency there is on Nova or Keystone, even with a more scalable ironic architecture. But it'd be worth testing out. Because you don't have a load balancer either, right? Yeah, I guess there is in Ginex. But yeah, there's probably a bit more work to do to figure that out. Sorry. That was cool. Just speaking from the latest version I got through was I caught it when I still ran an ironic, but one of the biggest scalability issues was the way it pulled up IPMIs was clearly. So if you had to wait for 1,000 nodes, it would take 15 minutes to pull up every single IPMI process that I had to get responses. So I don't know if it's going to be a good thing or not, but I don't know why it's not. I have this thing called Shroudactor Groups these days. I don't know if you've tried those, where you can assign a block of very little nodes to a specific ironic node. You can kind of distribute the load. It's still handled by the conductor level? Yeah, it will be for the conductor level, but it's like you have the option. We see some of the big ironic users, like CERN using it, where they have a bunch of conductors and they assign 200 very little nodes to one of the conductors and then they just go for the H&A kind of mixing of the machinita. There are some ways that right now in the ironic Yeah, and I think that will actually, yeah, doesn't the failover of that work, where it moves them to another conductor and then it preempts when that conductor returns, something like that. Yeah. All right, I think we're at the top of the hour. I have one more question. Yeah, one more quick. In your example, AJ, thanks. In your example, the storage that you set up, you mentioned that it had disks per set to use. Are those double disks, are they attached storage or does it really matter? No, so this is like a, this is a G9. I think it has 12, three and a half inch slots.  And so the RAID, two disks and a RAID 10, and then the rest are in a RAID zero because of the limitations of the RAID controller itself. It's not the ideal Seth storage node, but everything's, it's all integrated into a 2U chassis. Thanks. Yeah. All right. Thanks so much, James, I appreciate your time. It was a great presentation.


One of the most interesting aspects of Chinese medical diagnosis is using abdominal diagnosis to prescribe herbal formulas. So in this video I'm going to demonstrate really what is a several thousand year old abdominal map for prescribing herbal formulas based on Chinese medicine and a branch of Chinese medicine that actually went to Japan called Kampo. And I'm going to show you the general abdominal zones, what common findings are that we find, and what they actually indicate. Hey guys, I'm Dr. Alex Hying, doctor of acupuncture and Chinese medicine and author of the health book, Master of the Day. So going back to the abdomen here, when we talk about the abdomen overall, there was a famous 17th, 18th century, so he lived in the 1700s physician named Yoshima Soutoro, and he said that the myriad diseases all originate in the abdomen and that's why we examine it without fail to determine the basically the cause of disease. Now this is one of those lost arts in Chinese medicine that is not commonly practiced, and is very commonly practiced in Japan. One of the branches of Chinese medicine that went to Japan and is heavily used in actually some of the classical forms of Japanese acupuncture. So most acupuncturists do not actually palpate the abdomen in a diagnostic way besides, you know, poking here and does it hurt? I'm putting a needle there. But a sophisticated level of abdominal diagnosis is not that common these days, but one of my most impactful mentors, one of the herbal doctors I studied with specialized and preferred using the abdomen over the pulse diagnosis or even over the patient's own self-reported symptoms themselves. He said, you know, every skilled physician examines the abdomen and the pulse and these kinds of objective findings so that they can know and not just guess or trust what the patient says that the person is getting better. So the abdomen is one of the most objective findings that you can use with a little bit of training to know what is the quote, diseased area? Where is the problem? And what do we actually need to treat? So the first area is the epigastric area. Now typically I would do the abdominal examination from the other side, but just for the sake of lighting and the camera, I'm going to do it from the opposite side. So typically the first area that there are most commonly findings is the epigastrium. So the upper epigastric area is the area above the belly button and it's very common in this upper abdomen to find two findings. One, the primary finding is often called P syndrome and P syndrome is really a subjective and objective sometimes sensation of fullness, a blocked feeling, a queasy feeling, an indigested feeling, a nauseous feeling. So when I apply a little bit of pressure, what I look for on my side is first on the spectrum of is it more yin or yang? Is it soft or is it hard? In Julie's case, this is a soft glomus. So this soft epigastric finding means that a person often has issues with what we call the transport and transformation of food, which is really a stomach and spleen issue. So stomach and spleen often deal with issues like bloating, gas, indigestion, people who are prone to abdominal fullness, food allergies, and then we can ask, do you have any of these issues prone to them? Sometimes some bloating and whatnot. Okay, what about indigestion? Indigestion and acid reflux sometimes too. Okay, so we ask her and we can confirm. And you know on the other side of the spectrum is that there is a hard glomus here. So hardness, epigastric, this hardening, often as we go down this ren channel, right, as we get towards ren 12, which is equidistant between this really this xiphoid sternum here and the ambilicus right in the midpoint is often where you find epigastric hardening. Now this is a similar kind of epigastric finding. And it's really just a different constitutional finding sometimes for the same thing, but very often it indicates a long-term dysfunction in the stomach or even a long-term issue with the circulation in the actual stomach. So this area, the surface becomes hard here. So very common to see with people with food allergies and bloating and things like that. So we begin with the epigastric area. Most common area that I find there's issues. The second finding we look for is pulsation. I'm just applying very gentle pressure and I'm looking for the pulsation of the abdominal aorta. For Julie, very, very minor. There's not a significant pulsation here, but pulsation if you lay down and you're at rest and you can feel your heart beating in your stomach as people self-report. There's two very common findings and it's very, very commonly seen. So obviously, you know, you have the abdominal, the aorta comes down and it splits. And very commonly, this is indicative of two things that are pathological. One is just general nervous system activity. So a person who's basically has a high level of stress and there's a level of sympathetic dominance, you'll notice an elevated strength to the heartbeat and you'll notice it in the abdomen. And that just is because the heart is beating harder. Second scenario is the person is very, very thin. Now Julie's thin, but she's a healthy level of thin. And the third scenario is often when there's a lot of bloating. So it's very indicative of people who have bloating and issues with digestion and food allergies, food sensitivities. The reason for that is it's almost like if you have the heartbeat, the aorta is like an underwater volcano. When there's water above it, the shockwave is very, it comes up like this, right? When the abdomen is there's not excessive gas, there's not excessive fluid, then the pulsation is not quite as strong. But when the person is filled with gas or they have a lot of fluid retention, you can often see that and feel it much more popably. So epigastric finding, pulsation, and then we come under the subcostal area. So again, I'm just lightly palpating here. And what we're looking for is just a moderate amount of, there should be a healthy elasticity. The most common pathological finding you find here is it's hypertonic. So it's excessively tight. So when I press, it feels like I'm hitting a board as opposed to a pillow that has some resistance to it. So these subcostal findings are very often issues with the liver, gallbladder, or sometimes even lymphatic issues. So very common to see women develop these subcostal findings when they're on their cycle. You can find them when people have chronic digestive issues, certainly acid reflux or gallbladder issues. I mean, the anatomical gallbladder, people most often report distention, pressure, and pain in the right upper quadrant, right? It's anatomically located there. So that makes sense. But very often, we call these Cheyenne findings. So they're most often related to the gallbladder, the organ, the triple warmer, as well as the liver. So that is probably the third most common finding that I see. When we go to the low abdomen, really the areas we're looking for, we talked about the area above the umbilicus. It's very often a spleen, pancreas, stomach finding, common with GI problems, sometimes even allergies that will be hardening in this epigastric area. But then we go just lateral to the umbilicus, the belly button. And very common, even with a very light pressure to feel tension and sometimes even pain. Now in women, these are most often gynecological findings, dysmenorrhea, so painful menses that can be amenorrhea. I've seen women that have fibroids, PCOS, things like that will often show up as a hypertonic area, just lateral to the belly button here. And if it's severe, there's pain with pressure, not just a sensation of tightness, you know, as I'm talking here, my peripherals are paying attention to her face. But even via palpation, I'm not really picking up much at all from her in terms of this area anatomically around the ovaries. But very, very commonly seen. Now in men, this low abdomen finding is often an issue related to the what we call kidney deficiency. So issues with night sweats, frequent urination, issues with libido, that sort of thing. So kidney deficiency often shows up in a hypertonic low abdomen, this excessive tension in this low abdomen is cramping and tight and that kind of thing. Now, other common findings I would say, beyond those, the last one would be this area right underneath the belly button, right? So just the three inches or so below the belly button like that, this area should have a healthy sort of elasticity, just like the abdomen, it should be a healthy level of both soft and tight. So I apply pressure. There's some spring back, it doesn't cave, and it doesn't feel hard as a board. Right, even someone who works out all the time, the abdomen should not feel hard like a board, even if they work out regularly. So the low abdomen is often again, a bladder or kidney finding. So sometimes for example, you know, women who when they have UTIs will describe hardness or pressure in the low abdomen. Obviously, the bladder is right there. No surprise. But often this is a kidney deficiency finding.  So when I push down, there's a healthy spring back and a healthy balance. And when it's pathological, either there's mush, it's just a you just sink into a cave, or you push and you can feel the separation of the rectus muscles and you can feel at the bottom of it, what feels like a little a little band of tension. And we consider that a pathological finding. So just a recap, the abdomen very, very commonly used to describe herbal formulas in my practice. Most often, we see upper epigastric areas, P syndrome, so glomus, which is usually digestive in nature or reflux, rib side findings, pulsation of the abdominal aorta findings lateral to the belly button, and then inferior to the belly button. And these are really the most common abdominal findings that I tend to see day to day. Now, a lot of people, you can even put your hands on your own abdomen and see what comes up, see what you find. Alright, guys, so that's what I have for today on the abdomen and abdominal diagnosis. Again, if you want to be a patient of mine, or learn about telemedicine with me throughout California or in Los Angeles, check out the link right below the video. And I've also put together a free guide for daily rituals that can potentially help you add years to your life with Chinese medicine. So those are all right below. And I'll catch you soon.


Welcome. I welcome you all to this lecture in the course, Samasa in Paninian Grammar 2. As is our practice, we begin our lecture with the recitation of the Mangala Charana. Vishvesham Satchitanandam Vandeham Yo Khilan Jagat Charikarthi Bari Bharti Sanjariharthi Leela Ya Vishvesham Satchitanandam Vandeham Yo Khilan Jagat Charikarthi Bari Bharti Sanjariharthi Leela Ya In this course, we studied the three important types of samasas, avyayibhava, bahuvrihi and dvandhava. We have already studied avyayibhava and bahuvrihi in some detail. Currently, we are focused on the dvandhava samasa, which is extremely important type of samasa in Sanskrit. The features of the dvandhava samasa can be briefly pointed out with the help of this equation on this slide, where we have x and y put in separate square brackets, indicating that they are independent of each other, independent in terms of the word form as well as the meaning as well as the accent. The plus sign indicates that x and y are semantically related and therefore the speaker of Sanskrit decides to merge them together and thereby starts the process of compounding primarily in the intellect and later on as a result the expression also follows suit. In the form of the sounds which are audible. Now the output generated is one unit xy, one unit in terms of the word form as well as the meaning as well as the accent. Now x and y both are put in the bold letters primarily to indicate that both x and y act as the head in the dvandhava samasa. We have already seen that in the tadpurusha samasa y is put in the bold characters to indicate that y acts as the head of the tadpurusha samasa. In the avyayi bhava x is marked with the bold characters indicating that x acts as the head of the avyayi bhava samasa. In the bahuvrihi samasa neither x nor y is marked with the bold characters indicating thereby that none of the two constituents acts as the head of the bahuvrihi samasa and that the head of the bahuvrihi samasa lies out of the compound out of the constituents. In the dvandhava samasa however both x and y both the constituents they act as the head of the samasa. In the ashtadhyayi the dvandhava samasa is treated at various places. The samasa vidhaya ka sutra that is the compound prescribing sutra is only one namely charthe dvandhava 2229. The samasanta pratyaya vidhaya ka sutra is also only one five four one zero six. The svara vidhaya ka sutras are not too many only a few from six to thirty four up to six to thirty seven. The ekavad bhava vidhaya ka sutras stated in the ashtadhyayi are from two four one to sixteen amongst them for the dvandhava samasa they are from two four two to sixteen. The linga vidhaya ka sutra as far as the dvandhava samasa is concerned is 2426. The three features of the samasa which apply also to the dvandhava samasa are aikarthya or ekarthhata, aikapadhyya or ekapadhata and aikasvarya or ekasvarata. We have been highlighting these features again and again and again and we hope that the learners will remember these features very much. These are the distinguishing features of the samasa. Currently we are studying the ekavad bhava as far as the dvandhava samasa is concerned which says that there are some words and some meanings which get compounded only in the sense of samahara and never in the sense of itaretara yoga. And just as samahara is singular in number and neuter in gender the samasa of these restricted elements also gets singular number as well as the neuter gender. This getting the singular number is referred to here as ekavad bhava. So what is ekavad bhava? When the dvandhava samasa takes place, when the sense of itaretara yoga is denoted, the output samasa has the feature of the udbhutava eva veda samoha. It is a collection in which the constituent parts maintain their difference and the constituents act as the independent entities. The output samasa will then have gender and number accordingly according to the gender and number of the constituent. Here we may get all the numbers singular as well as dual as well as plural. But when the dvandhava samasa takes place, when the sense of samahara is denoted, the output samasa has the feature of the tiro hitava eva veda samoha. A collection in which the difference within the constituent parts disappears. The output samasa will have gender, neuter and number singular. Here we do not get all the numbers singular, dual as well as plural but we get only singular. Now there are some words which demonstrate a particular feature. Whenever they get compounded as dvandhava samasa, they get compounded only when the samahara is denoted and never when itaretara yoga is denoted. The earlier explanations of itaretara yoga and samahara were generic in nature. They may apply to any word, any meaning but there are some words and some meanings which get compounded only if samahara is denoted and never itaretara yoga. So they will always appear in singular and in neuter gender. They are stated in a section that begins with 242 and goes up to 2416 and this is what is called ekavad bhava. This section is that of the ekavad bhava. We have studied in the previous lecture, we studied the sutras from 242 onwards up to 2410. Let us proceed further and study the sutras beginning with 2411 in this particular lecture. 2411 is gavashva pravratinicha. This sutra means that the dvandhava samasa of the words mentioned in the list that begins with gavashva takes place only in the sense of collection. So we have a list of words that begins with gavashva and so it is clear that this samasa takes place only when the sense of collection is denoted and not in the sense of itaretara yoga. So we have a list of gavashva, gavashvam, gavavika, gavavikam, gavayidakam, ajavikam, ajayidakam, kubjavamanam, kubjakairatakam, putrapautram, shvachandalam, strikumaram, dasi manavakam, ushtrakharam, ushtrasasam, mūtra-sakrut, mūtra-pūrīṣam. So go and ashva, they both get compounded in the sense of samahara only. Gavago and avika also get compounded in this particular sense only. Let us go to 2412. The sutra is Vibhāsā vṛksha-mṛga-traṇa-dhānya-venjana-paśu-sakuni-asvavadava-purbāpara-adhara-taraṇām. I repeat, Vibhāsā vṛksha-mṛga-traṇa-dhānya-venjana-paśu-sakuni-asvavadava-purbāpara-adhara-taraṇām. What this means is that the duvandva samāsā of the words denoting vṛksha, that is tree, etc., takes place only in the sense of collection or samahara optionally. That means optionally the itāre-tara yoga is also possible. Thereby both the meanings samahara as well as itāre-tara yoga become the conditions for the application of the process of compounding. Let us look at the examples of each one, vṛksha. And we have the examples of plaksha-niyagrodhama as well as plaksha-niyagrodhau. Plaksha-niyagrodhama is the example of samahara and plaksha-niyagrodhau is the example of itāre-tara yoga. Mṛga-rūrū-prūśatam or rūrū-prūśatau both is possible. Trūna is the kusha-kāśam as well as kusha-kāśā-hā-hā both are possible. Vṛksha is tree, mṛga is any animal, trūna is grass, dhānyā is any food grain. So vrīhi-yawam as well as vrīhi-yawāhā. Viyanjana, and you have examples of dhadhigratam as well as dhadhigrate. Pashu, go-mahisham and go-mahishāhā. Shakuni, the birds, titirikapinjalam as well as titirikapinjalāhā. Ashvavadavam as well as ashvavadavau. Purvāparam as well as purvāpare. And adharotaram as well as adharotare. So here we have these examples showing that in these cases both itāre-tara yoga as well as samārū are conditions for the processing of the dvandva-samāsa. There is a statement which says that So the dvandva-samāsa of fallas, the fruits, sena, the army and the limbs of the army, vanaspati, the trees, mrga, animal, shakuni, bird, kshudrajantu, small species, dhānya, food grain and trinagrās. The saddvandva, which is samāhāradvandva, takes place of these elements only if the number of the constituents which get compounded is many. If the number of the constituents is not many, it's only two, then the samāhāra does not take place. Only the itāre-tara yoga then takes place. Let us proceed further and let us study 2.4.13, which is vipratisiddham ca anadhi karana vāci. The word adhi karana here refers to a substance or dravya. Anadhi karana is not dravya. Anadhi karana vāci is a word which does not denote a substance or dravya. Vipratisiddham is opposite. So words which denote opposite meanings and which do not denote any substance. That is the meaning of the words vipratisiddham ca anadhi karana vāci. So the meaning of the sutra is the dvandva samāsa of the words denoting opposite meanings, not referring to the substance, takes place only in the sense of collection or samāhāra optionally. Thus you have both itāre-tara yoga as well as samāhāra being the conditions for the dvandva samāsa to take place. So now we have sitam ca ushnam ca. Sita is cold, usna is hot or warm. So these are the meanings which are opposed to each other but they do not denote any substance and that is why according to this sutra both itāre-tara yoga as well as samāhāra are the conditions in which this compound can get formed. So we have sitam ca ushnam as well as sitam ca ushnay. Similarly, sukha dukkham as well as sukha dukkhe. And jivita maranam as well as jivita maranay. Both are possible. Vipratisiddham ca anadhi karana vāci. Next we go to 2-4-14 which is na dhadhipaya adi ini. Here there is a negation. This is also a list of words and the sutra says that the dvandva samāsa of the words dhadhipayas etc. does not take place in the sense of collection. That means it takes place only in the sense of itare-tara yoga.  Dhadhipayasi, Sarapirmadhuni, Madhusarpishi, Brahmaprajapati, Siva Vaishravana, Skanda Vishakhau, Shukla Krishnaau, Idmābārhiṣi, Vīkṣātapasi, Śraddhātapasi. In all these examples the dvandva samāsa takes place only in the sense of itare-tara yoga and never in the sense of samāhara. Let us go to the next sutra, 2-4-15 which is adhi karana itāvatve ca. The meaning of this sutra is the dvandva samāsa in which the meaning of the compound is measured. Adhi karana is the substratum over here and this substratum is nothing but the meaning of the samāsa and when this meaning gets measured then of course gets measured by the number of other words which count. So then such a samāsa does not take place in the sense of collection or samāhara. It rather happens in the sense of itare-tara yoga. So for example danta and ostha, these are the limbs of the body, prāṇyāṅga. So the samāhara is stated and the dvandva samāsa is stated only in the sense of samāhara. However when the danta and ostha they get measured, the meaning of the samāsa gets measured. Adhi karana itāvatve ca. When adhi karana itāvatva happens then the same samāsa does not happen in the sense of samāhara but rather it happens in the sense of itare-tara yoga. So dasha is the number which indicates that the samāsārtha of danta-ostha is getting measured and so then danta-ostha does not remain a samāhara-dvandva. It is rather the itare-tara dvandva. So we have dasha, danta-ostha. Similarly dasha, māradhaṅgika-panavika. Māradhaṅgika-panavika are the parts of the thūrya, so thūryaṅga. So the sūtra dvandvasca pranitūrya senanganam 242 does say that the dvandva here happens only in the sense of samāhara. But the present sūtra says that when the meaning of the samāsa is measured in terms of the number quantified then the samāsa does not take place in the sense of samāhara but rather it takes place in the sense of itare-tara yoga. So we have dasha, māradhaṅgika-panavika, māradhaṅgika-panavika. Next we have 2416, Vibhāsā, samipē. This means that the dvandva samāsa in which the meaning of the compound is approximately measured. So samipē adhikaranaitāvatve, approximately measured, does not take place optionally in the sense of collection or samāhara. It does take place in the sense of itare-tara yoga. So we have dantostha once again and the sūtra dvandvaśca-pranitūrya senanganam says that since these are the pranyangas they get compounded only in the sense of samāhara. But when they get quantified and that to approximately, that approximate quantification is indicated by the word upadasha, then we have upadasham dantostham. This is done optionally. So then upadashāha dantosthāha. Both usages are allowed. When upadasham dantostham is used, upadasham is an avyayi bhava. So this is the case of avyayi bhava anuprayoga. Where we have upadashāha dantosthāha, upadashāha is the bhavvrihi, stated by the sūtra, avyayam, stated by the sūtra, sankhaya avyayasannā dūrādhika sankhyāha sankhyayi. So let us study this sūtra 2417. After the ekavad bhava section comes to an end at 2416, here comes the sūtra which also says that the samāhara dvandva denotes neuter gender. The dvandva samāsā which takes place in the sense of samāhara denotes neuter gender. Therefore all the examples like pāṇipāda, śirogriva, mārjāra mūśaka, āhinakula, they all are declined in accordance with the declension of the neuter gender. So we have pāṇipādaṁ śirogrivaṁ mārjāra mūśakam and āhinakulam. Finally we look at the sūtra 2426 which states the gender of the dvandva samāsā as well as the tattpūrusha samāsā, paravalingam dvandva tattpūrusha yoho. The meaning of this sūtra is that in the dvandva and tattpūrusha samāsā the gender of the compound is same as that of the latter element that is the uttara padha. I repeat in the dvandva and tattpūrusha samāsā the gender of the compound is same as that of the latter element that is the uttara padha. This is the mention of the dvandva samāsā in the sense of itaretara yoga because in the case of samāhara the gender is already stated by the sūtrasa nāpūṁ sakam. So for example if we have the dvandva samāsā kukkutastha mayuri cah and then the uttara padha is mayuri which is infeminine therefore the gender of the dvandva samāsā will be determined by the gender of the uttara padha mayuri and therefore the entire dvandva samāsā will now appear in the feminine gender and therefore we have usages like kukkuta mayuri yau ime. Ime indicates that this samāsā is in the feminine gender. Similarly the same constituents where the uttara padha changes and now you have mayuri kukkuta and kukkuta is in masculine gender and then the gender of this uttara padha becomes the gender of the dvandva samāsā and we have mayuri kukkuta yau ime, the masculine usage of the samāsā. This brings us to the close of the discussion of the dvandva samāsā. Here are some observations. There is no upper limit on the number of constituents the dvandva samāsā can have. Literally we can say anantah dvandvaha. For example, this is a sutra 412 and this is read as sva-uja-samau chastah bhyam bhyam bhyasma sibhyam bhyasma sva-uja-am nyo-sup. This is nothing but one samāsā and this is a dvandva samāsā. This dvandva samāsā has got 21 constituents. It is that kind of compound which is formed using a very general pattern throughout with minimal semantic condition. So the treatment of this compound also remains simple in the ashtādhyayi with only one samāsā-vidhāhyaka sutra and only one samāsānta-pratyayā-vidhāhyaka sutra but with very much productivity. This must be a grammarian's delight therefore. At the end of this discussion, let us talk about the garbha samāsa which is a samāsa inside another samāsa. So dvandva garbha bahuvrihi samāsa. Let us talk about this. Here are some examples. So when the meaning to be conveyed is a devotee who has worshipped both hari and hara pujitau hari harau yena sahā. This is a bahuvrihi samāsa in which hari harau is the inside samāsa. This is a dvandva samāsa-harishcha, harascha, hari harau and then pujitau hari harau. Similarly, a family which has worshipped Rama, Lakshmana, Bharata and Shatrughna since the anyapadārtha is family, the resultant bahuvrihi samāsa would denote a new gender but inside this bahuvrihi samāsa lies a dvandva samāsa with four constituents. So now we have pujitāha, Rama, Lakshmana, Bharata, Shatrughna yena tattu. Tattu refers to this family, kula. And then we join them together, do the compounding and we get the big compound pujita, Rama, Lakshmana, Bharata, Shatrughna and the prathama ekavachana of this samāsa would be pujita, Rama, Lakshmana, Bharata, Shatrughna. Similarly, when the bahuvrihi samāsa means a student who has recited ashtadhyayi 4.1.2, swaujas, etc. the laukika vigraha would be adhitaha, swaujas, etc. yena saha and then the bahuvrihi samāsa with a dvandva samāsa inside with 21 constituents would be of the following kind, adhitah, swaujas, etc. Similarly, we have a bahuvrihi samāsa jāyā pratik grāhitā gandhamāliyā whose pritiyā ekavachana is used in the raghuvamsa jāyā pratik grāhitā gandhamāliyām. And here we have jāyā pratik grāhitā and gandhamāliyā as two constituents in which gandhamāliyā is the dvandva samāsa, gandhamāliyā and so the vigraha of the samāsa is jāyā pratik grāhitā gandhamāliyā yāsā one who made the wife to offer the scent and garland. This anyapadārtha is kau and so jāyā pratik grāhitā gandhamāliyām dhenum. Now, this bahuvrihi samāsa consists of gandhamāliyā as the internal dvandva samāsa. Therefore, this samāsa is dvandva garbha bahuvrihi samāsa and this pattern is very productive. The samāsa within a samāsa, this is very much productive and it can go on and on and on. To summarize, the dvandva samāsa is very productive in Sanskrit yet without many variations or many patterns for a grammarian to take note of. Indeed, this is vayākarana-santosah, the dvandva samāsa. Now, some other points to remember over here. One of them is that the two dvandva samāsas used in the same sentence are used to show the principle of correspondence. For example, in the ashtādhyayi, we have tundasoka-yoho parimraja-panudoho, 3-2-5, where one samāsa is tundasoka and the other samāsa is parimraja-apanudha. Tundha is a first member and that is related to the first member of the second dvandva samāsa, namely parimraja. Shoka is the second member of the dvandva samāsa and it is associated with the second member of the second dvandva samāsa, namely apanudha. Similar is the case with stambakarna-yoho ramijapoho, 3-2-13, where stambakarna is the first dvandva samāsa and ramijapoh is the second dvandva samāsa and the first member of the first dvandva samāsa is linked to the first member of the second dvandva samāsa and so on. The dvandva samāsa is used by panini to also show disjunctive application. For example, nvul truchau, 3-1-133. Here the suffixes nvul and truch are added to the verbal root one by one and not simultaneously. Similarly, tavyat-tavyaniyaraha, the three suffixes stated here tavyat, tavya and aniyar are added one by one disjunctively and not simultaneously at the same place, one after the other. Indeed, a very useful device in the hand of a grammarian. Therefore, vayākarana-pramodhā, dvandvāha. There are various other functions that the dvandva samāsa performs to serve the purpose of the grammarian. There are some other features which we have not studied in this particular course, notably the accent. But that remains for future. In this course, we have studied the important features of the avyāyibhava, bahuvrihi and dvandva samāsa. We have studied the process of compounding. We have studied mainly the sutras which prescribe and describe this particular process. And we have also studied the important features of these samāsas. The three key words for any samāsa are once again āikārthya, āikapadya and āikasvarya. These are the texts that we constantly kept referring to, the ashtādhyayi composed by Pāṇini. The samarthāṇikā, which is part of the great vayākarana, Mahābhāshya composed by the great Patanjali, Vākhapadyya composed by another great scholar, Vartra hari, Kāshikāvṛtti composed by Jayāditya and Vāmana, and the samāsapārkarana from the vayākarana siddhānta kaubhudi composed by the Bhattuji dikshita. Thank you very much.